| null;
+
+type NotificationFunction = (
+ message: ArgsProps["message"],
+ description?: ArgsProps["description"],
+ args?: NotificationConfig
+) => void;
+
+declare const notification: NotificationApi & {
+ success: NotificationFunction;
+ error: NotificationFunction;
+ info: NotificationFunction;
+ warning: NotificationFunction;
+ warn: NotificationFunction;
+};
+
+export default notification;
diff --git a/client/app/services/notification.js b/client/app/services/notification.js
new file mode 100644
index 000000000..83bd9a407
--- /dev/null
+++ b/client/app/services/notification.js
@@ -0,0 +1,21 @@
+import notification from "antd/lib/notification";
+
+notification.config({
+ placement: "bottomRight",
+ duration: 3,
+});
+
+const simpleNotification = {};
+
+["success", "error", "info", "warning", "warn"].forEach(action => {
+ // eslint-disable-next-line arrow-body-style
+ simpleNotification[action] = (message, description = null, props = null) => {
+ return notification[action]({ ...props, message, description });
+ };
+});
+
+export default {
+ // export Ant's notification and replace actions
+ ...notification,
+ ...simpleNotification,
+};
diff --git a/client/app/services/notifications.js b/client/app/services/notifications.js
new file mode 100644
index 000000000..6999471e7
--- /dev/null
+++ b/client/app/services/notifications.js
@@ -0,0 +1,46 @@
+import { find } from "lodash";
+import debug from "debug";
+import recordEvent from "@/services/recordEvent";
+import redashIconUrl from "@/assets/images/redash_icon_small.png";
+
+const logger = debug("redash:notifications");
+
+const Notification = window.Notification || null;
+if (!Notification) {
+ logger("HTML5 notifications are not supported.");
+}
+
+const hidden = find(["hidden", "webkitHidden", "mozHidden", "msHidden"], prop => prop in document);
+
+function isPageVisible() {
+ return !document[hidden];
+}
+
+function getPermissions() {
+ if (Notification && Notification.permission === "default") {
+ Notification.requestPermission();
+ }
+}
+
+function showNotification(title, content) {
+ if (!Notification || isPageVisible() || Notification.permission !== "granted") {
+ return;
+ }
+
+ // using the 'tag' to avoid showing duplicate notifications
+ const notification = new Notification(title, {
+ tag: title + content,
+ body: content,
+ icon: redashIconUrl,
+ });
+ notification.onclick = function onClick() {
+ window.focus();
+ this.close();
+ recordEvent("click", "notification");
+ };
+}
+
+export default {
+ getPermissions,
+ showNotification,
+};
diff --git a/client/app/services/offline-listener.js b/client/app/services/offline-listener.js
new file mode 100644
index 000000000..e58a9cfa5
--- /dev/null
+++ b/client/app/services/offline-listener.js
@@ -0,0 +1,21 @@
+import notification from "@/services/notification";
+
+function addOnlineListener(notificationKey) {
+ function onlineStateHandler() {
+ notification.close(notificationKey);
+ window.removeEventListener("online", onlineStateHandler);
+ }
+ window.addEventListener("online", onlineStateHandler);
+}
+
+export default {
+ init() {
+ window.addEventListener("offline", () => {
+ notification.warning("Please check your Internet connection.", null, {
+ key: "connectionNotification",
+ duration: null,
+ });
+ addOnlineListener("connectionNotification");
+ });
+ },
+};
diff --git a/client/app/services/organizationSettings.js b/client/app/services/organizationSettings.js
new file mode 100644
index 000000000..9220626b6
--- /dev/null
+++ b/client/app/services/organizationSettings.js
@@ -0,0 +1,16 @@
+import { axios } from "@/services/axios";
+import notification from "@/services/notification";
+
+export default {
+ get: () => axios.get("api/settings/organization"),
+ save: (data, message = "Settings changes saved.") =>
+ axios
+ .post("api/settings/organization", data)
+ .then(data => {
+ notification.success(message);
+ return data;
+ })
+ .catch(() => {
+ notification.error("Failed saving changes.");
+ }),
+};
diff --git a/client/app/services/organizationStatus.js b/client/app/services/organizationStatus.js
new file mode 100644
index 000000000..94ce04c60
--- /dev/null
+++ b/client/app/services/organizationStatus.js
@@ -0,0 +1,16 @@
+import { axios } from "@/services/axios";
+
+class OrganizationStatus {
+ constructor() {
+ this.objectCounters = {};
+ }
+
+ refresh() {
+ return axios.get("api/organization/status").then(data => {
+ this.objectCounters = data.object_counters;
+ return this;
+ });
+ }
+}
+
+export default new OrganizationStatus();
diff --git a/client/app/services/parameters/DateParameter.js b/client/app/services/parameters/DateParameter.js
new file mode 100644
index 000000000..3d386b384
--- /dev/null
+++ b/client/app/services/parameters/DateParameter.js
@@ -0,0 +1,95 @@
+import { findKey, startsWith, has, includes, isNull, values } from "lodash";
+import moment from "moment";
+import PropTypes from "prop-types";
+import Parameter from "./Parameter";
+
+const DATETIME_FORMATS = {
+ // eslint-disable-next-line quote-props
+ date: "YYYY-MM-DD",
+ "datetime-local": "YYYY-MM-DD HH:mm",
+ "datetime-with-seconds": "YYYY-MM-DD HH:mm:ss",
+};
+
+const DYNAMIC_PREFIX = "d_";
+
+const DYNAMIC_DATES = {
+ now: {
+ name: "Today/Now",
+ value: () => moment(),
+ },
+ yesterday: {
+ name: "Yesterday",
+ value: () => moment().subtract(1, "day"),
+ },
+};
+
+export const DynamicDateType = PropTypes.oneOf(values(DYNAMIC_DATES));
+
+function isDynamicDateString(value) {
+ return startsWith(value, DYNAMIC_PREFIX) && has(DYNAMIC_DATES, value.substring(DYNAMIC_PREFIX.length));
+}
+
+export function isDynamicDate(value) {
+ return includes(DYNAMIC_DATES, value);
+}
+
+export function getDynamicDateFromString(value) {
+ if (!isDynamicDateString(value)) {
+ return null;
+ }
+ return DYNAMIC_DATES[value.substring(DYNAMIC_PREFIX.length)];
+}
+
+class DateParameter extends Parameter {
+ constructor(parameter, parentQueryId) {
+ super(parameter, parentQueryId);
+ this.useCurrentDateTime = parameter.useCurrentDateTime;
+ this.setValue(parameter.value);
+ }
+
+ get hasDynamicValue() {
+ return isDynamicDate(this.normalizedValue);
+ }
+
+ // eslint-disable-next-line class-methods-use-this
+ normalizeValue(value) {
+ if (isDynamicDateString(value)) {
+ return getDynamicDateFromString(value);
+ }
+
+ if (isDynamicDate(value)) {
+ return value;
+ }
+
+ const normalizedValue = moment(value);
+ return normalizedValue.isValid() ? normalizedValue : null;
+ }
+
+ setValue(value) {
+ const normalizedValue = this.normalizeValue(value);
+ if (isDynamicDate(normalizedValue)) {
+ this.value = DYNAMIC_PREFIX + findKey(DYNAMIC_DATES, normalizedValue);
+ } else if (moment.isMoment(normalizedValue)) {
+ this.value = normalizedValue.format(DATETIME_FORMATS[this.type]);
+ } else {
+ this.value = normalizedValue;
+ }
+ this.$$value = normalizedValue;
+
+ this.updateLocals();
+ this.clearPendingValue();
+ return this;
+ }
+
+ getExecutionValue() {
+ if (this.hasDynamicValue) {
+ return this.normalizedValue.value().format(DATETIME_FORMATS[this.type]);
+ }
+ if (isNull(this.value) && this.useCurrentDateTime) {
+ return moment().format(DATETIME_FORMATS[this.type]);
+ }
+ return this.value;
+ }
+}
+
+export default DateParameter;
diff --git a/client/app/services/parameters/DateRangeParameter.js b/client/app/services/parameters/DateRangeParameter.js
new file mode 100644
index 000000000..dc284ae29
--- /dev/null
+++ b/client/app/services/parameters/DateRangeParameter.js
@@ -0,0 +1,278 @@
+import { startsWith, has, includes, findKey, values, isObject, isArray } from "lodash";
+import moment from "moment";
+import PropTypes from "prop-types";
+import Parameter from "./Parameter";
+
+const DATETIME_FORMATS = {
+ "date-range": "YYYY-MM-DD",
+ "datetime-range": "YYYY-MM-DD HH:mm",
+ "datetime-range-with-seconds": "YYYY-MM-DD HH:mm:ss",
+};
+
+const DYNAMIC_PREFIX = "d_";
+
+/**
+ * Dynamic date range preset value with end set to current time
+ * @param from {function(): moment.Moment}
+ * @param now {function(): moment.Moment=} moment - defaults to now
+ * @returns {function(withNow: boolean): [moment.Moment, moment.Moment|undefined]}
+ */
+const untilNow = (from, now = () => moment()) => (withNow = true) => [from(), withNow ? now() : undefined];
+
+const DYNAMIC_DATE_RANGES = {
+ today: {
+ name: "Today",
+ value: () => [moment().startOf("day"), moment().endOf("day")],
+ },
+ yesterday: {
+ name: "Yesterday",
+ value: () => [
+ moment()
+ .subtract(1, "day")
+ .startOf("day"),
+ moment()
+ .subtract(1, "day")
+ .endOf("day"),
+ ],
+ },
+ this_week: {
+ name: "This week",
+ value: () => [moment().startOf("week"), moment().endOf("week")],
+ },
+ this_month: {
+ name: "This month",
+ value: () => [moment().startOf("month"), moment().endOf("month")],
+ },
+ this_year: {
+ name: "This year",
+ value: () => [moment().startOf("year"), moment().endOf("year")],
+ },
+ last_week: {
+ name: "Last week",
+ value: () => [
+ moment()
+ .subtract(1, "week")
+ .startOf("week"),
+ moment()
+ .subtract(1, "week")
+ .endOf("week"),
+ ],
+ },
+ last_month: {
+ name: "Last month",
+ value: () => [
+ moment()
+ .subtract(1, "month")
+ .startOf("month"),
+ moment()
+ .subtract(1, "month")
+ .endOf("month"),
+ ],
+ },
+ last_year: {
+ name: "Last year",
+ value: () => [
+ moment()
+ .subtract(1, "year")
+ .startOf("year"),
+ moment()
+ .subtract(1, "year")
+ .endOf("year"),
+ ],
+ },
+ last_hour: {
+ name: "Last hour",
+ value: untilNow(() => moment().subtract(1, "hour")),
+ },
+ last_8_hours: {
+ name: "Last 8 hours",
+ value: untilNow(() => moment().subtract(8, "hour")),
+ },
+ last_24_hours: {
+ name: "Last 24 hours",
+ value: untilNow(() => moment().subtract(24, "hour")),
+ },
+ last_7_days: {
+ name: "Last 7 days",
+ value: untilNow(
+ () =>
+ moment()
+ .subtract(7, "days")
+ .startOf("day"),
+ () => moment().endOf("day")
+ ),
+ },
+ last_14_days: {
+ name: "Last 14 days",
+ value: untilNow(
+ () =>
+ moment()
+ .subtract(14, "days")
+ .startOf("day"),
+ () => moment().endOf("day")
+ ),
+ },
+ last_30_days: {
+ name: "Last 30 days",
+ value: untilNow(
+ () =>
+ moment()
+ .subtract(30, "days")
+ .startOf("day"),
+ () => moment().endOf("day")
+ ),
+ },
+ last_60_days: {
+ name: "Last 60 days",
+ value: untilNow(
+ () =>
+ moment()
+ .subtract(60, "days")
+ .startOf("day"),
+ () => moment().endOf("day")
+ ),
+ },
+ last_90_days: {
+ name: "Last 90 days",
+ value: untilNow(
+ () =>
+ moment()
+ .subtract(90, "days")
+ .startOf("day"),
+ () => moment().endOf("day")
+ ),
+ },
+ last_12_months: {
+ name: "Last 12 months",
+ value: untilNow(
+ () =>
+ moment()
+ .subtract(12, "months")
+ .startOf("day"),
+ () => moment().endOf("day")
+ ),
+ },
+};
+
+export const DynamicDateRangeType = PropTypes.oneOf(values(DYNAMIC_DATE_RANGES));
+
+export function isDynamicDateRangeString(value) {
+ if (!startsWith(value, DYNAMIC_PREFIX)) {
+ return false;
+ }
+ return !!DYNAMIC_DATE_RANGES[value.substring(DYNAMIC_PREFIX.length)];
+}
+
+export function getDynamicDateRangeStringFromName(dynamicRangeName) {
+ const key = findKey(DYNAMIC_DATE_RANGES, range => range.name === dynamicRangeName);
+ return key ? DYNAMIC_PREFIX + key : undefined;
+}
+
+export function isDynamicDateRange(value) {
+ return includes(DYNAMIC_DATE_RANGES, value);
+}
+
+export function getDynamicDateRangeFromString(value) {
+ if (!isDynamicDateRangeString(value)) {
+ return null;
+ }
+ return DYNAMIC_DATE_RANGES[value.substring(DYNAMIC_PREFIX.length)];
+}
+
+class DateRangeParameter extends Parameter {
+ constructor(parameter, parentQueryId) {
+ super(parameter, parentQueryId);
+ this.setValue(parameter.value);
+ }
+
+ get hasDynamicValue() {
+ return isDynamicDateRange(this.normalizedValue);
+ }
+
+ // eslint-disable-next-line class-methods-use-this
+ normalizeValue(value) {
+ if (isDynamicDateRangeString(value)) {
+ return getDynamicDateRangeFromString(value);
+ }
+
+ if (isDynamicDateRange(value)) {
+ return value;
+ }
+
+ if (isObject(value) && !isArray(value)) {
+ value = [value.start, value.end];
+ }
+
+ if (isArray(value) && value.length === 2) {
+ value = [moment(value[0]), moment(value[1])];
+ if (value[0].isValid() && value[1].isValid()) {
+ return value;
+ }
+ }
+ return null;
+ }
+
+ setValue(value) {
+ const normalizedValue = this.normalizeValue(value);
+ if (isDynamicDateRange(normalizedValue)) {
+ this.value = DYNAMIC_PREFIX + findKey(DYNAMIC_DATE_RANGES, normalizedValue);
+ } else if (isArray(normalizedValue)) {
+ this.value = {
+ start: normalizedValue[0].format(DATETIME_FORMATS[this.type]),
+ end: normalizedValue[1].format(DATETIME_FORMATS[this.type]),
+ };
+ } else {
+ this.value = normalizedValue;
+ }
+ this.$$value = normalizedValue;
+
+ this.updateLocals();
+ this.clearPendingValue();
+ return this;
+ }
+
+ getExecutionValue() {
+ if (this.hasDynamicValue) {
+ const format = date => date.format(DATETIME_FORMATS[this.type]);
+ const [start, end] = this.normalizedValue.value().map(format);
+ return { start, end };
+ }
+ return this.value;
+ }
+
+ toUrlParams() {
+ const prefix = this.urlPrefix;
+ if (isObject(this.value) && this.value.start && this.value.end) {
+ return {
+ [`${prefix}${this.name}`]: `${this.value.start}--${this.value.end}`,
+ };
+ }
+ return super.toUrlParams();
+ }
+
+ fromUrlParams(query) {
+ const prefix = this.urlPrefix;
+ const key = `${prefix}${this.name}`;
+
+ // backward compatibility
+ const keyStart = `${prefix}${this.name}.start`;
+ const keyEnd = `${prefix}${this.name}.end`;
+
+ if (has(query, key)) {
+ const dates = query[key].split("--");
+ if (dates.length === 2) {
+ this.setValue(dates);
+ } else {
+ this.setValue(query[key]);
+ }
+ } else if (has(query, keyStart) && has(query, keyEnd)) {
+ this.setValue([query[keyStart], query[keyEnd]]);
+ }
+ }
+
+ toQueryTextFragment() {
+ return `{{ ${this.name}.start }} {{ ${this.name}.end }}`;
+ }
+}
+
+export default DateRangeParameter;
diff --git a/client/app/services/parameters/EnumParameter.js b/client/app/services/parameters/EnumParameter.js
new file mode 100644
index 000000000..7185e2d55
--- /dev/null
+++ b/client/app/services/parameters/EnumParameter.js
@@ -0,0 +1,76 @@
+import { isArray, isEmpty, includes, intersection, get, map, join, has } from "lodash";
+import Parameter from "./Parameter";
+
+class EnumParameter extends Parameter {
+ constructor(parameter, parentQueryId) {
+ super(parameter, parentQueryId);
+ this.enumOptions = parameter.enumOptions;
+ this.multiValuesOptions = parameter.multiValuesOptions;
+ this.setValue(parameter.value);
+ }
+
+ normalizeValue(value) {
+ if (isEmpty(this.enumOptions)) {
+ return null;
+ }
+
+ const enumOptionsArray = this.enumOptions.split("\n") || [];
+ if (this.multiValuesOptions) {
+ if (!isArray(value)) {
+ value = [value];
+ }
+ value = intersection(value, enumOptionsArray);
+ } else if (!value || isArray(value) || !includes(enumOptionsArray, value)) {
+ value = enumOptionsArray[0];
+ }
+
+ if (isArray(value) && isEmpty(value)) {
+ return null;
+ }
+ return value;
+ }
+
+ getExecutionValue(extra = {}) {
+ const { joinListValues } = extra;
+ if (joinListValues && isArray(this.value)) {
+ const separator = get(this.multiValuesOptions, "separator", ",");
+ const prefix = get(this.multiValuesOptions, "prefix", "");
+ const suffix = get(this.multiValuesOptions, "suffix", "");
+ const parameterValues = map(this.value, v => `${prefix}${v}${suffix}`);
+ return join(parameterValues, separator);
+ }
+ return this.value;
+ }
+
+ toUrlParams() {
+ const prefix = this.urlPrefix;
+
+ let urlParam = this.value;
+ if (this.multiValuesOptions && isArray(this.value)) {
+ urlParam = JSON.stringify(this.value);
+ }
+
+ return {
+ [`${prefix}${this.name}`]: !this.isEmpty ? urlParam : null,
+ };
+ }
+
+ fromUrlParams(query) {
+ const prefix = this.urlPrefix;
+ const key = `${prefix}${this.name}`;
+ if (has(query, key)) {
+ if (this.multiValuesOptions) {
+ try {
+ const valueFromJson = JSON.parse(query[key]);
+ this.setValue(isArray(valueFromJson) ? valueFromJson : query[key]);
+ } catch (e) {
+ this.setValue(query[key]);
+ }
+ } else {
+ this.setValue(query[key]);
+ }
+ }
+ }
+}
+
+export default EnumParameter;
diff --git a/client/app/services/parameters/NumberParameter.js b/client/app/services/parameters/NumberParameter.js
new file mode 100644
index 000000000..cc5a3a6f0
--- /dev/null
+++ b/client/app/services/parameters/NumberParameter.js
@@ -0,0 +1,20 @@
+import { toNumber, isNull } from "lodash";
+import Parameter from "./Parameter";
+
+class NumberParameter extends Parameter {
+ constructor(parameter, parentQueryId) {
+ super(parameter, parentQueryId);
+ this.setValue(parameter.value);
+ }
+
+ // eslint-disable-next-line class-methods-use-this
+ normalizeValue(value) {
+ if (isNull(value)) {
+ return null;
+ }
+ const normalizedValue = toNumber(value);
+ return !isNaN(normalizedValue) ? normalizedValue : null;
+ }
+}
+
+export default NumberParameter;
diff --git a/client/app/services/parameters/Parameter.js b/client/app/services/parameters/Parameter.js
new file mode 100644
index 000000000..03bc698a2
--- /dev/null
+++ b/client/app/services/parameters/Parameter.js
@@ -0,0 +1,124 @@
+import { isNull, isObject, isFunction, isUndefined, isEqual, has, omit, isArray, each } from "lodash";
+
+class Parameter {
+ constructor(parameter, parentQueryId) {
+ this.title = parameter.title;
+ this.name = parameter.name;
+ this.type = parameter.type;
+ this.global = parameter.global; // backward compatibility in Widget service
+ this.parentQueryId = parentQueryId;
+
+ // Used for meta-parameters (i.e. dashboard-level params)
+ this.locals = [];
+
+ // Used for URL serialization
+ this.urlPrefix = "p_";
+ }
+
+ static getExecutionValue(param, extra = {}) {
+ if (!isObject(param) || !isFunction(param.getExecutionValue)) {
+ return null;
+ }
+
+ return param.getExecutionValue(extra);
+ }
+
+ static setValue(param, value) {
+ if (!isObject(param) || !isFunction(param.setValue)) {
+ return null;
+ }
+
+ return param.setValue(value);
+ }
+
+ get isEmpty() {
+ return isNull(this.normalizedValue);
+ }
+
+ get hasPendingValue() {
+ return this.pendingValue !== undefined && !isEqual(this.pendingValue, this.normalizedValue);
+ }
+
+ /** Get normalized value to be used in inputs */
+ get normalizedValue() {
+ return this.$$value;
+ }
+
+ isEmptyValue(value) {
+ return isNull(this.normalizeValue(value));
+ }
+
+ // eslint-disable-next-line class-methods-use-this
+ normalizeValue(value) {
+ if (isUndefined(value)) {
+ return null;
+ }
+ return value;
+ }
+
+ updateLocals() {
+ if (isArray(this.locals)) {
+ each(this.locals, local => {
+ local.setValue(this.value);
+ });
+ }
+ }
+
+ setValue(value) {
+ const normalizedValue = this.normalizeValue(value);
+ this.value = normalizedValue;
+ this.$$value = normalizedValue;
+
+ this.updateLocals();
+ this.clearPendingValue();
+ return this;
+ }
+
+ /** Get execution value for a query */
+ getExecutionValue() {
+ return this.value;
+ }
+
+ setPendingValue(value) {
+ this.pendingValue = this.normalizeValue(value);
+ }
+
+ applyPendingValue() {
+ if (this.hasPendingValue) {
+ this.setValue(this.pendingValue);
+ }
+ }
+
+ clearPendingValue() {
+ this.pendingValue = undefined;
+ }
+
+ /** Update URL with Parameter value */
+ toUrlParams() {
+ const prefix = this.urlPrefix;
+ // `null` removes the parameter from the URL in case it exists
+ return {
+ [`${prefix}${this.name}`]: !this.isEmpty ? this.value : null,
+ };
+ }
+
+ /** Set parameter value from the URL */
+ fromUrlParams(query) {
+ const prefix = this.urlPrefix;
+ const key = `${prefix}${this.name}`;
+ if (has(query, key)) {
+ this.setValue(query[key]);
+ }
+ }
+
+ toQueryTextFragment() {
+ return `{{ ${this.name} }}`;
+ }
+
+ /** Get a saveable version of the Parameter by omitting unnecessary props */
+ toSaveableObject() {
+ return omit(this, ["$$value", "urlPrefix", "pendingValue", "parentQueryId"]);
+ }
+}
+
+export default Parameter;
diff --git a/client/app/services/parameters/QueryBasedDropdownParameter.js b/client/app/services/parameters/QueryBasedDropdownParameter.js
new file mode 100644
index 000000000..0ab7ff700
--- /dev/null
+++ b/client/app/services/parameters/QueryBasedDropdownParameter.js
@@ -0,0 +1,79 @@
+import { isNull, isUndefined, isArray, isEmpty, get, map, join, has } from "lodash";
+import { Query } from "@/services/query";
+import Parameter from "./Parameter";
+
+class QueryBasedDropdownParameter extends Parameter {
+ constructor(parameter, parentQueryId) {
+ super(parameter, parentQueryId);
+ this.queryId = parameter.queryId;
+ this.multiValuesOptions = parameter.multiValuesOptions;
+ this.setValue(parameter.value);
+ }
+
+ normalizeValue(value) {
+ if (isUndefined(value) || isNull(value) || (isArray(value) && isEmpty(value))) {
+ return null;
+ }
+
+ if (this.multiValuesOptions) {
+ value = isArray(value) ? value : [value];
+ } else {
+ value = isArray(value) ? value[0] : value;
+ }
+ return value;
+ }
+
+ getExecutionValue(extra = {}) {
+ const { joinListValues } = extra;
+ if (joinListValues && isArray(this.value)) {
+ const separator = get(this.multiValuesOptions, "separator", ",");
+ const prefix = get(this.multiValuesOptions, "prefix", "");
+ const suffix = get(this.multiValuesOptions, "suffix", "");
+ const parameterValues = map(this.value, v => `${prefix}${v}${suffix}`);
+ return join(parameterValues, separator);
+ }
+ return this.value;
+ }
+
+ toUrlParams() {
+ const prefix = this.urlPrefix;
+
+ let urlParam = this.value;
+ if (this.multiValuesOptions && isArray(this.value)) {
+ urlParam = JSON.stringify(this.value);
+ }
+
+ return {
+ [`${prefix}${this.name}`]: !this.isEmpty ? urlParam : null,
+ };
+ }
+
+ fromUrlParams(query) {
+ const prefix = this.urlPrefix;
+ const key = `${prefix}${this.name}`;
+ if (has(query, key)) {
+ if (this.multiValuesOptions) {
+ try {
+ const valueFromJson = JSON.parse(query[key]);
+ this.setValue(isArray(valueFromJson) ? valueFromJson : query[key]);
+ } catch (e) {
+ this.setValue(query[key]);
+ }
+ } else {
+ this.setValue(query[key]);
+ }
+ }
+ }
+
+ loadDropdownValues() {
+ if (this.parentQueryId) {
+ return Query.associatedDropdown({ queryId: this.parentQueryId, dropdownQueryId: this.queryId }).catch(() =>
+ Promise.resolve([])
+ );
+ }
+
+ return Query.asDropdown({ id: this.queryId }).catch(Promise.resolve([]));
+ }
+}
+
+export default QueryBasedDropdownParameter;
diff --git a/client/app/services/parameters/TextParameter.js b/client/app/services/parameters/TextParameter.js
new file mode 100644
index 000000000..67ffe97a6
--- /dev/null
+++ b/client/app/services/parameters/TextParameter.js
@@ -0,0 +1,20 @@
+import { toString, isEmpty } from "lodash";
+import Parameter from "./Parameter";
+
+class TextParameter extends Parameter {
+ constructor(parameter, parentQueryId) {
+ super(parameter, parentQueryId);
+ this.setValue(parameter.value);
+ }
+
+ // eslint-disable-next-line class-methods-use-this
+ normalizeValue(value) {
+ const normalizedValue = toString(value);
+ if (isEmpty(normalizedValue)) {
+ return null;
+ }
+ return normalizedValue;
+ }
+}
+
+export default TextParameter;
diff --git a/client/app/services/parameters/index.js b/client/app/services/parameters/index.js
new file mode 100644
index 000000000..9e1b3fffc
--- /dev/null
+++ b/client/app/services/parameters/index.js
@@ -0,0 +1,44 @@
+import Parameter from "./Parameter";
+import TextParameter from "./TextParameter";
+import NumberParameter from "./NumberParameter";
+import EnumParameter from "./EnumParameter";
+import QueryBasedDropdownParameter from "./QueryBasedDropdownParameter";
+import DateParameter from "./DateParameter";
+import DateRangeParameter from "./DateRangeParameter";
+
+function createParameter(param, parentQueryId) {
+ switch (param.type) {
+ case "number":
+ return new NumberParameter(param, parentQueryId);
+ case "enum":
+ return new EnumParameter(param, parentQueryId);
+ case "query":
+ return new QueryBasedDropdownParameter(param, parentQueryId);
+ case "date":
+ case "datetime-local":
+ case "datetime-with-seconds":
+ return new DateParameter(param, parentQueryId);
+ case "date-range":
+ case "datetime-range":
+ case "datetime-range-with-seconds":
+ return new DateRangeParameter(param, parentQueryId);
+ default:
+ return new TextParameter({ ...param, type: "text" }, parentQueryId);
+ }
+}
+
+function cloneParameter(param) {
+ return createParameter(param, param.parentQueryId);
+}
+
+export {
+ Parameter,
+ TextParameter,
+ NumberParameter,
+ EnumParameter,
+ QueryBasedDropdownParameter,
+ DateParameter,
+ DateRangeParameter,
+ createParameter,
+ cloneParameter,
+};
diff --git a/client/app/services/parameters/tests/DateParameter.test.js b/client/app/services/parameters/tests/DateParameter.test.js
new file mode 100644
index 000000000..68d03f47e
--- /dev/null
+++ b/client/app/services/parameters/tests/DateParameter.test.js
@@ -0,0 +1,79 @@
+import { createParameter } from "..";
+import { getDynamicDateFromString } from "../DateParameter";
+import moment from "moment";
+
+describe("DateParameter", () => {
+ let type = "date";
+ let param;
+
+ beforeEach(() => {
+ param = createParameter({ name: "param", title: "Param", type });
+ });
+
+ describe("getExecutionValue", () => {
+ beforeEach(() => {
+ param.setValue(moment("2019-10-06 10:00:00"));
+ });
+
+ test("formats value as a string date", () => {
+ const executionValue = param.getExecutionValue();
+ expect(executionValue).toBe("2019-10-06");
+ });
+
+ describe("type is datetime-local", () => {
+ beforeAll(() => {
+ type = "datetime-local";
+ });
+
+ test("formats value as a string datetime", () => {
+ const executionValue = param.getExecutionValue();
+ expect(executionValue).toBe("2019-10-06 10:00");
+ });
+ });
+
+ describe("type is datetime-with-seconds", () => {
+ beforeAll(() => {
+ type = "datetime-with-seconds";
+ });
+
+ test("formats value as a string datetime with seconds", () => {
+ const executionValue = param.getExecutionValue();
+ expect(executionValue).toBe("2019-10-06 10:00:00");
+ });
+ });
+ });
+
+ describe("normalizeValue", () => {
+ test("recognizes dates from strings", () => {
+ const normalizedValue = param.normalizeValue("2019-10-06");
+ expect(moment.isMoment(normalizedValue)).toBeTruthy();
+ expect(normalizedValue.format("YYYY-MM-DD")).toBe("2019-10-06");
+ });
+
+ test("recognizes dates from moment values", () => {
+ const normalizedValue = param.normalizeValue(moment("2019-10-06"));
+ expect(moment.isMoment(normalizedValue)).toBeTruthy();
+ expect(normalizedValue.format("YYYY-MM-DD")).toBe("2019-10-06");
+ });
+
+ test("normalizes unrecognized values as null", () => {
+ const normalizedValue = param.normalizeValue("value");
+ expect(normalizedValue).toBeNull();
+ });
+
+ describe("Dynamic values", () => {
+ test("recognizes dynamic values from string index", () => {
+ const normalizedValue = param.normalizeValue("d_now");
+ expect(normalizedValue).not.toBeNull();
+ expect(normalizedValue).toEqual(getDynamicDateFromString("d_now"));
+ });
+
+ test("recognizes dynamic values from a dynamic date", () => {
+ const dynamicDate = getDynamicDateFromString("d_now");
+ const normalizedValue = param.normalizeValue(dynamicDate);
+ expect(normalizedValue).not.toBeNull();
+ expect(normalizedValue).toEqual(dynamicDate);
+ });
+ });
+ });
+});
diff --git a/client/app/services/parameters/tests/DateRangeParameter.test.js b/client/app/services/parameters/tests/DateRangeParameter.test.js
new file mode 100644
index 000000000..c8dde1017
--- /dev/null
+++ b/client/app/services/parameters/tests/DateRangeParameter.test.js
@@ -0,0 +1,76 @@
+import { createParameter } from "..";
+import { getDynamicDateRangeFromString } from "../DateRangeParameter";
+import moment from "moment";
+
+describe("DateRangeParameter", () => {
+ let type = "date-range";
+ let param;
+
+ beforeEach(() => {
+ param = createParameter({ name: "param", title: "Param", type });
+ });
+
+ describe("getExecutionValue", () => {
+ beforeEach(() => {
+ param.setValue({ start: "2019-10-05 10:00:00", end: "2019-10-06 09:59:59" });
+ });
+
+ test("formats value as a string date", () => {
+ const executionValue = param.getExecutionValue();
+ expect(executionValue).toEqual({ start: "2019-10-05", end: "2019-10-06" });
+ });
+
+ describe("type is datetime-range", () => {
+ beforeAll(() => {
+ type = "datetime-range";
+ });
+
+ test("formats value as a string datetime", () => {
+ const executionValue = param.getExecutionValue();
+ expect(executionValue).toEqual({ start: "2019-10-05 10:00", end: "2019-10-06 09:59" });
+ });
+ });
+
+ describe("type is datetime-range-with-seconds", () => {
+ beforeAll(() => {
+ type = "datetime-range-with-seconds";
+ });
+
+ test("formats value as a string datetime with seconds", () => {
+ const executionValue = param.getExecutionValue();
+ expect(executionValue).toEqual({ start: "2019-10-05 10:00:00", end: "2019-10-06 09:59:59" });
+ });
+ });
+ });
+
+ describe("normalizeValue", () => {
+ test("recognizes dates from moment arrays", () => {
+ const normalizedValue = param.normalizeValue([moment("2019-10-05"), moment("2019-10-06")]);
+ expect(normalizedValue).toHaveLength(2);
+ expect(normalizedValue[0].format("YYYY-MM-DD")).toBe("2019-10-05");
+ expect(normalizedValue[1].format("YYYY-MM-DD")).toBe("2019-10-06");
+ });
+
+ test("recognizes dates from object", () => {
+ const normalizedValue = param.normalizeValue({ start: "2019-10-05", end: "2019-10-06" });
+ expect(normalizedValue).toHaveLength(2);
+ expect(normalizedValue[0].format("YYYY-MM-DD")).toBe("2019-10-05");
+ expect(normalizedValue[1].format("YYYY-MM-DD")).toBe("2019-10-06");
+ });
+
+ describe("Dynamic values", () => {
+ test("recognizes dynamic values from string index", () => {
+ const normalizedValue = param.normalizeValue("d_last_week");
+ expect(normalizedValue).not.toBeNull();
+ expect(normalizedValue).toEqual(getDynamicDateRangeFromString("d_last_week"));
+ });
+
+ test("recognizes dynamic values from a dynamic date range", () => {
+ const dynamicDateRange = getDynamicDateRangeFromString("d_last_week");
+ const normalizedValue = param.normalizeValue(dynamicDateRange);
+ expect(normalizedValue).not.toBeNull();
+ expect(normalizedValue).toEqual(dynamicDateRange);
+ });
+ });
+ });
+});
diff --git a/client/app/services/parameters/tests/EnumParameter.test.js b/client/app/services/parameters/tests/EnumParameter.test.js
new file mode 100644
index 000000000..d4d0555a8
--- /dev/null
+++ b/client/app/services/parameters/tests/EnumParameter.test.js
@@ -0,0 +1,56 @@
+import { createParameter } from "..";
+
+describe("EnumParameter", () => {
+ let param;
+ let multiValuesOptions = null;
+ const enumOptions = "value1\nvalue2\nvalue3\nvalue4";
+
+ beforeEach(() => {
+ const paramOptions = {
+ name: "param",
+ title: "Param",
+ type: "enum",
+ enumOptions,
+ multiValuesOptions,
+ };
+ param = createParameter(paramOptions);
+ });
+
+ describe("normalizeValue", () => {
+ test("returns the value when the input in the enum options", () => {
+ const normalizedValue = param.normalizeValue("value2");
+ expect(normalizedValue).toBe("value2");
+ });
+
+ test("returns the first value when the input is not in the enum options", () => {
+ const normalizedValue = param.normalizeValue("anything");
+ expect(normalizedValue).toBe("value1");
+ });
+ });
+
+ describe("Multi-valued", () => {
+ beforeAll(() => {
+ multiValuesOptions = { prefix: '"', suffix: '"', separator: "," };
+ });
+
+ describe("normalizeValue", () => {
+ test("returns only valid values", () => {
+ const normalizedValue = param.normalizeValue(["value3", "anything", null]);
+ expect(normalizedValue).toEqual(["value3"]);
+ });
+
+ test("normalizes empty values as null", () => {
+ const normalizedValue = param.normalizeValue([]);
+ expect(normalizedValue).toBeNull();
+ });
+ });
+
+ describe("getExecutionValue", () => {
+ test("joins values when joinListValues is truthy", () => {
+ param.setValue(["value1", "value3"]);
+ const executionValue = param.getExecutionValue({ joinListValues: true });
+ expect(executionValue).toBe('"value1","value3"');
+ });
+ });
+ });
+});
diff --git a/client/app/services/parameters/tests/NumberParameter.test.js b/client/app/services/parameters/tests/NumberParameter.test.js
new file mode 100644
index 000000000..bfb27c327
--- /dev/null
+++ b/client/app/services/parameters/tests/NumberParameter.test.js
@@ -0,0 +1,26 @@
+import { createParameter } from "..";
+
+describe("NumberParameter", () => {
+ let param;
+
+ beforeEach(() => {
+ param = createParameter({ name: "param", title: "Param", type: "number" });
+ });
+
+ describe("normalizeValue", () => {
+ test("converts Strings", () => {
+ const normalizedValue = param.normalizeValue("15");
+ expect(normalizedValue).toBe(15);
+ });
+
+ test("converts Numbers", () => {
+ const normalizedValue = param.normalizeValue(42);
+ expect(normalizedValue).toBe(42);
+ });
+
+ test("returns null when not possible to convert to number", () => {
+ const normalizedValue = param.normalizeValue("notanumber");
+ expect(normalizedValue).toBeNull();
+ });
+ });
+});
diff --git a/client/app/services/parameters/tests/Parameter.test.js b/client/app/services/parameters/tests/Parameter.test.js
new file mode 100644
index 000000000..3ec7ad7b1
--- /dev/null
+++ b/client/app/services/parameters/tests/Parameter.test.js
@@ -0,0 +1,32 @@
+import {
+ createParameter,
+ TextParameter,
+ NumberParameter,
+ EnumParameter,
+ QueryBasedDropdownParameter,
+ DateParameter,
+ DateRangeParameter,
+} from "..";
+
+describe("Parameter", () => {
+ describe("create", () => {
+ const parameterTypes = [
+ ["text", TextParameter],
+ ["number", NumberParameter],
+ ["enum", EnumParameter],
+ ["query", QueryBasedDropdownParameter],
+ ["date", DateParameter],
+ ["datetime-local", DateParameter],
+ ["datetime-with-seconds", DateParameter],
+ ["date-range", DateRangeParameter],
+ ["datetime-range", DateRangeParameter],
+ ["datetime-range-with-seconds", DateRangeParameter],
+ [null, TextParameter],
+ ];
+
+ test.each(parameterTypes)("when type is '%s' creates a %p", (type, expectedClass) => {
+ const parameter = createParameter({ name: "param", title: "Param", type });
+ expect(parameter).toBeInstanceOf(expectedClass);
+ });
+ });
+});
diff --git a/client/app/services/parameters/tests/QueryBasedDropdownParameter.test.js b/client/app/services/parameters/tests/QueryBasedDropdownParameter.test.js
new file mode 100644
index 000000000..59f7e8972
--- /dev/null
+++ b/client/app/services/parameters/tests/QueryBasedDropdownParameter.test.js
@@ -0,0 +1,54 @@
+import { createParameter } from "..";
+
+describe("QueryBasedDropdownParameter", () => {
+ let param;
+ let multiValuesOptions = null;
+
+ beforeEach(() => {
+ const paramOptions = {
+ name: "param",
+ title: "Param",
+ type: "query",
+ queryId: 1,
+ multiValuesOptions,
+ };
+ param = createParameter(paramOptions);
+ });
+
+ describe("normalizeValue", () => {
+ test("returns the value when the input in the enum options", () => {
+ const normalizedValue = param.normalizeValue("value2");
+ expect(normalizedValue).toBe("value2");
+ });
+
+ describe("Empty values", () => {
+ const emptyValues = [null, undefined, []];
+
+ test.each(emptyValues)("normalizes empty value '%s' as null", emptyValue => {
+ const normalizedValue = param.normalizeValue(emptyValue);
+ expect(normalizedValue).toBeNull();
+ });
+ });
+ });
+
+ describe("Multi-valued", () => {
+ beforeAll(() => {
+ multiValuesOptions = { prefix: '"', suffix: '"', separator: "," };
+ });
+
+ describe("normalizeValue", () => {
+ test("returns an array with the input when input is not an array", () => {
+ const normalizedValue = param.normalizeValue("value");
+ expect(normalizedValue).toEqual(["value"]);
+ });
+ });
+
+ describe("getExecutionValue", () => {
+ test("joins values when joinListValues is truthy", () => {
+ param.setValue(["value1", "value3"]);
+ const executionValue = param.getExecutionValue({ joinListValues: true });
+ expect(executionValue).toBe('"value1","value3"');
+ });
+ });
+ });
+});
diff --git a/client/app/services/parameters/tests/TextParameter.test.js b/client/app/services/parameters/tests/TextParameter.test.js
new file mode 100644
index 000000000..830912ea5
--- /dev/null
+++ b/client/app/services/parameters/tests/TextParameter.test.js
@@ -0,0 +1,30 @@
+import { createParameter } from "..";
+
+describe("TextParameter", () => {
+ let param;
+
+ beforeEach(() => {
+ param = createParameter({ name: "param", title: "Param", type: "text" });
+ });
+
+ describe("normalizeValue", () => {
+ test("converts Strings", () => {
+ const normalizedValue = param.normalizeValue("exampleString");
+ expect(normalizedValue).toBe("exampleString");
+ });
+
+ test("converts Numbers", () => {
+ const normalizedValue = param.normalizeValue(3);
+ expect(normalizedValue).toBe("3");
+ });
+
+ describe("Empty values", () => {
+ const emptyValues = [null, undefined, ""];
+
+ test.each(emptyValues)("normalizes empty value '%s' as null", emptyValue => {
+ const normalizedValue = param.normalizeValue(emptyValue);
+ expect(normalizedValue).toBeNull();
+ });
+ });
+ });
+});
diff --git a/client/app/services/policy/DefaultPolicy.js b/client/app/services/policy/DefaultPolicy.js
new file mode 100644
index 000000000..368be23f7
--- /dev/null
+++ b/client/app/services/policy/DefaultPolicy.js
@@ -0,0 +1,68 @@
+import { get, isArray } from "lodash";
+import { currentUser, clientConfig } from "@/services/auth";
+
+/* eslint-disable class-methods-use-this */
+
+export default class DefaultPolicy {
+ refresh() {
+ return Promise.resolve(this);
+ }
+
+ canCreateDataSource() {
+ return currentUser.isAdmin;
+ }
+
+ isCreateDataSourceEnabled() {
+ return currentUser.isAdmin;
+ }
+
+ canCreateDestination() {
+ return currentUser.isAdmin;
+ }
+
+ isCreateDestinationEnabled() {
+ return currentUser.isAdmin;
+ }
+
+ canCreateDashboard() {
+ return currentUser.hasPermission("create_dashboard");
+ }
+
+ isCreateDashboardEnabled() {
+ return currentUser.hasPermission("create_dashboard");
+ }
+
+ canCreateAlert() {
+ return true;
+ }
+
+ canCreateUser() {
+ return currentUser.isAdmin;
+ }
+
+ isCreateUserEnabled() {
+ return currentUser.isAdmin;
+ }
+
+ isCreateQuerySnippetEnabled() {
+ return true;
+ }
+
+ getDashboardRefreshIntervals() {
+ const result = clientConfig.dashboardRefreshIntervals;
+ return isArray(result) ? result : null;
+ }
+
+ getQueryRefreshIntervals() {
+ const result = clientConfig.queryRefreshIntervals;
+ return isArray(result) ? result : null;
+ }
+
+ canEdit(object) {
+ return get(object, "can_edit", false);
+ }
+
+ canRun() {
+ return true;
+ }
+}
diff --git a/client/app/services/policy/index.js b/client/app/services/policy/index.js
new file mode 100644
index 000000000..b468aa71f
--- /dev/null
+++ b/client/app/services/policy/index.js
@@ -0,0 +1,8 @@
+import DefaultPolicy from "./DefaultPolicy";
+
+// eslint-disable-next-line import/no-mutable-exports
+export let policy = new DefaultPolicy();
+
+export function setPolicy(newPolicy) {
+ policy = newPolicy;
+}
diff --git a/client/app/services/query-result.js b/client/app/services/query-result.js
new file mode 100644
index 000000000..b41f1e214
--- /dev/null
+++ b/client/app/services/query-result.js
@@ -0,0 +1,495 @@
+import debug from "debug";
+import moment from "moment";
+import { axios } from "@/services/axios";
+import { QueryResultError } from "@/services/query";
+import { Auth } from "@/services/auth";
+import { isString, uniqBy, each, isNumber, includes, extend, forOwn, get } from "lodash";
+
+const logger = debug("redash:services:QueryResult");
+const filterTypes = ["filter", "multi-filter", "multiFilter"];
+
+function defer() {
+ const result = { onStatusChange: status => {} };
+ result.promise = new Promise((resolve, reject) => {
+ result.resolve = resolve;
+ result.reject = reject;
+ });
+ return result;
+}
+
+function getColumnNameWithoutType(column) {
+ let typeSplit;
+ if (column.indexOf("::") !== -1) {
+ typeSplit = "::";
+ } else if (column.indexOf("__") !== -1) {
+ typeSplit = "__";
+ } else {
+ return column;
+ }
+
+ const parts = column.split(typeSplit);
+ if (parts[0] === "" && parts.length === 2) {
+ return parts[1];
+ }
+
+ if (!includes(filterTypes, parts[1])) {
+ return column;
+ }
+
+ return parts[0];
+}
+
+function getColumnFriendlyName(column) {
+ return getColumnNameWithoutType(column).replace(/(?:^|\s)\S/g, a => a.toUpperCase());
+}
+
+const createOrSaveUrl = data => (data.id ? `api/query_results/${data.id}` : "api/query_results");
+const QueryResultResource = {
+ get: ({ id }) => axios.get(`api/query_results/${id}`),
+ post: data => axios.post(createOrSaveUrl(data), data),
+};
+
+export const ExecutionStatus = {
+ WAITING: "waiting",
+ PROCESSING: "processing",
+ DONE: "done",
+ FAILED: "failed",
+ LOADING_RESULT: "loading-result",
+};
+
+const statuses = {
+ 1: ExecutionStatus.WAITING,
+ 2: ExecutionStatus.PROCESSING,
+ 3: ExecutionStatus.DONE,
+ 4: ExecutionStatus.FAILED,
+};
+
+function handleErrorResponse(queryResult, error) {
+ const status = get(error, "response.status");
+ switch (status) {
+ case 403:
+ queryResult.update(error.response.data);
+ return;
+ case 400:
+ if ("job" in error.response.data) {
+ queryResult.update(error.response.data);
+ return;
+ }
+ break;
+ case 404:
+ queryResult.update({
+ job: {
+ error: "cached query result unavailable, please execute again.",
+ status: 4,
+ },
+ });
+ return;
+ // no default
+ }
+
+ logger("Unknown error", error);
+ queryResult.update({
+ job: {
+ error: get(error, "response.data.message", "Unknown error occurred. Please try again later."),
+ status: 4,
+ },
+ });
+}
+
+function sleep(ms) {
+ return new Promise(resolve => setTimeout(resolve, ms));
+}
+
+export function fetchDataFromJob(jobId, interval = 1000) {
+ return axios.get(`api/jobs/${jobId}`).then(data => {
+ const status = statuses[data.job.status];
+ if (status === ExecutionStatus.WAITING || status === ExecutionStatus.PROCESSING) {
+ return sleep(interval).then(() => fetchDataFromJob(data.job.id));
+ } else if (status === ExecutionStatus.DONE) {
+ return data.job.result;
+ } else if (status === ExecutionStatus.FAILED) {
+ return Promise.reject(data.job.error);
+ }
+ });
+}
+
+class QueryResult {
+ constructor(props) {
+ this.deferred = defer();
+ this.job = {};
+ this.query_result = {};
+ this.status = "waiting";
+
+ this.updatedAt = moment();
+
+ // extended status flags
+ this.isLoadingResult = false;
+
+ if (props) {
+ this.update(props);
+ }
+ }
+
+ update(props) {
+ extend(this, props);
+
+ if ("query_result" in props) {
+ this.status = ExecutionStatus.DONE;
+ this.deferred.onStatusChange(ExecutionStatus.DONE);
+
+ const columnTypes = {};
+
+ // TODO: we should stop manipulating incoming data, and switch to relaying
+ // on the column type set by the backend. This logic is prone to errors,
+ // and better be removed. Kept for now, for backward compatability.
+ each(this.query_result.data.rows, row => {
+ forOwn(row, (v, k) => {
+ let newType = null;
+ if (isNumber(v)) {
+ newType = "float";
+ } else if (isString(v) && v.match(/^\d{4}-\d{2}-\d{2}T/)) {
+ row[k] = moment.utc(v);
+ newType = "datetime";
+ } else if (isString(v) && v.match(/^\d{4}-\d{2}-\d{2}$/)) {
+ row[k] = moment.utc(v);
+ newType = "date";
+ } else if (typeof v === "object" && v !== null) {
+ row[k] = JSON.stringify(v);
+ } else {
+ newType = "string";
+ }
+
+ if (newType !== null) {
+ if (columnTypes[k] !== undefined && columnTypes[k] !== newType) {
+ columnTypes[k] = "string";
+ } else {
+ columnTypes[k] = newType;
+ }
+ }
+ });
+ });
+
+ each(this.query_result.data.columns, column => {
+ column.name = "" + column.name;
+ if (columnTypes[column.name]) {
+ if (column.type == null || column.type === "string") {
+ column.type = columnTypes[column.name];
+ }
+ }
+ });
+
+ this.deferred.resolve(this);
+ } else if (this.job.status === 3 || this.job.status === 2) {
+ this.deferred.onStatusChange(ExecutionStatus.PROCESSING);
+ this.status = "processing";
+ } else if (this.job.status === 4) {
+ this.status = statuses[this.job.status];
+ this.deferred.reject(new QueryResultError(this.job.error));
+ } else {
+ this.deferred.onStatusChange(undefined);
+ this.status = undefined;
+ }
+ }
+
+ getId() {
+ let id = null;
+ if ("query_result" in this) {
+ id = this.query_result.id;
+ }
+ return id;
+ }
+
+ cancelExecution() {
+ axios.delete(`api/jobs/${this.job.id}`);
+ }
+
+ getStatus() {
+ if (this.isLoadingResult) {
+ return ExecutionStatus.LOADING_RESULT;
+ }
+ return this.status || statuses[this.job.status];
+ }
+
+ getError() {
+ // TODO: move this logic to the server...
+ if (this.job.error === "None") {
+ return undefined;
+ }
+
+ return this.job.error;
+ }
+
+ getLog() {
+ if (!this.query_result.data || !this.query_result.data.log || this.query_result.data.log.length === 0) {
+ return null;
+ }
+
+ return this.query_result.data.log;
+ }
+
+ getUpdatedAt() {
+ return this.query_result.retrieved_at || this.job.updated_at * 1000.0 || this.updatedAt;
+ }
+
+ getRuntime() {
+ return this.query_result.runtime;
+ }
+
+ getRawData() {
+ if (!this.query_result.data) {
+ return null;
+ }
+
+ return this.query_result.data.rows;
+ }
+
+ getData() {
+ return this.query_result.data ? this.query_result.data.rows : null;
+ }
+
+ isEmpty() {
+ return this.getData() === null || this.getData().length === 0;
+ }
+
+ getColumns() {
+ if (this.columns === undefined && this.query_result.data) {
+ this.columns = this.query_result.data.columns;
+ }
+
+ return this.columns;
+ }
+
+ getColumnNames() {
+ if (this.columnNames === undefined && this.query_result.data) {
+ this.columnNames = this.query_result.data.columns.map(v => v.name);
+ }
+
+ return this.columnNames;
+ }
+
+ getColumnFriendlyNames() {
+ return this.getColumnNames().map(col => getColumnFriendlyName(col));
+ }
+
+ getTruncated() {
+ return this.query_result.data ? this.query_result.data.truncated : null;
+ }
+
+ getFilters() {
+ if (!this.getColumns()) {
+ return [];
+ }
+
+ const filters = [];
+
+ this.getColumns().forEach(col => {
+ const name = col.name;
+ const type = name.split("::")[1] || name.split("__")[1];
+ if (includes(filterTypes, type)) {
+ // filter found
+ const filter = {
+ name,
+ friendlyName: getColumnFriendlyName(name),
+ column: col,
+ values: [],
+ multiple: type === "multiFilter" || type === "multi-filter",
+ };
+ filters.push(filter);
+ }
+ }, this);
+
+ this.getRawData().forEach(row => {
+ filters.forEach(filter => {
+ filter.values.push(row[filter.name]);
+ if (filter.values.length === 1) {
+ if (filter.multiple) {
+ filter.current = [row[filter.name]];
+ } else {
+ filter.current = row[filter.name];
+ }
+ }
+ });
+ });
+
+ filters.forEach(filter => {
+ filter.values = uniqBy(filter.values, v => {
+ if (moment.isMoment(v)) {
+ return v.unix();
+ }
+ return v;
+ });
+ if (filter.values.length > 1 && filter.multiple) {
+ filter.current = filter.values.slice();
+ }
+ });
+
+ return filters;
+ }
+
+ toPromise(statusCallback) {
+ if (statusCallback) {
+ this.deferred.onStatusChange = statusCallback;
+ }
+ return this.deferred.promise;
+ }
+
+ static getById(queryId, id) {
+ const queryResult = new QueryResult();
+
+ queryResult.isLoadingResult = true;
+ queryResult.deferred.onStatusChange(ExecutionStatus.LOADING_RESULT);
+
+ axios
+ .get(`api/queries/${queryId}/results/${id}.json`)
+ .then(response => {
+ // Success handler
+ queryResult.isLoadingResult = false;
+ queryResult.update(response);
+ })
+ .catch(error => {
+ // Error handler
+ queryResult.isLoadingResult = false;
+ handleErrorResponse(queryResult, error);
+ });
+
+ return queryResult;
+ }
+
+ loadLatestCachedResult(queryId, parameters) {
+ axios
+ .post(`api/queries/${queryId}/results`, { queryId, parameters })
+ .then(response => {
+ this.update(response);
+ })
+ .catch(error => {
+ handleErrorResponse(this, error);
+ });
+ }
+
+ loadResult(tryCount) {
+ this.isLoadingResult = true;
+ this.deferred.onStatusChange(ExecutionStatus.LOADING_RESULT);
+
+ QueryResultResource.get({ id: this.job.query_result_id })
+ .then(response => {
+ this.update(response);
+ this.isLoadingResult = false;
+ })
+ .catch(error => {
+ if (tryCount === undefined) {
+ tryCount = 0;
+ }
+
+ if (tryCount > 3) {
+ logger("Connection error while trying to load result", error);
+ this.update({
+ job: {
+ error: "failed communicating with server. Please check your Internet connection and try again.",
+ status: 4,
+ },
+ });
+ this.isLoadingResult = false;
+ } else {
+ setTimeout(() => {
+ this.loadResult(tryCount + 1);
+ }, 1000 * Math.pow(2, tryCount));
+ }
+ });
+ }
+
+ refreshStatus(query, parameters, tryNumber = 1) {
+ const loadResult = () =>
+ Auth.isAuthenticated() ? this.loadResult() : this.loadLatestCachedResult(query, parameters);
+
+ const request = Auth.isAuthenticated()
+ ? axios.get(`api/jobs/${this.job.id}`)
+ : axios.get(`api/queries/${query}/jobs/${this.job.id}`);
+
+ request
+ .then(jobResponse => {
+ this.update(jobResponse);
+
+ if (this.getStatus() === "processing" && this.job.query_result_id && this.job.query_result_id !== "None") {
+ loadResult();
+ } else if (this.getStatus() !== "failed") {
+ const waitTime = tryNumber > 10 ? 3000 : 500;
+ setTimeout(() => {
+ this.refreshStatus(query, parameters, tryNumber + 1);
+ }, waitTime);
+ }
+ })
+ .catch(error => {
+ logger("Connection error", error);
+ // TODO: use QueryResultError, or better yet: exception/reject of promise.
+ this.update({
+ job: {
+ error: "failed communicating with server. Please check your Internet connection and try again.",
+ status: 4,
+ },
+ });
+ });
+ }
+
+ getLink(queryId, fileType, apiKey) {
+ let link = `api/queries/${queryId}/results/${this.getId()}.${fileType}`;
+ if (apiKey) {
+ link = `${link}?api_key=${apiKey}`;
+ }
+ return link;
+ }
+
+ getName(queryName, fileType) {
+ return `${queryName.replace(/ /g, "_") + moment(this.getUpdatedAt()).format("_YYYY_MM_DD")}.${fileType}`;
+ }
+
+ static getByQueryId(id, parameters, applyAutoLimit, maxAge) {
+ const queryResult = new QueryResult();
+
+ axios
+ .post(`api/queries/${id}/results`, { id, parameters, apply_auto_limit: applyAutoLimit, max_age: maxAge })
+ .then(response => {
+ queryResult.update(response);
+
+ if ("job" in response) {
+ queryResult.refreshStatus(id, parameters);
+ }
+ })
+ .catch(error => {
+ handleErrorResponse(queryResult, error);
+ });
+
+ return queryResult;
+ }
+
+ static get(dataSourceId, query, parameters, applyAutoLimit, maxAge, queryId) {
+ const queryResult = new QueryResult();
+
+ const params = {
+ data_source_id: dataSourceId,
+ parameters,
+ query,
+ apply_auto_limit: applyAutoLimit,
+ max_age: maxAge,
+ };
+
+ if (queryId !== undefined) {
+ params.query_id = queryId;
+ }
+
+ QueryResultResource.post(params)
+ .then(response => {
+ queryResult.update(response);
+
+ if ("job" in response) {
+ queryResult.refreshStatus(query, parameters);
+ }
+ })
+ .catch(error => {
+ handleErrorResponse(queryResult, error);
+ });
+
+ return queryResult;
+ }
+}
+
+export default QueryResult;
diff --git a/client/app/services/query-snippet.js b/client/app/services/query-snippet.js
new file mode 100644
index 000000000..689611303
--- /dev/null
+++ b/client/app/services/query-snippet.js
@@ -0,0 +1,33 @@
+import { axios } from "@/services/axios";
+import { extend, map } from "lodash";
+
+class QuerySnippet {
+ constructor(querySnippet) {
+ extend(this, querySnippet);
+ }
+
+ getSnippet() {
+ let name = this.trigger;
+ if (this.description !== "") {
+ name = `${this.trigger}: ${this.description}`;
+ }
+
+ return {
+ name,
+ content: this.snippet,
+ tabTrigger: this.trigger,
+ };
+ }
+}
+
+const getQuerySnippet = querySnippet => new QuerySnippet(querySnippet);
+
+const QuerySnippetService = {
+ get: data => axios.get(`api/query_snippets/${data.id}`).then(getQuerySnippet),
+ query: () => axios.get("api/query_snippets").then(data => map(data, getQuerySnippet)),
+ create: data => axios.post("api/query_snippets", data).then(getQuerySnippet),
+ save: data => axios.post(`api/query_snippets/${data.id}`, data).then(getQuerySnippet),
+ delete: data => axios.delete(`api/query_snippets/${data.id}`),
+};
+
+export default QuerySnippetService;
diff --git a/client/app/services/query.js b/client/app/services/query.js
new file mode 100644
index 000000000..a8cf624cb
--- /dev/null
+++ b/client/app/services/query.js
@@ -0,0 +1,411 @@
+import moment from "moment";
+import debug from "debug";
+import Mustache from "mustache";
+import { axios } from "@/services/axios";
+import {
+ zipObject,
+ isEmpty,
+ isArray,
+ map,
+ filter,
+ includes,
+ union,
+ uniq,
+ has,
+ identity,
+ extend,
+ each,
+ some,
+ clone,
+ find,
+} from "lodash";
+import location from "@/services/location";
+
+import { Parameter, createParameter } from "./parameters";
+import { currentUser } from "./auth";
+import QueryResult from "./query-result";
+import localOptions from "@/lib/localOptions";
+
+Mustache.escape = identity; // do not html-escape values
+
+const logger = debug("redash:services:query");
+
+function collectParams(parts) {
+ let parameters = [];
+
+ parts.forEach(part => {
+ if (part[0] === "name" || part[0] === "&") {
+ parameters.push(part[1].split(".")[0]);
+ } else if (part[0] === "#") {
+ parameters = union(parameters, collectParams(part[4]));
+ }
+ });
+
+ return parameters;
+}
+
+export class Query {
+ constructor(query) {
+ extend(this, query);
+
+ if (!has(this, "options")) {
+ this.options = {};
+ }
+ this.options.apply_auto_limit = !!this.options.apply_auto_limit;
+
+ if (!isArray(this.options.parameters)) {
+ this.options.parameters = [];
+ }
+ }
+
+ isNew() {
+ return this.id === undefined;
+ }
+
+ hasDailySchedule() {
+ return this.schedule && this.schedule.match(/\d\d:\d\d/) !== null;
+ }
+
+ scheduleInLocalTime() {
+ const parts = this.schedule.split(":");
+ return moment
+ .utc()
+ .hour(parts[0])
+ .minute(parts[1])
+ .local()
+ .format("HH:mm");
+ }
+
+ hasResult() {
+ return !!(this.latest_query_data || this.latest_query_data_id);
+ }
+
+ paramsRequired() {
+ return this.getParameters().isRequired();
+ }
+
+ hasParameters() {
+ return this.getParametersDefs().length > 0;
+ }
+
+ prepareQueryResultExecution(execute, maxAge) {
+ const parameters = this.getParameters();
+ const missingParams = parameters.getMissing();
+
+ if (missingParams.length > 0) {
+ let paramsWord = "parameter";
+ let valuesWord = "value";
+ if (missingParams.length > 1) {
+ paramsWord = "parameters";
+ valuesWord = "values";
+ }
+
+ return new QueryResult({
+ job: {
+ error: `missing ${valuesWord} for ${missingParams.join(", ")} ${paramsWord}.`,
+ status: 4,
+ },
+ });
+ }
+
+ if (parameters.isRequired()) {
+ // Need to clear latest results, to make sure we don't use results for different params.
+ this.latest_query_data = null;
+ this.latest_query_data_id = null;
+ }
+
+ if (this.latest_query_data && maxAge !== 0) {
+ if (!this.queryResult) {
+ this.queryResult = new QueryResult({
+ query_result: this.latest_query_data,
+ });
+ }
+ } else if (this.latest_query_data_id && maxAge !== 0) {
+ if (!this.queryResult) {
+ this.queryResult = QueryResult.getById(this.id, this.latest_query_data_id);
+ }
+ } else {
+ this.queryResult = execute();
+ }
+
+ return this.queryResult;
+ }
+
+ getQueryResult(maxAge) {
+ const execute = () =>
+ QueryResult.getByQueryId(this.id, this.getParameters().getExecutionValues(), this.getAutoLimit(), maxAge);
+ return this.prepareQueryResultExecution(execute, maxAge);
+ }
+
+ getQueryResultByText(maxAge, selectedQueryText) {
+ const queryText = selectedQueryText || this.query;
+ if (!queryText) {
+ return new QueryResultError("Can't execute empty query.");
+ }
+
+ const parameters = this.getParameters().getExecutionValues({ joinListValues: true });
+ const execute = () =>
+ QueryResult.get(this.data_source_id, queryText, parameters, this.getAutoLimit(), maxAge, this.id);
+ return this.prepareQueryResultExecution(execute, maxAge);
+ }
+
+ getUrl(source, hash) {
+ let url = `queries/${this.id}`;
+
+ if (source) {
+ url += "/source";
+ }
+
+ let params = {};
+ if (this.getParameters().isRequired()) {
+ this.getParametersDefs().forEach(param => {
+ extend(params, param.toUrlParams());
+ });
+ }
+ Object.keys(params).forEach(key => params[key] == null && delete params[key]);
+ params = map(params, (value, name) => `${encodeURIComponent(name)}=${encodeURIComponent(value)}`).join("&");
+
+ if (params !== "") {
+ url += `?${params}`;
+ }
+
+ if (hash) {
+ url += `#${hash}`;
+ }
+
+ return url;
+ }
+
+ getQueryResultPromise() {
+ return this.getQueryResult().toPromise();
+ }
+
+ getParameters() {
+ if (!this.$parameters) {
+ this.$parameters = new Parameters(this, location.search);
+ }
+
+ return this.$parameters;
+ }
+
+ getAutoLimit() {
+ return this.options.apply_auto_limit;
+ }
+
+ getParametersDefs(update = true) {
+ return this.getParameters().get(update);
+ }
+
+ favorite() {
+ return Query.favorite(this);
+ }
+
+ unfavorite() {
+ return Query.unfavorite(this);
+ }
+
+ clone() {
+ const newQuery = clone(this);
+ newQuery.$parameters = null;
+ newQuery.getParameters();
+ return newQuery;
+ }
+}
+
+class Parameters {
+ constructor(query, queryString) {
+ this.query = query;
+ this.updateParameters();
+ this.initFromQueryString(queryString);
+ }
+
+ parseQuery() {
+ const fallback = () => map(this.query.options.parameters, i => i.name);
+
+ let parameters = [];
+ if (this.query.query !== undefined) {
+ try {
+ const parts = Mustache.parse(this.query.query);
+ parameters = uniq(collectParams(parts));
+ } catch (e) {
+ logger("Failed parsing parameters: ", e);
+ // Return current parameters so we don't reset the list
+ parameters = fallback();
+ }
+ } else {
+ parameters = fallback();
+ }
+
+ return parameters;
+ }
+
+ updateParameters(update) {
+ if (this.query.query === this.cachedQueryText) {
+ const parameters = this.query.options.parameters;
+ const hasUnprocessedParameters = find(parameters, p => !(p instanceof Parameter));
+ if (hasUnprocessedParameters) {
+ this.query.options.parameters = map(parameters, p =>
+ p instanceof Parameter ? p : createParameter(p, this.query.id)
+ );
+ }
+ return;
+ }
+
+ this.cachedQueryText = this.query.query;
+ const parameterNames = update ? this.parseQuery() : map(this.query.options.parameters, p => p.name);
+
+ this.query.options.parameters = this.query.options.parameters || [];
+
+ const parametersMap = {};
+ this.query.options.parameters.forEach(param => {
+ parametersMap[param.name] = param;
+ });
+
+ parameterNames.forEach(param => {
+ if (!has(parametersMap, param)) {
+ this.query.options.parameters.push(
+ createParameter({
+ title: param,
+ name: param,
+ type: "text",
+ value: null,
+ global: false,
+ })
+ );
+ }
+ });
+
+ const parameterExists = p => includes(parameterNames, p.name);
+ const parameters = this.query.options.parameters;
+ this.query.options.parameters = parameters
+ .filter(parameterExists)
+ .map(p => (p instanceof Parameter ? p : createParameter(p, this.query.id)));
+ }
+
+ initFromQueryString(query) {
+ this.get().forEach(param => {
+ param.fromUrlParams(query);
+ });
+ }
+
+ get(update = true) {
+ this.updateParameters(update);
+ return this.query.options.parameters;
+ }
+
+ add(parameterDef) {
+ this.query.options.parameters = this.query.options.parameters.filter(p => p.name !== parameterDef.name);
+ const param = createParameter(parameterDef);
+ this.query.options.parameters.push(param);
+ return param;
+ }
+
+ getMissing() {
+ return map(
+ filter(this.get(), p => p.isEmpty),
+ i => i.title
+ );
+ }
+
+ isRequired() {
+ return !isEmpty(this.get());
+ }
+
+ getExecutionValues(extra = {}) {
+ const params = this.get();
+ return zipObject(
+ map(params, i => i.name),
+ map(params, i => i.getExecutionValue(extra))
+ );
+ }
+
+ hasPendingValues() {
+ return some(this.get(), p => p.hasPendingValue);
+ }
+
+ applyPendingValues() {
+ each(this.get(), p => p.applyPendingValue());
+ }
+
+ toUrlParams() {
+ if (this.get().length === 0) {
+ return "";
+ }
+
+ const params = Object.assign(...this.get().map(p => p.toUrlParams()));
+ Object.keys(params).forEach(key => params[key] == null && delete params[key]);
+ return Object.keys(params)
+ .map(k => `${encodeURIComponent(k)}=${encodeURIComponent(params[k])}`)
+ .join("&");
+ }
+}
+
+export class QueryResultError {
+ constructor(errorMessage) {
+ this.errorMessage = errorMessage;
+ this.updatedAt = moment.utc();
+ }
+
+ getUpdatedAt() {
+ return this.updatedAt;
+ }
+
+ getError() {
+ return this.errorMessage;
+ }
+
+ toPromise() {
+ return Promise.reject(this);
+ }
+
+ // eslint-disable-next-line class-methods-use-this
+ getStatus() {
+ return "failed";
+ }
+
+ // eslint-disable-next-line class-methods-use-this
+ getData() {
+ return null;
+ }
+
+ // eslint-disable-next-line class-methods-use-this
+ getLog() {
+ return null;
+ }
+}
+
+const getQuery = query => new Query(query);
+const saveOrCreateUrl = data => (data.id ? `api/queries/${data.id}` : "api/queries");
+const mapResults = data => ({ ...data, results: map(data.results, getQuery) });
+
+const QueryService = {
+ query: params => axios.get("api/queries", { params }).then(mapResults),
+ get: data => axios.get(`api/queries/${data.id}`, data).then(getQuery),
+ save: data => axios.post(saveOrCreateUrl(data), data).then(getQuery),
+ delete: data => axios.delete(`api/queries/${data.id}`),
+ recent: params => axios.get(`api/queries/recent`, { params }).then(data => map(data, getQuery)),
+ archive: params => axios.get(`api/queries/archive`, { params }).then(mapResults),
+ myQueries: params => axios.get("api/queries/my", { params }).then(mapResults),
+ fork: ({ id }) => axios.post(`api/queries/${id}/fork`, { id }).then(getQuery),
+ resultById: data => axios.get(`api/queries/${data.id}/results.json`),
+ asDropdown: data => axios.get(`api/queries/${data.id}/dropdown`),
+ associatedDropdown: ({ queryId, dropdownQueryId }) =>
+ axios.get(`api/queries/${queryId}/dropdowns/${dropdownQueryId}`),
+ favorites: params => axios.get("api/queries/favorites", { params }).then(mapResults),
+ favorite: data => axios.post(`api/queries/${data.id}/favorite`),
+ unfavorite: data => axios.delete(`api/queries/${data.id}/favorite`),
+};
+
+QueryService.newQuery = function newQuery() {
+ return new Query({
+ query: "",
+ name: "New Query",
+ schedule: null,
+ user: currentUser,
+ options: { apply_auto_limit: localOptions.get("applyAutoLimit", true) },
+ tags: [],
+ can_edit: true,
+ });
+};
+
+extend(Query, QueryService);
diff --git a/client/app/services/recordEvent.js b/client/app/services/recordEvent.js
new file mode 100644
index 000000000..7329ab760
--- /dev/null
+++ b/client/app/services/recordEvent.js
@@ -0,0 +1,25 @@
+import { axios } from "@/services/axios";
+import { debounce, extend } from "lodash";
+
+let events = [];
+
+const post = debounce(() => {
+ const eventsToSend = events;
+ events = [];
+
+ axios.post("api/events", eventsToSend);
+}, 1000);
+
+export default function recordEvent(action, objectType, objectId, additionalProperties) {
+ const event = {
+ action,
+ object_type: objectType,
+ object_id: objectId,
+ timestamp: Date.now() / 1000.0,
+ screen_resolution: `${window.screen.width}x${window.screen.height}`,
+ };
+ extend(event, additionalProperties);
+ events.push(event);
+
+ post();
+}
diff --git a/client/app/services/resizeObserver.js b/client/app/services/resizeObserver.js
new file mode 100644
index 000000000..c27b3bbae
--- /dev/null
+++ b/client/app/services/resizeObserver.js
@@ -0,0 +1,32 @@
+const items = new Map();
+
+function checkItems() {
+ if (items.size > 0) {
+ items.forEach((item, node) => {
+ const bounds = node.getBoundingClientRect();
+ // convert to int (because these numbers needed for comparisons), but preserve 1 decimal point
+ const width = Math.round(bounds.width * 10);
+ const height = Math.round(bounds.height * 10);
+
+ if (item.width !== width || item.height !== height) {
+ item.width = width;
+ item.height = height;
+ item.callback(node);
+ }
+ });
+
+ setTimeout(checkItems, 100);
+ }
+}
+
+export default function observe(node, callback) {
+ if (node && !items.has(node)) {
+ const shouldTrigger = items.size === 0;
+ items.set(node, { callback });
+ if (shouldTrigger) {
+ checkItems();
+ }
+ return () => items.delete(node);
+ }
+ return () => {};
+}
diff --git a/client/app/services/restoreSession.jsx b/client/app/services/restoreSession.jsx
new file mode 100644
index 000000000..b7773325e
--- /dev/null
+++ b/client/app/services/restoreSession.jsx
@@ -0,0 +1,91 @@
+import { map } from "lodash";
+import React from "react";
+import Modal from "antd/lib/modal";
+import { Auth } from "@/services/auth";
+
+const SESSION_RESTORED_MESSAGE = "redash_session_restored";
+
+export function notifySessionRestored() {
+ if (window.opener) {
+ window.opener.postMessage({ type: SESSION_RESTORED_MESSAGE }, window.location.origin);
+ }
+}
+
+function getPopupPosition(width, height) {
+ const windowLeft = window.screenX;
+ const windowTop = window.screenY;
+ const windowWidth = window.innerWidth;
+ const windowHeight = window.innerHeight;
+
+ return {
+ left: Math.floor((windowWidth - width) / 2 + windowLeft),
+ top: Math.floor((windowHeight - height) / 2 + windowTop),
+ width: Math.floor(width),
+ height: Math.floor(height),
+ };
+}
+
+function showRestoreSessionPrompt(loginUrl, onSuccess) {
+ let popup = null;
+
+ Modal.warning({
+ content: "Your session has expired. Please login to continue.",
+ okText: (
+
+ Login
+ (opens in a new tab)
+
+ ),
+ centered: true,
+ mask: true,
+ maskClosable: false,
+ keyboard: false,
+ onOk: closeModal => {
+ if (popup && !popup.closed) {
+ popup.focus();
+ return; // popup already shown
+ }
+
+ const popupOptions = {
+ ...getPopupPosition(640, 640),
+ menubar: "no",
+ toolbar: "no",
+ location: "yes",
+ resizable: "yes",
+ scrollbars: "yes",
+ status: "yes",
+ };
+
+ popup = window.open(loginUrl, "Restore Session", map(popupOptions, (value, key) => `${key}=${value}`).join(","));
+
+ const handlePostMessage = event => {
+ if (event.data.type === SESSION_RESTORED_MESSAGE) {
+ if (popup) {
+ popup.close();
+ }
+ popup = null;
+ window.removeEventListener("message", handlePostMessage);
+ closeModal();
+ onSuccess();
+ }
+ };
+
+ window.addEventListener("message", handlePostMessage, false);
+ },
+ });
+}
+
+let restoreSessionPromise = null;
+
+export function restoreSession() {
+ if (!restoreSessionPromise) {
+ restoreSessionPromise = new Promise(resolve => {
+ showRestoreSessionPrompt(Auth.getLoginUrl(), () => {
+ restoreSessionPromise = null;
+ resolve();
+ });
+ });
+ }
+
+ return restoreSessionPromise;
+}
diff --git a/client/app/services/routes.ts b/client/app/services/routes.ts
new file mode 100644
index 000000000..eae32f8fc
--- /dev/null
+++ b/client/app/services/routes.ts
@@ -0,0 +1,63 @@
+import { isString, isObject, filter, sortBy } from "lodash";
+import React from "react";
+import { Context, Route as UniversalRouterRoute } from "universal-router";
+import pathToRegexp from "path-to-regexp";
+
+export interface CurrentRoute {
+ id: string | null;
+ key?: string;
+ title: string;
+ routeParams: P;
+}
+
+export interface RedashRoute
extends UniversalRouterRoute {
+ path: string; // we don't use other UniversalRouterRoute options, path should be available and should be a string
+ key?: string; // generated in Router.jsx
+ title: string;
+ render?: (currentRoute: CurrentRoute) => React.ReactNode;
+ getApiKey?: () => string;
+}
+
+interface RouteItem extends RedashRoute {
+ id: string | null;
+}
+
+function getRouteParamsCount(path: string) {
+ const tokens = pathToRegexp.parse(path);
+ return filter(tokens, isObject).length;
+}
+
+class Routes {
+ _items: RouteItem[] = [];
+ _sorted = false;
+
+ get items(): RouteItem[] {
+ if (!this._sorted) {
+ this._items = sortBy(this._items, [
+ item => getRouteParamsCount(item.path), // simple definitions first, with more params - last
+ item => -item.path.length, // longer first
+ item => item.path, // if same type and length - sort alphabetically
+ ]);
+ this._sorted = true;
+ }
+ return this._items;
+ }
+
+ public register(id: string, route: RedashRoute
) {
+ const idOrNull = isString(id) ? id : null;
+ this.unregister(idOrNull);
+ if (isObject(route)) {
+ this._items = [...this.items, { ...route, id: idOrNull }];
+ this._sorted = false;
+ }
+ }
+
+ public unregister(id: string | null) {
+ if (isString(id)) {
+ // removing item does not break their order (if already sorted)
+ this._items = filter(this.items, item => item.id !== id);
+ }
+ }
+}
+
+export default new Routes();
diff --git a/client/app/services/sanitize.js b/client/app/services/sanitize.js
new file mode 100644
index 000000000..47521ba40
--- /dev/null
+++ b/client/app/services/sanitize.js
@@ -0,0 +1,23 @@
+import { isString } from "lodash";
+import DOMPurify from "dompurify";
+
+DOMPurify.setConfig({
+ ADD_ATTR: ["target"],
+});
+
+DOMPurify.addHook("afterSanitizeAttributes", function(node) {
+ // Fix elements with `target` attribute:
+ // - allow only `target="_blank"
+ // - add `rel="noopener noreferrer"` to prevent https://www.owasp.org/index.php/Reverse_Tabnabbing
+
+ const target = node.getAttribute("target");
+ if (isString(target) && target.toLowerCase() === "_blank") {
+ node.setAttribute("rel", "noopener noreferrer");
+ } else {
+ node.removeAttribute("target");
+ }
+});
+
+export { DOMPurify };
+
+export default DOMPurify.sanitize;
diff --git a/client/app/services/settingsMenu.js b/client/app/services/settingsMenu.js
new file mode 100644
index 000000000..c1d12dd77
--- /dev/null
+++ b/client/app/services/settingsMenu.js
@@ -0,0 +1,54 @@
+import { isString, isObject, isFunction, extend, omit, sortBy, find, filter } from "lodash";
+import { stripBase } from "@/components/ApplicationArea/Router";
+import { currentUser } from "@/services/auth";
+
+class SettingsMenuItem {
+ constructor(menuItem) {
+ extend(this, { pathPrefix: `/${menuItem.path}` }, omit(menuItem, ["isActive", "isAvailable"]));
+ if (isFunction(menuItem.isActive)) {
+ this.isActive = menuItem.isActive;
+ }
+ if (isFunction(menuItem.isAvailable)) {
+ this.isAvailable = menuItem.isAvailable;
+ }
+ }
+
+ isActive(path) {
+ return path.startsWith(this.pathPrefix);
+ }
+
+ isAvailable() {
+ return this.permission === undefined || currentUser.hasPermission(this.permission);
+ }
+}
+
+class SettingsMenu {
+ items = [];
+
+ add(id, item) {
+ id = isString(id) ? id : null;
+ this.remove(id);
+ if (isObject(item)) {
+ this.items.push(new SettingsMenuItem({ ...item, id }));
+ this.items = sortBy(this.items, "order");
+ }
+ }
+
+ remove(id) {
+ if (isString(id)) {
+ this.items = filter(this.items, item => item.id !== id);
+ // removing item does not change order of other items, so no need to sort
+ }
+ }
+
+ getAvailableItems() {
+ return filter(this.items, item => item.isAvailable());
+ }
+
+ getActiveItem(path) {
+ const strippedPath = stripBase(path);
+ return find(this.items, item => item.isActive(strippedPath));
+ }
+}
+
+export default new SettingsMenu();
diff --git a/client/app/services/settingsMenu.test.js b/client/app/services/settingsMenu.test.js
new file mode 100644
index 000000000..8a51b0beb
--- /dev/null
+++ b/client/app/services/settingsMenu.test.js
@@ -0,0 +1,33 @@
+import settingsMenu from "./settingsMenu";
+
+const dataSourcesItem = {
+ permission: "admin",
+ title: "Data Sources",
+ path: "data_sources",
+};
+
+const usersItem = {
+ title: "Users",
+ path: "users",
+};
+
+settingsMenu.add(null, dataSourcesItem);
+settingsMenu.add(null, usersItem);
+
+describe("SettingsMenu", () => {
+ describe("isActive", () => {
+ test("works with non multi org paths", () => {
+ expect(settingsMenu.getActiveItem("/data_sources/").title).toBe(dataSourcesItem.title);
+ });
+
+ test("works with multi org paths", () => {
+ // Set base href:
+ const base = document.createElement("base");
+ base.setAttribute("href", "http://localhost/acme/");
+ document.head.appendChild(base);
+
+ expect(settingsMenu.getActiveItem("/acme/data_sources/")).toBeTruthy();
+ expect(settingsMenu.getActiveItem("/acme/data_sources/").title).toBe(dataSourcesItem.title);
+ });
+ });
+});
diff --git a/client/app/services/url.js b/client/app/services/url.js
new file mode 100644
index 000000000..e5e84ca5d
--- /dev/null
+++ b/client/app/services/url.js
@@ -0,0 +1,25 @@
+import { pick, extend } from "lodash";
+
+const link = document.createElement("a"); // the only way to get an instance of Location class
+// add to document to apply href
+link.style.display = "none";
+document.body.appendChild(link);
+
+const fragmentProps = ["origin", "protocol", "host", "hostname", "port", "pathname", "search", "hash", "href"];
+
+export function parse(url) {
+ link.setAttribute("href", url);
+ return pick(link, fragmentProps);
+}
+
+export function stringify(fragments) {
+ extend(link, pick(fragments, fragmentProps));
+ return link.href; // absolute URL
+}
+
+export function normalize(url) {
+ link.setAttribute("href", url);
+ return link.href; // absolute URL
+}
+
+export default { parse, stringify, normalize };
diff --git a/client/app/services/user.js b/client/app/services/user.js
new file mode 100644
index 000000000..261fd3820
--- /dev/null
+++ b/client/app/services/user.js
@@ -0,0 +1,128 @@
+import { isString, get, find } from "lodash";
+import sanitize from "@/services/sanitize";
+import { axios } from "@/services/axios";
+import notification from "@/services/notification";
+import { clientConfig } from "@/services/auth";
+
+function getErrorMessage(error) {
+ return find([get(error, "response.data.message"), get(error, "response.statusText"), "Unknown error"], isString);
+}
+
+function disableResource(user) {
+ return `api/users/${user.id}/disable`;
+}
+
+function enableUser(user) {
+ const userName = sanitize(user.name);
+
+ return axios
+ .delete(disableResource(user))
+ .then(data => {
+ notification.success(`User ${userName} is now enabled.`);
+ user.is_disabled = false;
+ user.profile_image_url = data.profile_image_url;
+ return data;
+ })
+ .catch(error => {
+ notification.error("Cannot enable user", getErrorMessage(error));
+ });
+}
+
+function disableUser(user) {
+ const userName = sanitize(user.name);
+ return axios
+ .post(disableResource(user))
+ .then(data => {
+ notification.warning(`User ${userName} is now disabled.`);
+ user.is_disabled = true;
+ user.profile_image_url = data.profile_image_url;
+ return data;
+ })
+ .catch(error => {
+ notification.error("Cannot disable user", getErrorMessage(error));
+ });
+}
+
+function deleteUser(user) {
+ const userName = sanitize(user.name);
+ return axios
+ .delete(`api/users/${user.id}`)
+ .then(data => {
+ notification.warning(`User ${userName} has been deleted.`);
+ return data;
+ })
+ .catch(error => {
+ notification.error("Cannot delete user", getErrorMessage(error));
+ });
+}
+
+function convertUserInfo(user) {
+ return {
+ id: user.id,
+ name: user.name,
+ email: user.email,
+ profileImageUrl: user.profile_image_url,
+ apiKey: user.api_key,
+ groupIds: user.groups,
+ isDisabled: user.is_disabled,
+ isInvitationPending: user.is_invitation_pending,
+ };
+}
+
+function regenerateApiKey(user) {
+ return axios
+ .post(`api/users/${user.id}/regenerate_api_key`)
+ .then(data => {
+ notification.success("The API Key has been updated.");
+ return data.api_key;
+ })
+ .catch(error => {
+ notification.error("Failed regenerating API Key", getErrorMessage(error));
+ });
+}
+
+function sendPasswordReset(user) {
+ return axios
+ .post(`api/users/${user.id}/reset_password`)
+ .then(data => {
+ if (clientConfig.mailSettingsMissing) {
+ notification.warning("The mail server is not configured.");
+ return data.reset_link;
+ }
+ notification.success("Password reset email sent.");
+ })
+ .catch(error => {
+ notification.error("Failed to send password reset email", getErrorMessage(error));
+ });
+}
+
+function resendInvitation(user) {
+ return axios
+ .post(`api/users/${user.id}/invite`)
+ .then(data => {
+ if (clientConfig.mailSettingsMissing) {
+ notification.warning("The mail server is not configured.");
+ return data.invite_link;
+ }
+ notification.success("Invitation sent.");
+ })
+ .catch(error => {
+ notification.error("Failed to resend invitation", getErrorMessage(error));
+ });
+}
+
+const User = {
+ query: params => axios.get("api/users", { params }),
+ get: ({ id }) => axios.get(`api/users/${id}`),
+ create: data => axios.post(`api/users`, data),
+ save: data => axios.post(`api/users/${data.id}`, data),
+ enableUser,
+ disableUser,
+ deleteUser,
+ convertUserInfo,
+ regenerateApiKey,
+ sendPasswordReset,
+ resendInvitation,
+};
+
+export default User;
diff --git a/client/app/services/utils.js b/client/app/services/utils.js
new file mode 100644
index 000000000..46ba0d6ec
--- /dev/null
+++ b/client/app/services/utils.js
@@ -0,0 +1,7 @@
+// eslint-disable-next-line import/prefer-default-export
+export function absoluteUrl(url) {
+ const urlObj = new URL(url, window.location);
+ urlObj.protocol = window.location.protocol;
+ urlObj.host = window.location.host;
+ return urlObj.toString();
+}
diff --git a/client/app/services/visualization.js b/client/app/services/visualization.js
new file mode 100644
index 000000000..d94221c80
--- /dev/null
+++ b/client/app/services/visualization.js
@@ -0,0 +1,10 @@
+import { axios } from "@/services/axios";
+
+const saveOrCreateUrl = data => (data.id ? `api/visualizations/${data.id}` : "api/visualizations");
+
+const Visualization = {
+ save: data => axios.post(saveOrCreateUrl(data), data),
+ delete: data => axios.delete(`api/visualizations/${data.id}`),
+};
+
+export default Visualization;
diff --git a/client/app/services/widget.js b/client/app/services/widget.js
new file mode 100644
index 000000000..1fc5d124d
--- /dev/null
+++ b/client/app/services/widget.js
@@ -0,0 +1,287 @@
+import moment from "moment";
+import { axios } from "@/services/axios";
+import {
+ each,
+ pick,
+ extend,
+ isObject,
+ truncate,
+ keys,
+ difference,
+ filter,
+ map,
+ merge,
+ sortBy,
+ indexOf,
+ size,
+ includes,
+} from "lodash";
+import location from "@/services/location";
+import { cloneParameter } from "@/services/parameters";
+import dashboardGridOptions from "@/config/dashboard-grid-options";
+import { registeredVisualizations } from "@redash/viz/lib";
+import { Query } from "./query";
+
+export const WidgetTypeEnum = {
+ TEXTBOX: "textbox",
+ VISUALIZATION: "visualization",
+ RESTRICTED: "restricted",
+};
+
+function calculatePositionOptions(widget) {
+ widget.width = 1; // Backward compatibility, user on back-end
+
+ const visualizationOptions = {
+ autoHeight: false,
+ sizeX: Math.round(dashboardGridOptions.columns / 2),
+ sizeY: dashboardGridOptions.defaultSizeY,
+ minSizeX: dashboardGridOptions.minSizeX,
+ maxSizeX: dashboardGridOptions.maxSizeX,
+ minSizeY: dashboardGridOptions.minSizeY,
+ maxSizeY: dashboardGridOptions.maxSizeY,
+ };
+
+ const config = widget.visualization ? registeredVisualizations[widget.visualization.type] : null;
+ if (isObject(config)) {
+ if (Object.prototype.hasOwnProperty.call(config, "autoHeight")) {
+ visualizationOptions.autoHeight = config.autoHeight;
+ }
+
+ // Width constraints
+ const minColumns = parseInt(config.minColumns, 10);
+ if (isFinite(minColumns) && minColumns >= 0) {
+ visualizationOptions.minSizeX = minColumns;
+ }
+ const maxColumns = parseInt(config.maxColumns, 10);
+ if (isFinite(maxColumns) && maxColumns >= 0) {
+ visualizationOptions.maxSizeX = Math.min(maxColumns, dashboardGridOptions.columns);
+ }
+
+ // Height constraints
+ // `minRows` is preferred, but it should be kept for backward compatibility
+ const height = parseInt(config.height, 10);
+ if (isFinite(height)) {
+ visualizationOptions.minSizeY = Math.ceil(height / dashboardGridOptions.rowHeight);
+ }
+ const minRows = parseInt(config.minRows, 10);
+ if (isFinite(minRows)) {
+ visualizationOptions.minSizeY = minRows;
+ }
+ const maxRows = parseInt(config.maxRows, 10);
+ if (isFinite(maxRows) && maxRows >= 0) {
+ visualizationOptions.maxSizeY = maxRows;
+ }
+
+ // Default dimensions
+ const defaultWidth = parseInt(config.defaultColumns, 10);
+ if (isFinite(defaultWidth) && defaultWidth > 0) {
+ visualizationOptions.sizeX = defaultWidth;
+ }
+ const defaultHeight = parseInt(config.defaultRows, 10);
+ if (isFinite(defaultHeight) && defaultHeight > 0) {
+ visualizationOptions.sizeY = defaultHeight;
+ }
+ }
+
+ return visualizationOptions;
+}
+
+export const ParameterMappingType = {
+ DashboardLevel: "dashboard-level",
+ WidgetLevel: "widget-level",
+ StaticValue: "static-value",
+};
+
+class Widget {
+ static MappingType = ParameterMappingType;
+
+ constructor(data) {
+ // Copy properties
+ extend(this, data);
+
+ const visualizationOptions = calculatePositionOptions(this);
+
+ this.options = this.options || {};
+ this.options.position = extend(
+ {},
+ visualizationOptions,
+ pick(this.options.position, ["col", "row", "sizeX", "sizeY", "autoHeight"])
+ );
+
+ if (this.options.position.sizeY < 0) {
+ this.options.position.autoHeight = true;
+ }
+ }
+
+ get type() {
+ if (this.visualization) {
+ return WidgetTypeEnum.VISUALIZATION;
+ } else if (this.restricted) {
+ return WidgetTypeEnum.RESTRICTED;
+ }
+ return WidgetTypeEnum.TEXTBOX;
+ }
+
+ getQuery() {
+ if (!this.query && this.visualization) {
+ this.query = new Query(this.visualization.query);
+ }
+
+ return this.query;
+ }
+
+ getQueryResult() {
+ return this.data;
+ }
+
+ getName() {
+ if (this.visualization) {
+ return `${this.visualization.query.name} (${this.visualization.name})`;
+ }
+ return truncate(this.text, 20);
+ }
+
+ load(force, maxAge) {
+ if (!this.visualization) {
+ return Promise.resolve();
+ }
+
+ // Both `this.data` and `this.queryResult` are query result objects;
+ // `this.data` is last loaded query result;
+ // `this.queryResult` is currently loading query result;
+ // while widget is refreshing, `this.data` !== `this.queryResult`
+
+ if (force || this.queryResult === undefined) {
+ this.loading = true;
+ this.refreshStartedAt = moment();
+
+ if (maxAge === undefined || force) {
+ maxAge = force ? 0 : undefined;
+ }
+
+ const queryResult = this.getQuery().getQueryResult(maxAge);
+ this.queryResult = queryResult;
+
+ queryResult
+ .toPromise()
+ .then(result => {
+ if (this.queryResult === queryResult) {
+ this.loading = false;
+ this.data = result;
+ }
+ return result;
+ })
+ .catch(error => {
+ if (this.queryResult === queryResult) {
+ this.loading = false;
+ this.data = error;
+ }
+ return error;
+ });
+ }
+
+ return this.queryResult.toPromise();
+ }
+
+ save(key, value) {
+ const data = pick(this, "options", "text", "id", "width", "dashboard_id", "visualization_id");
+ if (key && value) {
+ data[key] = merge({}, data[key], value); // done like this so `this.options` doesn't get updated by side-effect
+ }
+
+ let url = "api/widgets";
+ if (this.id) {
+ url = `${url}/${this.id}`;
+ }
+
+ return axios.post(url, data).then(data => {
+ each(data, (v, k) => {
+ this[k] = v;
+ });
+
+ return this;
+ });
+ }
+
+ delete() {
+ const url = `api/widgets/${this.id}`;
+ return axios.delete(url);
+ }
+
+ isStaticParam(param) {
+ const mappings = this.getParameterMappings();
+ const mappingType = mappings[param.name].type;
+ return mappingType === Widget.MappingType.StaticValue;
+ }
+
+ getParametersDefs() {
+ const mappings = this.getParameterMappings();
+ // textboxes does not have query
+ const params = this.getQuery() ? this.getQuery().getParametersDefs() : [];
+
+ const queryParams = location.search;
+
+ const localTypes = [Widget.MappingType.WidgetLevel, Widget.MappingType.StaticValue];
+ const localParameters = map(
+ filter(params, param => localTypes.indexOf(mappings[param.name].type) >= 0),
+ param => {
+ const mapping = mappings[param.name];
+ const result = cloneParameter(param);
+ result.title = mapping.title || param.title;
+ result.locals = [param];
+ result.urlPrefix = `p_w${this.id}_`;
+ if (mapping.type === Widget.MappingType.StaticValue) {
+ result.setValue(mapping.value);
+ } else {
+ result.fromUrlParams(queryParams);
+ }
+ return result;
+ }
+ );
+
+ // order widget params using paramOrder
+ return sortBy(localParameters, param =>
+ includes(this.options.paramOrder, param.name)
+ ? indexOf(this.options.paramOrder, param.name)
+ : size(this.options.paramOrder)
+ );
+ }
+
+ getParameterMappings() {
+ if (!isObject(this.options.parameterMappings)) {
+ this.options.parameterMappings = {};
+ }
+
+ const existingParams = {};
+ // textboxes does not have query
+ const params = this.getQuery() ? this.getQuery().getParametersDefs(false) : [];
+ each(params, param => {
+ existingParams[param.name] = true;
+ if (!isObject(this.options.parameterMappings[param.name])) {
+ // "migration" for old dashboards: parameters with `global` flag
+ // should be mapped to a dashboard-level parameter with the same name
+ this.options.parameterMappings[param.name] = {
+ name: param.name,
+ type: param.global ? Widget.MappingType.DashboardLevel : Widget.MappingType.WidgetLevel,
+ mapTo: param.name, // map to param with the same name
+ value: null, // for StaticValue
+ title: "", // Use parameter's title
+ };
+ }
+ });
+
+ // Remove mappings for parameters that do not exists anymore
+ const removedParams = difference(keys(this.options.parameterMappings), keys(existingParams));
+ each(removedParams, name => {
+ delete this.options.parameterMappings[name];
+ });
+
+ return this.options.parameterMappings;
+ }
+
+ getLocalParameters() {
+ return filter(this.getParametersDefs(), param => !this.isStaticParam(param));
+ }
+}
+
+export default Widget;
diff --git a/client/app/styles/formStyle.less b/client/app/styles/formStyle.less
new file mode 100644
index 000000000..884b94a12
--- /dev/null
+++ b/client/app/styles/formStyle.less
@@ -0,0 +1,10 @@
+.ant-form-horizontal--labels-left {
+ .ant-form-item-label {
+ text-align: left;
+ white-space: normal;
+
+ > label::after {
+ content: none; // Do not show ":" next to label when they are aligned on left side
+ }
+ }
+}
diff --git a/client/app/styles/formStyle.ts b/client/app/styles/formStyle.ts
new file mode 100644
index 000000000..86d4970cd
--- /dev/null
+++ b/client/app/styles/formStyle.ts
@@ -0,0 +1,18 @@
+import { FormProps } from "antd/lib/form/Form";
+import { FormItemProps } from "antd/lib/form/FormItem";
+import "./formStyle.less";
+
+export function getHorizontalFormProps(): FormProps {
+ return {
+ labelCol: { xs: { span: 24 }, sm: { span: 6 }, lg: { span: 4 } },
+ wrapperCol: { xs: { span: 24 }, sm: { span: 12 }, lg: { span: 10 } },
+ layout: "horizontal",
+ className: "ant-form-horizontal--labels-left",
+ };
+}
+
+export function getHorizontalFormItemWithoutLabelProps(): FormItemProps {
+ return {
+ wrapperCol: { xs: { span: 24 }, sm: { span: 12, offset: 6 }, lg: { span: 12, offset: 4 } },
+ };
+}
diff --git a/client/app/unsupported.html b/client/app/unsupported.html
new file mode 100644
index 000000000..2e6fac7fa
--- /dev/null
+++ b/client/app/unsupported.html
@@ -0,0 +1,61 @@
+
+
+
+ Redash doesn't support your browser
+
+
+
+
+
+
+
Whoops... Redash doesn't support your browser
+
+
+
Download one of these free and up-to-date browsers:
+
+
+
+
\ No newline at end of file
diff --git a/client/app/unsupportedRedirect.js b/client/app/unsupportedRedirect.js
new file mode 100644
index 000000000..9e7629578
--- /dev/null
+++ b/client/app/unsupportedRedirect.js
@@ -0,0 +1,6 @@
+if (
+ navigator.appVersion.match("Trident/") || // IE8-11
+ "ActiveXObject" in window // IE<11
+) {
+ window.location.href = "/static/unsupported.html";
+}
diff --git a/client/app/version.json b/client/app/version.json
new file mode 100644
index 000000000..e94a739b9
--- /dev/null
+++ b/client/app/version.json
@@ -0,0 +1 @@
+"dev"
diff --git a/client/cypress/.eslintrc.js b/client/cypress/.eslintrc.js
new file mode 100644
index 000000000..d7cd2ba3d
--- /dev/null
+++ b/client/cypress/.eslintrc.js
@@ -0,0 +1,12 @@
+module.exports = {
+ extends: ["plugin:cypress/recommended"],
+ plugins: ["cypress", "chai-friendly"],
+ env: {
+ "cypress/globals": true,
+ },
+ rules: {
+ "func-names": ["error", "never"],
+ "no-unused-expressions": 0,
+ "chai-friendly/no-unused-expressions": 2,
+ },
+};
diff --git a/client/cypress/cypress.js b/client/cypress/cypress.js
new file mode 100644
index 000000000..5fd080bb3
--- /dev/null
+++ b/client/cypress/cypress.js
@@ -0,0 +1,123 @@
+/* eslint-disable import/no-extraneous-dependencies, no-console */
+const { find } = require("lodash");
+const atob = require("atob");
+const { execSync } = require("child_process");
+const { get, post } = require("request").defaults({ jar: true });
+const { seedData } = require("./seed-data");
+const fs = require("fs");
+var Cookie = require("request-cookies").Cookie;
+
+let cypressConfigBaseUrl;
+try {
+ const cypressConfig = JSON.parse(fs.readFileSync("cypress.json"));
+ cypressConfigBaseUrl = cypressConfig.baseUrl;
+} catch (e) {}
+
+const baseUrl = process.env.CYPRESS_baseUrl || cypressConfigBaseUrl || "http://localhost:5001";
+
+function seedDatabase(seedValues) {
+ get(baseUrl + "/login", (_, { headers }) => {
+ const request = seedValues.shift();
+ const data = request.type === "form" ? { formData: request.data } : { json: request.data };
+
+ if (headers["set-cookie"]) {
+ const cookies = headers["set-cookie"].map(cookie => new Cookie(cookie));
+ const csrfCookie = find(cookies, { key: "csrf_token" });
+ if (csrfCookie) {
+ if (request.type === "form") {
+ data["formData"] = { ...data["formData"], csrf_token: csrfCookie.value };
+ } else {
+ data["headers"] = { "X-CSRFToken": csrfCookie.value };
+ }
+ }
+ }
+
+ post(baseUrl + request.route, data, (err, response) => {
+ const result = response ? response.statusCode : err;
+ console.log("POST " + request.route + " - " + result);
+ if (seedValues.length) {
+ seedDatabase(seedValues);
+ }
+ });
+ });
+}
+
+function buildServer() {
+ console.log("Building the server...");
+ execSync("docker-compose -p cypress build", { stdio: "inherit" });
+}
+
+function startServer() {
+ console.log("Starting the server...");
+ execSync("docker-compose -p cypress up -d", { stdio: "inherit" });
+ execSync("docker-compose -p cypress run server create_db", { stdio: "inherit" });
+}
+
+function stopServer() {
+ console.log("Stopping the server...");
+ execSync("docker-compose -p cypress down", { stdio: "inherit" });
+}
+
+function runCypressCI() {
+ const {
+ PERCY_TOKEN_ENCODED,
+ CYPRESS_PROJECT_ID_ENCODED,
+ CYPRESS_RECORD_KEY_ENCODED,
+ CIRCLE_REPOSITORY_URL,
+ } = process.env;
+
+ if (CIRCLE_REPOSITORY_URL && CIRCLE_REPOSITORY_URL.includes("getredash/redash")) {
+ if (PERCY_TOKEN_ENCODED) {
+ process.env.PERCY_TOKEN = atob(`${PERCY_TOKEN_ENCODED}`);
+ }
+ if (CYPRESS_PROJECT_ID_ENCODED) {
+ process.env.CYPRESS_PROJECT_ID = atob(`${CYPRESS_PROJECT_ID_ENCODED}`);
+ }
+ if (CYPRESS_RECORD_KEY_ENCODED) {
+ process.env.CYPRESS_RECORD_KEY = atob(`${CYPRESS_RECORD_KEY_ENCODED}`);
+ }
+ }
+
+ execSync(
+ "COMMIT_INFO_MESSAGE=$(git show -s --format=%s) docker-compose run --name cypress cypress ./node_modules/.bin/percy exec -t 300 -- ./node_modules/.bin/cypress run --record",
+ { stdio: "inherit" }
+ );
+}
+
+const command = process.argv[2] || "all";
+
+switch (command) {
+ case "build":
+ buildServer();
+ break;
+ case "start":
+ startServer();
+ if (!process.argv.includes("--skip-db-seed")) {
+ seedDatabase(seedData);
+ }
+ break;
+ case "db-seed":
+ seedDatabase(seedData);
+ break;
+ case "run":
+ execSync("cypress run", { stdio: "inherit" });
+ break;
+ case "open":
+ execSync("cypress open", { stdio: "inherit" });
+ break;
+ case "run-ci":
+ runCypressCI();
+ break;
+ case "stop":
+ stopServer();
+ break;
+ case "all":
+ startServer();
+ seedDatabase(seedData);
+ execSync("cypress run", { stdio: "inherit" });
+ stopServer();
+ break;
+ default:
+ console.log("Usage: yarn cypress [build|start|db-seed|open|run|stop]");
+ break;
+}
diff --git a/client/cypress/integration/alert/create_alert_spec.js b/client/cypress/integration/alert/create_alert_spec.js
new file mode 100644
index 000000000..092b631ca
--- /dev/null
+++ b/client/cypress/integration/alert/create_alert_spec.js
@@ -0,0 +1,23 @@
+describe("Create Alert", () => {
+ beforeEach(() => {
+ cy.login();
+ });
+
+ it("renders the initial page and takes a screenshot", () => {
+ cy.visit("/alerts/new");
+ cy.getByTestId("QuerySelector").should("exist");
+ cy.percySnapshot("Create Alert initial screen");
+ });
+
+ it("selects query and takes a screenshot", () => {
+ cy.createQuery({ name: "Create Alert Query" }).then(({ id: queryId }) => {
+ cy.visit("/alerts/new");
+ cy.getByTestId("QuerySelector")
+ .click()
+ .type("Create Alert Query");
+ cy.get(`.query-selector-result[data-test="QueryId${queryId}"]`).click();
+ cy.getByTestId("Criteria").should("exist");
+ cy.percySnapshot("Create Alert second screen");
+ });
+ });
+});
diff --git a/client/cypress/integration/alert/edit_alert_spec.js b/client/cypress/integration/alert/edit_alert_spec.js
new file mode 100644
index 000000000..1a03ccf37
--- /dev/null
+++ b/client/cypress/integration/alert/edit_alert_spec.js
@@ -0,0 +1,43 @@
+describe("Edit Alert", () => {
+ beforeEach(() => {
+ cy.login();
+ });
+
+ it("renders the page and takes a screenshot", () => {
+ cy.createQuery({ query: "select 1 as col_name" })
+ .then(({ id: queryId }) => cy.createAlert(queryId, { column: "col_name" }))
+ .then(({ id: alertId }) => {
+ cy.visit(`/alerts/${alertId}/edit`);
+ cy.getByTestId("Criteria").should("exist");
+ cy.percySnapshot("Edit Alert screen");
+ });
+ });
+
+ it("edits the notification template and takes a screenshot", () => {
+ cy.createQuery()
+ .then(({ id: queryId }) => cy.createAlert(queryId, { custom_subject: "FOO", custom_body: "BAR" }))
+ .then(({ id: alertId }) => {
+ cy.visit(`/alerts/${alertId}/edit`);
+ cy.getByTestId("AlertCustomTemplate").should("exist");
+ cy.percySnapshot("Alert Custom Template screen");
+ });
+ });
+
+ it("previews rendered template correctly", () => {
+ const options = {
+ value: "123",
+ op: "==",
+ custom_subject: "{{ ALERT_CONDITION }}",
+ custom_body: "{{ ALERT_THRESHOLD }}",
+ };
+
+ cy.createQuery()
+ .then(({ id: queryId }) => cy.createAlert(queryId, options))
+ .then(({ id: alertId }) => {
+ cy.visit(`/alerts/${alertId}/edit`);
+ cy.get(".alert-template-preview").click();
+ cy.getByTestId("CustomSubject").should("have.value", options.op);
+ cy.getByTestId("CustomBody").should("have.value", options.value);
+ });
+ });
+});
diff --git a/client/cypress/integration/alert/view_alert_spec.js b/client/cypress/integration/alert/view_alert_spec.js
new file mode 100644
index 000000000..2042050fd
--- /dev/null
+++ b/client/cypress/integration/alert/view_alert_spec.js
@@ -0,0 +1,115 @@
+describe("View Alert", () => {
+ beforeEach(function() {
+ cy.login().then(() => {
+ cy.createQuery({ query: "select 1 as col_name" })
+ .then(({ id: queryId }) => cy.createAlert(queryId, { column: "col_name" }))
+ .then(({ id: alertId }) => {
+ this.alertId = alertId;
+ this.alertUrl = `/alerts/${alertId}`;
+ });
+ });
+ });
+
+ it("renders the page and takes a screenshot", function() {
+ cy.visit(this.alertUrl);
+ cy.getByTestId("Criteria").should("exist");
+ cy.percySnapshot("View Alert screen");
+ });
+
+ it("allows adding new destinations", function() {
+ cy.visit(this.alertUrl);
+ cy.getByTestId("AlertDestinations")
+ .contains("Test Email Destination")
+ .should("not.exist");
+
+ cy.server();
+ cy.route("GET", "**/api/destinations").as("Destinations");
+ cy.route("GET", "**/api/alerts/*/subscriptions").as("Subscriptions");
+
+ cy.visit(this.alertUrl);
+
+ cy.wait(["@Destinations", "@Subscriptions"]);
+ cy.getByTestId("ShowAddAlertSubDialog").click();
+ cy.contains("Test Email Destination").click();
+ cy.contains("Save").click();
+
+ cy.getByTestId("AlertDestinations")
+ .contains("Test Email Destination")
+ .should("exist");
+ });
+
+ describe("Alert Destination permissions", () => {
+ before(() => {
+ cy.login();
+ cy.createUser({
+ name: "Example User",
+ email: "user@redash.io",
+ password: "password",
+ });
+ });
+
+ it("hides remove button from non-author", function() {
+ cy.server();
+ cy.route("GET", "**/api/alerts/*/subscriptions").as("Subscriptions");
+
+ cy.logout()
+ .then(() => cy.login()) // as admin
+ .then(() => cy.addDestinationSubscription(this.alertId, "Test Email Destination"))
+ .then(() => {
+ cy.visit(this.alertUrl);
+
+ // verify remove button appears for author
+ cy.wait(["@Subscriptions"]);
+ cy.getByTestId("AlertDestinations")
+ .contains("Test Email Destination")
+ .parent()
+ .within(() => {
+ cy.get(".remove-button")
+ .as("RemoveButton")
+ .should("exist");
+ });
+
+ return cy.logout().then(() => cy.login("user@redash.io", "password"));
+ })
+ .then(() => {
+ cy.visit(this.alertUrl);
+
+ // verify remove button not shown for non-author
+ cy.wait(["@Subscriptions"]);
+ cy.get("@RemoveButton").should("not.exist");
+ });
+ });
+
+ it("shows remove button for non-author admin", function() {
+ cy.server();
+ cy.route("GET", "**/api/alerts/*/subscriptions").as("Subscriptions");
+
+ cy.logout()
+ .then(() => cy.login("user@redash.io", "password"))
+ .then(() => cy.addDestinationSubscription(this.alertId, "Test Email Destination"))
+ .then(() => {
+ cy.visit(this.alertUrl);
+
+ // verify remove button appears for author
+ cy.wait(["@Subscriptions"]);
+ cy.getByTestId("AlertDestinations")
+ .contains("Test Email Destination")
+ .parent()
+ .within(() => {
+ cy.get(".remove-button")
+ .as("RemoveButton")
+ .should("exist");
+ });
+
+ return cy.logout().then(() => cy.login()); // as admin
+ })
+ .then(() => {
+ cy.visit(this.alertUrl);
+
+ // verify remove button also appears for admin
+ cy.wait(["@Subscriptions"]);
+ cy.get("@RemoveButton").should("exist");
+ });
+ });
+ });
+});
diff --git a/client/cypress/integration/dashboard/dashboard_spec.js b/client/cypress/integration/dashboard/dashboard_spec.js
new file mode 100644
index 000000000..7d5fff9db
--- /dev/null
+++ b/client/cypress/integration/dashboard/dashboard_spec.js
@@ -0,0 +1,145 @@
+/* global cy, Cypress */
+
+import { getWidgetTestId } from "../../support/dashboard";
+
+const menuWidth = 80;
+
+describe("Dashboard", () => {
+ beforeEach(() => {
+ cy.login();
+ });
+
+ it("creates new dashboard", () => {
+ cy.visit("/dashboards");
+ cy.getByTestId("CreateButton").click();
+ cy.getByTestId("CreateDashboardMenuItem").click();
+
+ cy.server();
+ cy.route("POST", "**/api/dashboards").as("NewDashboard");
+
+ cy.getByTestId("CreateDashboardDialog").within(() => {
+ cy.getByTestId("DashboardSaveButton").should("be.disabled");
+ cy.get("input").type("Foo Bar");
+ cy.getByTestId("DashboardSaveButton").click();
+ });
+
+ cy.wait("@NewDashboard").then(xhr => {
+ const id = Cypress._.get(xhr, "response.body.id");
+ assert.isDefined(id, "Dashboard api call returns id");
+
+ cy.visit("/dashboards");
+ cy.getByTestId("DashboardLayoutContent").within(() => {
+ cy.getByTestId(`DashboardId${id}`).should("exist");
+ });
+ });
+ });
+
+ it("archives dashboard", () => {
+ cy.createDashboard("Foo Bar").then(({ id }) => {
+ cy.visit(`/dashboards/${id}`);
+
+ cy.getByTestId("DashboardMoreButton").click();
+
+ cy.getByTestId("DashboardMoreButtonMenu")
+ .contains("Archive")
+ .click();
+
+ cy.get(".ant-modal .ant-btn")
+ .contains("Archive")
+ .click({ force: true });
+ cy.get(".label-tag-archived").should("exist");
+
+ cy.visit("/dashboards");
+ cy.getByTestId("DashboardLayoutContent").within(() => {
+ cy.getByTestId(`DashboardId${id}`).should("not.exist");
+ });
+ });
+ });
+
+ it("is accessible through multiple urls", () => {
+ cy.server();
+ cy.route("GET", "**/api/dashboards/*").as("LoadDashboard");
+ cy.createDashboard("Dashboard multiple urls").then(({ id, slug }) => {
+ [`/dashboards/${id}`, `/dashboards/${id}-anything-here`, `/dashboard/${slug}`].forEach(url => {
+ cy.visit(url);
+ cy.wait("@LoadDashboard");
+ cy.getByTestId(`DashboardId${id}Container`).should("exist");
+
+ // assert it always use the "/dashboards/{id}" path
+ cy.location("pathname").should("contain", `/dashboards/${id}`);
+ });
+ });
+ });
+
+ context("viewport width is at 800px", () => {
+ before(function() {
+ cy.login();
+ cy.createDashboard("Foo Bar")
+ .then(({ id }) => {
+ this.dashboardUrl = `/dashboards/${id}`;
+ this.dashboardEditUrl = `/dashboards/${id}?edit`;
+ return cy.addTextbox(id, "Hello World!").then(getWidgetTestId);
+ })
+ .then(elTestId => {
+ cy.visit(this.dashboardUrl);
+ cy.getByTestId(elTestId).as("textboxEl");
+ });
+ });
+
+ beforeEach(function() {
+ cy.login();
+ cy.visit(this.dashboardUrl);
+ cy.viewport(800 + menuWidth, 800);
+ });
+
+ it("shows widgets with full width", () => {
+ cy.get("@textboxEl").should($el => {
+ expect($el.width()).to.eq(770);
+ });
+
+ cy.viewport(801 + menuWidth, 800);
+ cy.get("@textboxEl").should($el => {
+ expect($el.width()).to.eq(378);
+ });
+ });
+
+ it("hides edit option", () => {
+ cy.getByTestId("DashboardMoreButton")
+ .click()
+ .should("be.visible");
+
+ cy.getByTestId("DashboardMoreButtonMenu")
+ .contains("Edit")
+ .as("editButton")
+ .should("not.be.visible");
+
+ cy.viewport(801 + menuWidth, 800);
+ cy.get("@editButton").should("be.visible");
+ });
+
+ it("disables edit mode", function() {
+ cy.viewport(801 + menuWidth, 800);
+ cy.visit(this.dashboardEditUrl);
+ cy.contains("button", "Done Editing")
+ .as("saveButton")
+ .should("exist");
+
+ cy.viewport(800 + menuWidth, 800);
+ cy.contains("button", "Done Editing").should("not.exist");
+ });
+ });
+
+ context("viewport width is at 767px", () => {
+ before(function() {
+ cy.login();
+ cy.createDashboard("Foo Bar").then(({ id }) => {
+ this.dashboardUrl = `/dashboards/${id}`;
+ });
+ });
+
+ beforeEach(function() {
+ cy.visit(this.dashboardUrl);
+ cy.viewport(767, 800);
+ });
+ });
+});
diff --git a/client/cypress/integration/dashboard/dashboard_tags_spec.js b/client/cypress/integration/dashboard/dashboard_tags_spec.js
new file mode 100644
index 000000000..b1ef579af
--- /dev/null
+++ b/client/cypress/integration/dashboard/dashboard_tags_spec.js
@@ -0,0 +1,31 @@
+import { expectTagsToContain, typeInTagsSelectAndSave } from "../../support/tags";
+
+describe("Dashboard Tags", () => {
+ beforeEach(function() {
+ cy.login();
+ cy.createDashboard("Foo Bar").then(({ id }) => cy.visit(`/dashboards/${id}`));
+ });
+
+ it("is possible to add and edit tags", () => {
+ cy.server();
+ cy.route("POST", "**/api/dashboards/*").as("DashboardSave");
+
+ cy.getByTestId("TagsControl").contains(".label", "Unpublished");
+
+ cy.getByTestId("EditTagsButton")
+ .should("contain", "Add tag")
+ .click();
+
+ typeInTagsSelectAndSave("tag1{enter}tag2{enter}tag3{enter}");
+
+ cy.wait("@DashboardSave");
+ expectTagsToContain(["tag1", "tag2", "tag3"]);
+
+ cy.getByTestId("EditTagsButton").click();
+ typeInTagsSelectAndSave("tag4{enter}");
+
+ cy.wait("@DashboardSave");
+ cy.reload();
+ expectTagsToContain(["tag1", "tag2", "tag3", "tag4"]);
+ });
+});
diff --git a/client/cypress/integration/dashboard/filters_spec.js b/client/cypress/integration/dashboard/filters_spec.js
new file mode 100644
index 000000000..d239332ee
--- /dev/null
+++ b/client/cypress/integration/dashboard/filters_spec.js
@@ -0,0 +1,86 @@
+import { createQueryAndAddWidget, editDashboard } from "../../support/dashboard";
+import { expectTableToHaveLength, expectFirstColumnToHaveMembers } from "../../support/visualizations/table";
+
+const SQL = `
+SELECT 'a' AS stage1, 'a1' AS stage2, 11 AS value UNION ALL
+SELECT 'a' AS stage1, 'a2' AS stage2, 12 AS value UNION ALL
+SELECT 'a' AS stage1, 'a3' AS stage2, 45 AS value UNION ALL
+SELECT 'a' AS stage1, 'a4' AS stage2, 54 AS value UNION ALL
+SELECT 'b' AS stage1, 'b1' AS stage2, 33 AS value UNION ALL
+SELECT 'b' AS stage1, 'b2' AS stage2, 73 AS value UNION ALL
+SELECT 'b' AS stage1, 'b3' AS stage2, 90 AS value UNION ALL
+SELECT 'c' AS stage1, 'c1' AS stage2, 19 AS value UNION ALL
+SELECT 'c' AS stage1, 'c2' AS stage2, 92 AS value UNION ALL
+SELECT 'c' AS stage1, 'c3' AS stage2, 63 AS value UNION ALL
+SELECT 'c' AS stage1, 'c4' AS stage2, 44 AS value\
+`;
+
+describe("Dashboard Filters", () => {
+ beforeEach(() => {
+ cy.login();
+
+ const queryData = {
+ name: "Query Filters",
+ query: `SELECT stage1 AS "stage1::filter", stage2, value FROM (${SQL}) q`,
+ };
+ cy.createDashboard("Dashboard Filters").then(dashboard => {
+ createQueryAndAddWidget(dashboard.id, queryData)
+ .as("widget1TestId")
+ .then(() => createQueryAndAddWidget(dashboard.id, queryData, { position: { col: 4 } }))
+ .as("widget2TestId")
+ .then(() => cy.visit(`/dashboards/${dashboard.id}`));
+ });
+ });
+
+ it("filters rows in a Table Visualization", function() {
+ editDashboard();
+ cy.getByTestId("DashboardFilters").should("not.exist");
+ cy.getByTestId("DashboardFiltersCheckbox").click();
+
+ cy.getByTestId("DashboardFilters").within(() => {
+ cy.getByTestId("FilterName-stage1::filter")
+ .find(".ant-select-selection-item")
+ .should("have.text", "a");
+ });
+
+ cy.getByTestId(this.widget1TestId).within(() => {
+ expectTableToHaveLength(4);
+ expectFirstColumnToHaveMembers(["a", "a", "a", "a"]);
+
+ cy.getByTestId("FilterName-stage1::filter")
+ .find(".ant-select")
+ .click();
+ });
+
+ cy.contains(".ant-select-item-option-content:visible", "b").click();
+
+ cy.getByTestId(this.widget1TestId).within(() => {
+ expectTableToHaveLength(3);
+ expectFirstColumnToHaveMembers(["b", "b", "b"]);
+ });
+
+ // assert that changing one widget filter doesn't affect another
+
+ cy.getByTestId(this.widget2TestId).within(() => {
+ expectTableToHaveLength(4);
+ expectFirstColumnToHaveMembers(["a", "a", "a", "a"]);
+ });
+
+ // assert that changing a global filter affects all widgets
+
+ cy.getByTestId("DashboardFilters").within(() => {
+ cy.getByTestId("FilterName-stage1::filter")
+ .find(".ant-select")
+ .click();
+ });
+
+ cy.contains(".ant-select-item-option-content:visible", "c").click();
+
+ [this.widget1TestId, this.widget2TestId].forEach(widgetTestId =>
+ cy.getByTestId(widgetTestId).within(() => {
+ expectTableToHaveLength(4);
+ expectFirstColumnToHaveMembers(["c", "c", "c", "c"]);
+ })
+ );
+ });
+});
diff --git a/client/cypress/integration/dashboard/grid_compliant_widgets_spec.js b/client/cypress/integration/dashboard/grid_compliant_widgets_spec.js
new file mode 100644
index 000000000..19883a017
--- /dev/null
+++ b/client/cypress/integration/dashboard/grid_compliant_widgets_spec.js
@@ -0,0 +1,127 @@
+/* global cy */
+
+import { getWidgetTestId, editDashboard, resizeBy } from "../../support/dashboard";
+
+const menuWidth = 80;
+
+describe("Grid compliant widgets", () => {
+ beforeEach(function() {
+ cy.login();
+ cy.viewport(1215 + menuWidth, 800);
+ cy.createDashboard("Foo Bar")
+ .then(({ id }) => {
+ this.dashboardUrl = `/dashboards/${id}`;
+ return cy.addTextbox(id, "Hello World!").then(getWidgetTestId);
+ })
+ .then(elTestId => {
+ cy.visit(this.dashboardUrl);
+ cy.getByTestId(elTestId).as("textboxEl");
+ });
+ });
+
+ describe("Draggable", () => {
+ describe("Grid snap", () => {
+ beforeEach(() => {
+ editDashboard();
+ });
+
+ it("stays put when dragged under snap threshold", () => {
+ cy.get("@textboxEl")
+ .dragBy(90)
+ .invoke("offset")
+ .should("have.property", "left", 15 + menuWidth); // no change, 15 -> 15
+ });
+
+ it("moves one column when dragged over snap threshold", () => {
+ cy.get("@textboxEl")
+ .dragBy(110)
+ .invoke("offset")
+ .should("have.property", "left", 215 + menuWidth); // moved by 200, 15 -> 215
+ });
+
+ it("moves two columns when dragged over snap threshold", () => {
+ cy.get("@textboxEl")
+ .dragBy(330)
+ .invoke("offset")
+ .should("have.property", "left", 415 + menuWidth); // moved by 400, 15 -> 415
+ });
+ });
+
+ it("auto saves after drag", () => {
+ cy.server();
+ cy.route("POST", "**/api/widgets/*").as("WidgetSave");
+
+ editDashboard();
+ cy.get("@textboxEl").dragBy(330);
+ cy.wait("@WidgetSave");
+ });
+ });
+
+ describe("Resizeable", () => {
+ describe("Column snap", () => {
+ beforeEach(() => {
+ editDashboard();
+ });
+
+ it("stays put when dragged under snap threshold", () => {
+ resizeBy(cy.get("@textboxEl"), 90)
+ .then(() => cy.get("@textboxEl"))
+ .invoke("width")
+ .should("eq", 585); // no change, 585 -> 585
+ });
+
+ it("moves one column when dragged over snap threshold", () => {
+ resizeBy(cy.get("@textboxEl"), 110)
+ .then(() => cy.get("@textboxEl"))
+ .invoke("width")
+ .should("eq", 785); // resized by 200, 585 -> 785
+ });
+
+ it("moves two columns when dragged over snap threshold", () => {
+ resizeBy(cy.get("@textboxEl"), 400)
+ .then(() => cy.get("@textboxEl"))
+ .invoke("width")
+ .should("eq", 985); // resized by 400, 585 -> 985
+ });
+ });
+
+ describe("Row snap", () => {
+ beforeEach(() => {
+ editDashboard();
+ });
+
+ it("stays put when dragged under snap threshold", () => {
+ resizeBy(cy.get("@textboxEl"), 0, 10)
+ .then(() => cy.get("@textboxEl"))
+ .invoke("height")
+ .should("eq", 135); // no change, 135 -> 135
+ });
+
+ it("moves one row when dragged over snap threshold", () => {
+ resizeBy(cy.get("@textboxEl"), 0, 30)
+ .then(() => cy.get("@textboxEl"))
+ .invoke("height")
+ .should("eq", 185); // resized by 50, , 135 -> 185
+ });
+
+ it("shrinks to minimum", () => {
+ cy.get("@textboxEl")
+ .then($el => resizeBy(cy.get("@textboxEl"), -$el.width(), -$el.height())) // resize to 0,0
+ .then(() => cy.get("@textboxEl"))
+ .should($el => {
+ expect($el.width()).to.eq(185); // min textbox width
+ expect($el.height()).to.eq(35); // min textbox height
+ });
+ });
+ });
+
+ it("auto saves after resize", () => {
+ cy.server();
+ cy.route("POST", "**/api/widgets/*").as("WidgetSave");
+
+ editDashboard();
+ resizeBy(cy.get("@textboxEl"), 200);
+ cy.wait("@WidgetSave");
+ });
+ });
+});
diff --git a/client/cypress/integration/dashboard/parameter_spec.js b/client/cypress/integration/dashboard/parameter_spec.js
new file mode 100644
index 000000000..dd62e773d
--- /dev/null
+++ b/client/cypress/integration/dashboard/parameter_spec.js
@@ -0,0 +1,164 @@
+import { createQueryAndAddWidget, editDashboard } from "../../support/dashboard";
+import { dragParam, expectParamOrder } from "../../support/parameters";
+
+describe("Dashboard Parameters", () => {
+ const parameters = [
+ { name: "param1", title: "Parameter 1", type: "text", value: "example1" },
+ { name: "param2", title: "Parameter 2", type: "text", value: "example2" },
+ ];
+
+ beforeEach(function() {
+ cy.login();
+ cy.createDashboard("Foo Bar")
+ .then(({ id }) => {
+ this.dashboardId = id;
+ this.dashboardUrl = `/dashboards/${id}`;
+ })
+ .then(() => {
+ const queryData = {
+ name: "Text Parameter",
+ query: "SELECT '{{param1}}', '{{param2}}' AS parameter",
+ options: {
+ parameters,
+ },
+ };
+ const widgetOptions = { position: { col: 0, row: 0, sizeX: 3, sizeY: 10, autoHeight: false } };
+ createQueryAndAddWidget(this.dashboardId, queryData, widgetOptions).then(widgetTestId => {
+ cy.visit(this.dashboardUrl);
+ this.widgetTestId = widgetTestId;
+ });
+ });
+ });
+
+ const openMappingOptions = widgetTestId => {
+ cy.getByTestId(widgetTestId).within(() => {
+ cy.getByTestId("WidgetDropdownButton").click();
+ });
+
+ cy.getByTestId("WidgetDropdownButtonMenu")
+ .contains("Edit Parameters")
+ .click();
+ };
+
+ const saveMappingOptions = (closeMappingMenu = false) => {
+ return cy
+ .getByTestId("EditParamMappingPopover")
+ .filter(":visible")
+ .as("Popover")
+ .within(() => {
+ // This is needed to grant the element will have finished loading
+ // eslint-disable-next-line cypress/no-unnecessary-waiting
+ cy.wait(500);
+ cy.contains("button", "OK").click();
+ })
+ .then(() => {
+ if (closeMappingMenu) {
+ cy.contains("button", "OK").click();
+ }
+ return cy.get("@Popover").should("not.be.visible");
+ });
+ };
+
+ const setWidgetParametersToDashboard = parameters => {
+ cy.wrap(parameters).each(({ name: paramName }, i) => {
+ cy.getByTestId(`EditParamMappingButton-${paramName}`).click();
+ cy.getByTestId("NewDashboardParameterOption")
+ .filter(":visible")
+ .click();
+ return saveMappingOptions(i === parameters.length - 1);
+ });
+ };
+
+ it("supports widget parameters", function() {
+ // widget parameter mapping is the default for the API
+ cy.getByTestId(this.widgetTestId).within(() => {
+ cy.getByTestId("TableVisualization").should("contain", "example1");
+
+ cy.getByTestId("ParameterName-param1")
+ .find("input")
+ .type("{selectall}Redash");
+
+ cy.getByTestId("ParameterApplyButton").click();
+
+ cy.getByTestId("TableVisualization").should("contain", "Redash");
+ });
+
+ cy.getByTestId("DashboardParameters").should("not.exist");
+ });
+
+ it("supports dashboard parameters", function() {
+ openMappingOptions(this.widgetTestId);
+ setWidgetParametersToDashboard(parameters);
+
+ cy.getByTestId(this.widgetTestId).within(() => {
+ cy.getByTestId("ParameterName-param1").should("not.exist");
+ });
+
+ cy.getByTestId("DashboardParameters").within(() => {
+ cy.getByTestId("ParameterName-param1")
+ .find("input")
+ .type("{selectall}DashboardParam");
+
+ cy.getByTestId("ParameterApplyButton").click();
+ });
+
+ cy.getByTestId(this.widgetTestId).within(() => {
+ cy.getByTestId("TableVisualization").should("contain", "DashboardParam");
+ });
+ });
+
+ it("supports static values for parameters", function() {
+ openMappingOptions(this.widgetTestId);
+ cy.getByTestId("EditParamMappingButton-param1").click();
+
+ cy.getByTestId("StaticValueOption").click();
+
+ cy.getByTestId("EditParamMappingPopover").within(() => {
+ cy.getByTestId("ParameterValueInput")
+ .find("input")
+ .type("{selectall}StaticValue");
+ });
+
+ saveMappingOptions(true);
+
+ cy.getByTestId(this.widgetTestId).within(() => {
+ cy.getByTestId("ParameterName-param1").should("not.exist");
+ });
+
+ cy.getByTestId("DashboardParameters").should("not.exist");
+
+ cy.getByTestId(this.widgetTestId).within(() => {
+ cy.getByTestId("TableVisualization").should("contain", "StaticValue");
+ });
+ });
+
+ it("reorders parameters", function() {
+ // Reorder is only available in edit mode
+ editDashboard();
+
+ const [param1, param2] = parameters;
+
+ cy.getByTestId("ParameterBlock-param1")
+ .invoke("width")
+ .then(paramWidth => {
+ cy.server();
+ cy.route("POST", `**/api/dashboards/*`).as("SaveDashboard");
+ cy.route("POST", `**/api/widgets/*`).as("SaveWidget");
+
+ // Asserts widget param order
+ dragParam(param1.name, paramWidth, 1);
+ cy.wait("@SaveWidget");
+ cy.reload();
+ expectParamOrder([param2.title, param1.title]);
+
+ // Asserts dashboard param order
+ openMappingOptions(this.widgetTestId);
+ setWidgetParametersToDashboard(parameters);
+ cy.wait("@SaveWidget");
+ dragParam(param1.name, paramWidth, 1);
+ cy.wait("@SaveDashboard");
+ cy.reload();
+ expectParamOrder([param2.title, param1.title]);
+ });
+ });
+});
diff --git a/client/cypress/integration/dashboard/sharing_spec.js b/client/cypress/integration/dashboard/sharing_spec.js
new file mode 100644
index 000000000..5e73b54e5
--- /dev/null
+++ b/client/cypress/integration/dashboard/sharing_spec.js
@@ -0,0 +1,203 @@
+/* global cy */
+
+import { editDashboard, shareDashboard, createQueryAndAddWidget } from "../../support/dashboard";
+
+describe("Dashboard Sharing", () => {
+ beforeEach(function() {
+ cy.login();
+ cy.createDashboard("Foo Bar").then(({ id }) => {
+ this.dashboardId = id;
+ this.dashboardUrl = `/dashboards/${id}`;
+ });
+ cy.updateOrgSettings({ disable_public_urls: false });
+ });
+
+ it("is unavailable when public urls feature is disabled", function() {
+ const queryData = {
+ query: "select 1",
+ };
+
+ const position = { autoHeight: false, sizeY: 6 };
+ createQueryAndAddWidget(this.dashboardId, queryData, { position })
+ .then(() => {
+ cy.visit(this.dashboardUrl);
+ return shareDashboard();
+ })
+ .then(secretAddress => {
+ // disable the feature
+ cy.updateOrgSettings({ disable_public_urls: true });
+
+ // check the feature is disabled
+ cy.visit(this.dashboardUrl);
+ cy.getByTestId("DashboardMoreButton").should("exist");
+ cy.getByTestId("OpenShareForm").should("not.exist");
+
+ cy.logout();
+ cy.visit(secretAddress);
+ cy.wait(1500); // eslint-disable-line cypress/no-unnecessary-waiting
+ cy.getByTestId("TableVisualization").should("not.exist");
+
+ cy.login();
+ cy.updateOrgSettings({ disable_public_urls: false });
+ });
+ });
+
+ it("is possible if all queries are safe", function() {
+ const options = {
+ parameters: [
+ {
+ name: "foo",
+ type: "number",
+ },
+ ],
+ };
+
+ const dashboardUrl = this.dashboardUrl;
+ cy.createQuery({ options }).then(({ id: queryId }) => {
+ cy.visit(dashboardUrl);
+ editDashboard();
+ cy.getByTestId("AddWidgetButton").click();
+ cy.getByTestId("AddWidgetDialog").within(() => {
+ cy.get(`.query-selector-result[data-test="QueryId${queryId}"]`).click();
+ });
+ cy.contains("button", "Add to Dashboard").click();
+ cy.getByTestId("AddWidgetDialog").should("not.exist");
+ cy.clickThrough(
+ {
+ button: `
+ Done Editing
+ Publish
+ `,
+ },
+ `OpenShareForm
+ PublicAccessEnabled`
+ );
+
+ cy.getByTestId("SecretAddress").should("exist");
+ });
+ });
+
+ describe("is available to unauthenticated users", () => {
+ it("when there are no parameters", function() {
+ const queryData = {
+ query: "select 1",
+ };
+
+ const position = { autoHeight: false, sizeY: 6 };
+ createQueryAndAddWidget(this.dashboardId, queryData, { position }).then(() => {
+ cy.visit(this.dashboardUrl);
+
+ shareDashboard().then(secretAddress => {
+ cy.logout();
+ cy.visit(secretAddress);
+ cy.getByTestId("TableVisualization", { timeout: 10000 }).should("exist");
+ cy.percySnapshot("Successfully Shared Unparameterized Dashboard");
+ });
+ });
+ });
+
+ it("when there are only safe parameters", function() {
+ const queryData = {
+ query: "select '{{foo}}'",
+ options: {
+ parameters: [
+ {
+ name: "foo",
+ type: "number",
+ value: 1,
+ },
+ ],
+ },
+ };
+
+ const position = { autoHeight: false, sizeY: 6 };
+ createQueryAndAddWidget(this.dashboardId, queryData, { position }).then(() => {
+ cy.visit(this.dashboardUrl);
+
+ shareDashboard().then(secretAddress => {
+ cy.logout();
+ cy.visit(secretAddress);
+ cy.getByTestId("TableVisualization", { timeout: 10000 }).should("exist");
+ cy.percySnapshot("Successfully Shared Parameterized Dashboard");
+ });
+ });
+ });
+
+ it("even when there are suddenly some unsafe parameters", function() {
+ const queryData = {
+ query: "select 1",
+ };
+
+ // start out by creating a dashboard with no parameters & share it
+ const position = { autoHeight: false, sizeY: 6 };
+ createQueryAndAddWidget(this.dashboardId, queryData, { position })
+ .then(() => {
+ cy.visit(this.dashboardUrl);
+ return shareDashboard();
+ })
+ .then(secretAddress => {
+ const unsafeQueryData = {
+ query: "select '{{foo}}'",
+ options: {
+ parameters: [
+ {
+ name: "foo",
+ type: "text",
+ value: "oh snap!",
+ },
+ ],
+ },
+ };
+
+ // then, after it is shared, add an unsafe parameterized query to it
+ const secondWidgetPos = { autoHeight: false, col: 3, sizeY: 6 };
+ createQueryAndAddWidget(this.dashboardId, unsafeQueryData, { position: secondWidgetPos }).then(() => {
+ cy.logout();
+ cy.title().should("eq", "Login to Redash"); // Make sure it's logged out
+ cy.visit(secretAddress);
+ cy.getByTestId("TableVisualization", { timeout: 10000 }).should("exist");
+ cy.contains(
+ ".alert",
+ "This query contains potentially unsafe parameters" +
+ " and cannot be executed on a shared dashboard or an embedded visualization."
+ );
+ cy.percySnapshot("Successfully Shared Parameterized Dashboard With Some Unsafe Queries");
+ });
+ });
+ });
+ });
+
+ it("is not possible if some queries are not safe", function() {
+ const options = {
+ parameters: [
+ {
+ name: "foo",
+ type: "text",
+ },
+ ],
+ };
+
+ const dashboardUrl = this.dashboardUrl;
+ cy.createQuery({ options }).then(({ id: queryId }) => {
+ cy.visit(dashboardUrl);
+ editDashboard();
+ cy.getByTestId("AddWidgetButton").click();
+ cy.getByTestId("AddWidgetDialog").within(() => {
+ cy.get(`.query-selector-result[data-test="QueryId${queryId}"]`).click();
+ });
+ cy.contains("button", "Add to Dashboard").click();
+ cy.getByTestId("AddWidgetDialog").should("not.exist");
+ cy.clickThrough(
+ {
+ button: `
+ Done Editing
+ Publish
+ `,
+ },
+ "OpenShareForm"
+ );
+
+ cy.getByTestId("PublicAccessEnabled").should("be.disabled");
+ });
+ });
+});
diff --git a/client/cypress/integration/dashboard/textbox_spec.js b/client/cypress/integration/dashboard/textbox_spec.js
new file mode 100644
index 000000000..0c8463587
--- /dev/null
+++ b/client/cypress/integration/dashboard/textbox_spec.js
@@ -0,0 +1,150 @@
+/* global cy */
+
+import { getWidgetTestId, editDashboard } from "../../support/dashboard";
+
+describe("Textbox", () => {
+ beforeEach(function() {
+ cy.login();
+ cy.createDashboard("Foo Bar").then(({ id }) => {
+ this.dashboardId = id;
+ this.dashboardUrl = `/dashboards/${id}`;
+ });
+ });
+
+ const confirmDeletionInModal = () => {
+ cy.get(".ant-modal .ant-btn")
+ .contains("Delete")
+ .click({ force: true });
+ };
+
+ it("adds textbox", function() {
+ cy.visit(this.dashboardUrl);
+ editDashboard();
+ cy.getByTestId("AddTextboxButton").click();
+ cy.getByTestId("TextboxDialog").within(() => {
+ cy.get("textarea").type("Hello World!");
+ });
+ cy.contains("button", "Add to Dashboard").click();
+ cy.getByTestId("TextboxDialog").should("not.exist");
+ cy.get(".widget-text").should("exist");
+ });
+
+ it("removes textbox by X button", function() {
+ cy.addTextbox(this.dashboardId, "Hello World!")
+ .then(getWidgetTestId)
+ .then(elTestId => {
+ cy.visit(this.dashboardUrl);
+ editDashboard();
+
+ cy.getByTestId(elTestId).within(() => {
+ cy.getByTestId("WidgetDeleteButton").click();
+ });
+
+ confirmDeletionInModal();
+ cy.getByTestId(elTestId).should("not.exist");
+ });
+ });
+
+ it("removes textbox by menu", function() {
+ cy.addTextbox(this.dashboardId, "Hello World!")
+ .then(getWidgetTestId)
+ .then(elTestId => {
+ cy.visit(this.dashboardUrl);
+ cy.getByTestId(elTestId).within(() => {
+ cy.getByTestId("WidgetDropdownButton").click();
+ });
+ cy.getByTestId("WidgetDropdownButtonMenu")
+ .contains("Remove from Dashboard")
+ .click();
+
+ confirmDeletionInModal();
+ cy.getByTestId(elTestId).should("not.exist");
+ });
+ });
+
+ it("allows opening menu after removal", function() {
+ let elTestId1;
+ cy.addTextbox(this.dashboardId, "txb 1")
+ .then(getWidgetTestId)
+ .then(elTestId => {
+ elTestId1 = elTestId;
+ return cy.addTextbox(this.dashboardId, "txb 2").then(getWidgetTestId);
+ })
+ .then(elTestId2 => {
+ cy.visit(this.dashboardUrl);
+ editDashboard();
+
+ // remove 1st textbox and make sure it's gone
+ cy.getByTestId(elTestId1)
+ .as("textbox1")
+ .within(() => {
+ cy.getByTestId("WidgetDeleteButton").click();
+ });
+
+ confirmDeletionInModal();
+ cy.get("@textbox1").should("not.exist");
+
+ // remove 2nd textbox and make sure it's gone
+ cy.getByTestId(elTestId2)
+ .as("textbox2")
+ .within(() => {
+ // unclickable https://github.com/getredash/redash/issues/3202
+ cy.getByTestId("WidgetDeleteButton").click();
+ });
+
+ confirmDeletionInModal();
+ cy.get("@textbox2").should("not.exist"); // <-- fails because of the bug
+ });
+ });
+
+ it("edits textbox", function() {
+ cy.addTextbox(this.dashboardId, "Hello World!")
+ .then(getWidgetTestId)
+ .then(elTestId => {
+ cy.visit(this.dashboardUrl);
+ cy.getByTestId(elTestId)
+ .as("textboxEl")
+ .within(() => {
+ cy.getByTestId("WidgetDropdownButton").click();
+ });
+
+ cy.getByTestId("WidgetDropdownButtonMenu")
+ .contains("Edit")
+ .click();
+
+ const newContent = "[edited]";
+ cy.getByTestId("TextboxDialog")
+ .should("exist")
+ .within(() => {
+ cy.get("textarea")
+ .clear()
+ .type(newContent);
+ cy.contains("button", "Save").click();
+ });
+
+ cy.get("@textboxEl").should("contain", newContent);
+ });
+ });
+
+ it("renders textbox according to position configuration", function() {
+ const id = this.dashboardId;
+ const txb1Pos = { col: 0, row: 0, sizeX: 3, sizeY: 2 };
+ const txb2Pos = { col: 1, row: 1, sizeX: 3, sizeY: 4 };
+
+ cy.viewport(1215, 800);
+ cy.addTextbox(id, "x", { position: txb1Pos })
+ .then(() => cy.addTextbox(id, "x", { position: txb2Pos }))
+ .then(getWidgetTestId)
+ .then(elTestId => {
+ cy.visit(this.dashboardUrl);
+ return cy.getByTestId(elTestId);
+ })
+ .should($el => {
+ const { top, left } = $el.offset();
+ expect(top).to.eq(162);
+ expect(left).to.eq(282);
+ expect($el.width()).to.eq(545);
+ expect($el.height()).to.eq(185);
+ });
+ });
+});
diff --git a/client/cypress/integration/dashboard/widget_spec.js b/client/cypress/integration/dashboard/widget_spec.js
new file mode 100644
index 000000000..6da0e335c
--- /dev/null
+++ b/client/cypress/integration/dashboard/widget_spec.js
@@ -0,0 +1,220 @@
+/* global cy */
+
+import { createQueryAndAddWidget, editDashboard, resizeBy } from "../../support/dashboard";
+
+describe("Widget", () => {
+ beforeEach(function() {
+ cy.login();
+ cy.createDashboard("Foo Bar").then(({ id }) => {
+ this.dashboardId = id;
+ this.dashboardUrl = `/dashboards/${id}`;
+ });
+ });
+
+ const confirmDeletionInModal = () => {
+ cy.get(".ant-modal .ant-btn")
+ .contains("Delete")
+ .click({ force: true });
+ };
+
+ it("adds widget", function() {
+ cy.createQuery().then(({ id: queryId }) => {
+ cy.visit(this.dashboardUrl);
+ editDashboard();
+ cy.getByTestId("AddWidgetButton").click();
+ cy.getByTestId("AddWidgetDialog").within(() => {
+ cy.get(`.query-selector-result[data-test="QueryId${queryId}"]`).click();
+ });
+ cy.contains("button", "Add to Dashboard").click();
+ cy.getByTestId("AddWidgetDialog").should("not.exist");
+ cy.get(".widget-wrapper").should("exist");
+ });
+ });
+
+ it("removes widget", function() {
+ createQueryAndAddWidget(this.dashboardId).then(elTestId => {
+ cy.visit(this.dashboardUrl);
+ editDashboard();
+ cy.getByTestId(elTestId).within(() => {
+ cy.getByTestId("WidgetDeleteButton").click();
+ });
+
+ confirmDeletionInModal();
+ cy.getByTestId(elTestId).should("not.exist");
+ });
+ });
+
+ describe("Auto height for table visualization", () => {
+ it("renders correct height for 2 table rows", function() {
+ const queryData = {
+ query: "select s.a FROM generate_series(1,2) AS s(a)",
+ };
+
+ createQueryAndAddWidget(this.dashboardId, queryData).then(elTestId => {
+ cy.visit(this.dashboardUrl);
+ cy.getByTestId(elTestId)
+ .its("0.offsetHeight")
+ .should("eq", 235);
+ });
+ });
+
+ it("renders correct height for 5 table rows", function() {
+ const queryData = {
+ query: "select s.a FROM generate_series(1,5) AS s(a)",
+ };
+
+ createQueryAndAddWidget(this.dashboardId, queryData).then(elTestId => {
+ cy.visit(this.dashboardUrl);
+ cy.getByTestId(elTestId)
+ .its("0.offsetHeight")
+ .should("eq", 335);
+ });
+ });
+
+ describe("Height behavior on refresh", () => {
+ const paramName = "count";
+ const queryData = {
+ query: `select s.a FROM generate_series(1,{{ ${paramName} }}) AS s(a)`,
+ options: {
+ parameters: [
+ {
+ title: paramName,
+ name: paramName,
+ type: "text",
+ },
+ ],
+ },
+ };
+
+ beforeEach(function() {
+ createQueryAndAddWidget(this.dashboardId, queryData).then(elTestId => {
+ cy.visit(this.dashboardUrl);
+ cy.getByTestId(elTestId)
+ .as("widget")
+ .within(() => {
+ cy.getByTestId("RefreshButton").as("refreshButton");
+ });
+ cy.getByTestId(`ParameterName-${paramName}`).within(() => {
+ cy.getByTestId("TextParamInput").as("paramInput");
+ });
+ });
+ });
+
+ it("grows when dynamically adding table rows", () => {
+ // listen to results
+ cy.server();
+ cy.route("GET", "**/api/query_results/*").as("FreshResults");
+
+ // start with 1 table row
+ cy.get("@paramInput")
+ .clear()
+ .type("1");
+ cy.getByTestId("ParameterApplyButton").click();
+ cy.wait("@FreshResults", { timeout: 10000 });
+ cy.get("@widget")
+ .invoke("height")
+ .should("eq", 285);
+
+ // add 4 table rows
+ cy.get("@paramInput")
+ .clear()
+ .type("5");
+ cy.getByTestId("ParameterApplyButton").click();
+ cy.wait("@FreshResults", { timeout: 10000 });
+
+ // expect to height to grow by 1 grid grow
+ cy.get("@widget")
+ .invoke("height")
+ .should("eq", 435);
+ });
+
+ it("revokes auto height after manual height adjustment", () => {
+ // listen to results
+ cy.server();
+ cy.route("GET", "**/api/query_results/*").as("FreshResults");
+
+ editDashboard();
+
+ // start with 1 table row
+ cy.get("@paramInput")
+ .clear()
+ .type("1");
+ cy.getByTestId("ParameterApplyButton").click();
+ cy.wait("@FreshResults");
+ cy.get("@widget")
+ .invoke("height")
+ .should("eq", 285);
+
+ // resize height by 1 grid row
+ resizeBy(cy.get("@widget"), 0, 50)
+ .then(() => cy.get("@widget"))
+ .invoke("height")
+ .should("eq", 335); // resized by 50, , 135 -> 185
+
+ // add 4 table rows
+ cy.get("@paramInput")
+ .clear()
+ .type("5");
+ cy.getByTestId("ParameterApplyButton").click();
+ cy.wait("@FreshResults");
+
+ // expect height to stay unchanged (would have been 435)
+ cy.get("@widget")
+ .invoke("height")
+ .should("eq", 335);
+ });
+ });
+ });
+
+ it("sets the correct height of table visualization", function() {
+ const queryData = {
+ query: `select '${"loremipsum".repeat(15)}' FROM generate_series(1,15)`,
+ };
+
+ const widgetOptions = { position: { col: 0, row: 0, sizeX: 3, sizeY: 10, autoHeight: false } };
+
+ createQueryAndAddWidget(this.dashboardId, queryData, widgetOptions).then(() => {
+ cy.visit(this.dashboardUrl);
+ cy.getByTestId("TableVisualization")
+ .its("0.offsetHeight")
+ .should("eq", 381);
+ cy.percySnapshot("Shows correct height of table visualization");
+ });
+ });
+
+ it("shows fixed pagination for overflowing tabular content ", function() {
+ const queryData = {
+ query: "select 'lorem ipsum' FROM generate_series(1,50)",
+ };
+
+ const widgetOptions = { position: { col: 0, row: 0, sizeX: 3, sizeY: 10, autoHeight: false } };
+
+ createQueryAndAddWidget(this.dashboardId, queryData, widgetOptions).then(() => {
+ cy.visit(this.dashboardUrl);
+ cy.getByTestId("TableVisualization")
+ .next(".ant-pagination.mini")
+ .should("be.visible");
+ cy.percySnapshot("Shows fixed mini pagination for overflowing tabular content");
+ });
+ });
+
+ it("keeps results on screen while refreshing", function() {
+ const queryData = {
+ query: "select pg_sleep({{sleep-time}}), 'sleep time: {{sleep-time}}' as sleeptime",
+ options: { parameters: [{ name: "sleep-time", title: "Sleep time", type: "number", value: 0 }] },
+ };
+
+ createQueryAndAddWidget(this.dashboardId, queryData).then(elTestId => {
+ cy.visit(this.dashboardUrl);
+ cy.getByTestId(elTestId).within(() => {
+ cy.getByTestId("TableVisualization").should("contain", "sleep time: 0");
+ cy.get(".refresh-indicator").should("not.be.visible");
+
+ cy.getByTestId("ParameterName-sleep-time").type("10");
+ cy.getByTestId("ParameterApplyButton").click();
+ cy.get(".refresh-indicator").should("be.visible");
+ cy.getByTestId("TableVisualization").should("contain", "sleep time: 0");
+ });
+ });
+ });
+});
diff --git a/client/cypress/integration/data-source/create_data_source_spec.js b/client/cypress/integration/data-source/create_data_source_spec.js
new file mode 100644
index 000000000..0453dd5d6
--- /dev/null
+++ b/client/cypress/integration/data-source/create_data_source_spec.js
@@ -0,0 +1,54 @@
+describe("Create Data Source", () => {
+ beforeEach(() => {
+ cy.login();
+ });
+
+ it("opens the creation dialog when clicking in the create link or button", () => {
+ cy.visit("/data_sources");
+ cy.server();
+ cy.route("**/api/data_sources", []); // force an empty response
+
+ ["CreateDataSourceButton", "CreateDataSourceLink"].forEach(createElementTestId => {
+ cy.getByTestId(createElementTestId).click();
+ cy.getByTestId("CreateSourceDialog").should("exist");
+ cy.getByTestId("CreateSourceCancelButton").click();
+ cy.getByTestId("CreateSourceDialog").should("not.exist");
+ });
+ });
+
+ it("renders the page and takes a screenshot", function() {
+ cy.visit("/data_sources/new");
+ cy.server();
+ cy.route("**/api/data_sources/types").as("DataSourceTypesRequest");
+
+ cy.wait("@DataSourceTypesRequest")
+ .then(({ response }) => response.body.filter(type => type.deprecated))
+ .then(deprecatedTypes => deprecatedTypes.map(type => type.type))
+ .as("deprecatedTypes");
+
+ cy.getByTestId("PreviewItem")
+ .then($previewItems => Cypress.$.map($previewItems, item => Cypress.$(item).attr("data-test-type")))
+ .then(availableTypes => expect(availableTypes).not.to.contain.members(this.deprecatedTypes));
+
+ cy.getByTestId("CreateSourceDialog").should("contain", "PostgreSQL");
+ cy.wait(1000); // eslint-disable-line cypress/no-unnecessary-waiting
+ cy.percySnapshot("Create Data Source - Types");
+ });
+
+ it("creates a new PostgreSQL data source", () => {
+ cy.visit("/data_sources/new");
+ cy.getByTestId("SearchSource").type("PostgreSQL");
+ cy.getByTestId("CreateSourceDialog")
+ .contains("PostgreSQL")
+ .click();
+
+ cy.getByTestId("Name").type("Redash");
+ cy.getByTestId("Host").type("postgres");
+ cy.getByTestId("User").type("postgres");
+ cy.getByTestId("Password").type("postgres");
+ cy.getByTestId("Database Name").type("postgres{enter}");
+ cy.getByTestId("CreateSourceSaveButton").click();
+
+ cy.contains("Saved.");
+ });
+});
diff --git a/client/cypress/integration/data-source/edit_data_source_spec.js b/client/cypress/integration/data-source/edit_data_source_spec.js
new file mode 100644
index 000000000..d4f329ef0
--- /dev/null
+++ b/client/cypress/integration/data-source/edit_data_source_spec.js
@@ -0,0 +1,15 @@
+describe("Edit Data Source", () => {
+ beforeEach(() => {
+ cy.login();
+ cy.visit("/data_sources/1");
+ });
+
+ it("renders the page and takes a screenshot", () => {
+ cy.getByTestId("DataSource").within(() => {
+ cy.getByTestId("Name").should("have.value", "Test PostgreSQL");
+ cy.getByTestId("Host").should("have.value", "postgres");
+ });
+
+ cy.percySnapshot("Edit Data Source - PostgreSQL");
+ });
+});
diff --git a/client/cypress/integration/destination/create_destination_spec.js b/client/cypress/integration/destination/create_destination_spec.js
new file mode 100644
index 000000000..4629ec76c
--- /dev/null
+++ b/client/cypress/integration/destination/create_destination_spec.js
@@ -0,0 +1,40 @@
+describe("Create Destination", () => {
+ beforeEach(() => {
+ cy.login();
+ });
+
+ it("renders the page and takes a screenshot", function() {
+ cy.visit("/destinations/new");
+ cy.server();
+ cy.route("**/api/destinations/types").as("DestinationTypesRequest");
+
+ cy.wait("@DestinationTypesRequest")
+ .then(({ response }) => response.body.filter(type => type.deprecated))
+ .then(deprecatedTypes => deprecatedTypes.map(type => type.type))
+ .as("deprecatedTypes");
+
+ cy.getByTestId("PreviewItem")
+ .then($previewItems => Cypress.$.map($previewItems, item => Cypress.$(item).attr("data-test-type")))
+ .then(availableTypes => expect(availableTypes).not.to.contain.members(this.deprecatedTypes));
+
+ cy.getByTestId("CreateSourceDialog").should("contain", "Email");
+ cy.wait(1000); // eslint-disable-line cypress/no-unnecessary-waiting
+ cy.percySnapshot("Create Destination - Types");
+ });
+
+ it("shows a custom error message when destination name is already taken", () => {
+ cy.createDestination("Slack Destination", "slack").then(() => {
+ cy.visit("/destinations/new");
+
+ cy.getByTestId("SearchSource").type("Slack");
+ cy.getByTestId("CreateSourceDialog")
+ .contains("Slack")
+ .click();
+
+ cy.getByTestId("Name").type("Slack Destination");
+ cy.getByTestId("CreateSourceSaveButton").click();
+
+ cy.contains("Alert Destination with the name Slack Destination already exists.");
+ });
+ });
+});
diff --git a/client/cypress/integration/embed/share_embed_spec.js b/client/cypress/integration/embed/share_embed_spec.js
new file mode 100644
index 000000000..7928aa5b1
--- /dev/null
+++ b/client/cypress/integration/embed/share_embed_spec.js
@@ -0,0 +1,131 @@
+describe("Embedded Queries", () => {
+ beforeEach(() => {
+ cy.login();
+ cy.updateOrgSettings({ disable_public_urls: false });
+ });
+
+ it("is unavailable when public urls feature is disabled", () => {
+ cy.createQuery({ query: "select name from users order by name" }).then(query => {
+ cy.visit(`/queries/${query.id}/source`);
+ cy.getByTestId("ExecuteButton").click();
+ cy.getByTestId("QueryPageVisualizationTabs", { timeout: 10000 }).should("exist");
+ cy.clickThrough(`
+ QueryControlDropdownButton
+ ShowEmbedDialogButton
+ `);
+ cy.getByTestId("EmbedIframe")
+ .invoke("text")
+ .then(embedUrl => {
+ // disable the feature
+ cy.updateOrgSettings({ disable_public_urls: true });
+
+ // check the feature is disabled
+ cy.visit(`/queries/${query.id}/source`);
+ cy.getByTestId("QueryPageVisualizationTabs", { timeout: 10000 }).should("exist");
+ cy.getByTestId("QueryPageHeaderMoreButton").click();
+ cy.get(".ant-dropdown-menu-item")
+ .should("exist")
+ .should("not.contain", "Show API Key");
+ cy.getByTestId("QueryControlDropdownButton").click();
+ cy.get(".ant-dropdown-menu-item").should("exist");
+ cy.getByTestId("ShowEmbedDialogButton").should("not.exist");
+
+ cy.logout();
+ cy.visit(embedUrl);
+ cy.wait(1500); // eslint-disable-line cypress/no-unnecessary-waiting
+ cy.getByTestId("TableVisualization").should("not.exist");
+
+ cy.login();
+ cy.updateOrgSettings({ disable_public_urls: false });
+ });
+ });
+ });
+
+ it("can be shared without parameters", () => {
+ cy.createQuery({ query: "select name from users order by name" }).then(query => {
+ cy.visit(`/queries/${query.id}/source`);
+ cy.getByTestId("ExecuteButton").click();
+ cy.getByTestId("QueryPageVisualizationTabs", { timeout: 10000 }).should("exist");
+ cy.clickThrough(`
+ QueryControlDropdownButton
+ ShowEmbedDialogButton
+ `);
+ cy.getByTestId("EmbedIframe")
+ .invoke("text")
+ .then(embedUrl => {
+ cy.logout();
+ cy.visit(embedUrl);
+ cy.getByTestId("VisualizationEmbed", { timeout: 10000 }).should("exist");
+ cy.getByTestId("TimeAgo", { timeout: 10000 }).should("exist");
+ cy.getByTestId("TableVisualization").should("exist");
+ cy.percySnapshot("Successfully Embedded Non-Parameterized Query");
+ });
+ });
+ });
+
+ it("can be shared with safe parameters", () => {
+ cy.visit("/queries/new");
+ cy.getByTestId("QueryEditor")
+ .get(".ace_text-input")
+ .type("SELECT name, slug FROM organizations WHERE id='{{}{{}id}}'{esc}", { force: true });
+
+ cy.getByTestId("TextParamInput").type("1");
+ cy.getByTestId("ParameterApplyButton").click();
+ cy.clickThrough(`
+ ParameterSettings-id
+ ParameterTypeSelect
+ NumberParameterTypeOption
+ SaveParameterSettings
+ SaveButton
+ `);
+
+ // Add a little waiting - page is not updated fast enough
+ cy.wait(500); // eslint-disable-line cypress/no-unnecessary-waiting
+
+ cy.location("search").should("eq", "?p_id=1");
+ cy.clickThrough(`
+ QueryControlDropdownButton
+ ShowEmbedDialogButton
+ `);
+
+ cy.getByTestId("EmbedIframe")
+ .invoke("text")
+ .then(embedUrl => {
+ cy.logout();
+ cy.visit(embedUrl);
+ cy.getByTestId("VisualizationEmbed", { timeout: 10000 }).should("exist");
+ cy.getByTestId("TimeAgo", { timeout: 10000 }).should("exist");
+ cy.getByTestId("TableVisualization").should("exist");
+ cy.percySnapshot("Successfully Embedded Parameterized Query");
+ });
+ });
+
+ it("cannot be shared with unsafe parameters", () => {
+ cy.visit("/queries/new");
+ cy.getByTestId("QueryEditor")
+ .get(".ace_text-input")
+ .type("SELECT name, slug FROM organizations WHERE name='{{}{{}name}}'{esc}", { force: true });
+
+ cy.getByTestId("TextParamInput").type("Redash");
+ cy.getByTestId("ParameterApplyButton").click();
+ cy.clickThrough(`
+ ParameterSettings-name
+ ParameterTypeSelect
+ TextParameterTypeOption
+ SaveParameterSettings
+ SaveButton
+ `);
+
+ // Add a little waiting - page is not updated fast enough
+ cy.wait(500); // eslint-disable-line cypress/no-unnecessary-waiting
+
+ cy.location("search").should("eq", "?p_name=Redash");
+ cy.clickThrough(`
+ QueryControlDropdownButton
+ ShowEmbedDialogButton
+ `);
+
+ cy.getByTestId("EmbedIframe").should("not.exist");
+ cy.getByTestId("EmbedErrorAlert").should("exist");
+ });
+});
diff --git a/client/cypress/integration/group/edit_group_spec.js b/client/cypress/integration/group/edit_group_spec.js
new file mode 100644
index 000000000..da66a95b3
--- /dev/null
+++ b/client/cypress/integration/group/edit_group_spec.js
@@ -0,0 +1,15 @@
+describe("Edit Group", () => {
+ beforeEach(() => {
+ cy.login();
+ cy.visit("/groups/1");
+ });
+
+ it("renders the page and takes a screenshot", () => {
+ cy.getByTestId("Group").within(() => {
+ cy.get("h3").should("contain", "admin");
+ cy.get("td").should("contain", "Example Admin");
+ });
+
+ cy.percySnapshot("Group");
+ });
+});
diff --git a/client/cypress/integration/group/group_list_spec.js b/client/cypress/integration/group/group_list_spec.js
new file mode 100644
index 000000000..6f4f5d6f4
--- /dev/null
+++ b/client/cypress/integration/group/group_list_spec.js
@@ -0,0 +1,15 @@
+describe("Group List", () => {
+ beforeEach(() => {
+ cy.login();
+ cy.visit("/groups");
+ });
+
+ it("renders the page and takes a screenshot", () => {
+ cy.getByTestId("GroupList")
+ .should("exist")
+ .and("contain", "admin")
+ .and("contain", "default");
+
+ cy.percySnapshot("Groups");
+ });
+});
diff --git a/client/cypress/integration/query-snippets/create_query_snippet_spec.js b/client/cypress/integration/query-snippets/create_query_snippet_spec.js
new file mode 100644
index 000000000..ffd84f377
--- /dev/null
+++ b/client/cypress/integration/query-snippets/create_query_snippet_spec.js
@@ -0,0 +1,22 @@
+describe("Create Query Snippet", () => {
+ beforeEach(() => {
+ cy.login();
+ cy.visit("/query_snippets/new");
+ });
+
+ it("creates a query snippet with an empty description", () => {
+ // delete existing "example-snippet"
+ cy.request("GET", "api/query_snippets")
+ .then(({ body }) => body.filter(snippet => snippet.trigger === "example-snippet"))
+ .each(snippet => cy.request("DELETE", `api/query_snippets/${snippet.id}`));
+
+ cy.getByTestId("QuerySnippetDialog").within(() => {
+ cy.getByTestId("Trigger").type("example-snippet");
+ cy.getByTestId("Snippet")
+ .find(".ace_text-input")
+ .type("SELECT 1", { force: true });
+ });
+
+ cy.getByTestId("SaveQuerySnippetButton").click();
+ });
+});
diff --git a/client/cypress/integration/query/create_query_spec.js b/client/cypress/integration/query/create_query_spec.js
new file mode 100644
index 000000000..12ea5161a
--- /dev/null
+++ b/client/cypress/integration/query/create_query_spec.js
@@ -0,0 +1,27 @@
+describe("Create Query", () => {
+ beforeEach(() => {
+ cy.login();
+ cy.visit("/queries/new");
+ });
+
+ it("executes and saves a query", () => {
+ cy.clickThrough(`
+ SelectDataSource
+ SelectDataSource${Cypress.env("dataSourceId")}
+ `);
+
+ cy.getByTestId("QueryEditor")
+ .get(".ace_text-input")
+ .type("SELECT id, name FROM organizations{esc}", { force: true });
+
+ cy.getByTestId("ExecuteButton")
+ .should("be.enabled")
+ .click();
+
+ cy.getByTestId("TableVisualization").should("exist");
+ cy.percySnapshot("Edit Query");
+
+ cy.getByTestId("SaveButton").click();
+ cy.url().should("match", /\/queries\/.+\/source/);
+ });
+});
diff --git a/client/cypress/integration/query/filters_spec.js b/client/cypress/integration/query/filters_spec.js
new file mode 100644
index 000000000..50262738d
--- /dev/null
+++ b/client/cypress/integration/query/filters_spec.js
@@ -0,0 +1,124 @@
+import { expectTableToHaveLength, expectFirstColumnToHaveMembers } from "../../support/visualizations/table";
+
+const SQL = `
+SELECT 'a' AS stage1, 'a1' AS stage2, 11 AS value UNION ALL
+SELECT 'a' AS stage1, 'a2' AS stage2, 12 AS value UNION ALL
+SELECT 'a' AS stage1, 'a3' AS stage2, 45 AS value UNION ALL
+SELECT 'a' AS stage1, 'a4' AS stage2, 54 AS value UNION ALL
+SELECT 'b' AS stage1, 'b1' AS stage2, 33 AS value UNION ALL
+SELECT 'b' AS stage1, 'b2' AS stage2, 73 AS value UNION ALL
+SELECT 'b' AS stage1, 'b3' AS stage2, 90 AS value UNION ALL
+SELECT 'c' AS stage1, 'c1' AS stage2, 19 AS value UNION ALL
+SELECT 'c' AS stage1, 'c2' AS stage2, 92 AS value UNION ALL
+SELECT 'c' AS stage1, 'c3' AS stage2, 63 AS value UNION ALL
+SELECT 'c' AS stage1, 'c4' AS stage2, 44 AS value\
+`;
+
+describe("Query Filters", () => {
+ beforeEach(() => {
+ cy.login();
+ });
+
+ describe("Simple Filter", () => {
+ beforeEach(() => {
+ const queryData = {
+ name: "Query Filters",
+ query: `SELECT stage1 AS "stage1::filter", stage2, value FROM (${SQL}) q`,
+ };
+
+ cy.createQuery(queryData).then(({ id }) => cy.visit(`/queries/${id}`));
+ cy.getByTestId("ExecuteButton").click();
+ });
+
+ it("filters rows in a Table Visualization", () => {
+ cy.getByTestId("FilterName-stage1::filter")
+ .find(".ant-select-selection-item")
+ .should("have.text", "a");
+
+ expectTableToHaveLength(4);
+ expectFirstColumnToHaveMembers(["a", "a", "a", "a"]);
+
+ cy.getByTestId("FilterName-stage1::filter")
+ .find(".ant-select")
+ .click();
+
+ cy.contains(".ant-select-item-option-content", "b").click();
+
+ expectTableToHaveLength(3);
+ expectFirstColumnToHaveMembers(["b", "b", "b"]);
+ });
+ });
+
+ describe("Multi Filter", () => {
+ beforeEach(() => {
+ const queryData = {
+ name: "Query Filters",
+ query: `SELECT stage1 AS "stage1::multi-filter", stage2, value FROM (${SQL}) q`,
+ };
+
+ cy.createQuery(queryData).then(({ id }) => cy.visit(`/queries/${id}`));
+ cy.getByTestId("ExecuteButton").click();
+ });
+
+ function expectSelectedOptionsToHaveMembers(values) {
+ cy.getByTestId("FilterName-stage1::multi-filter")
+ .find(".ant-select-selection-item-content")
+ .then($selectedOptions => Cypress.$.map($selectedOptions, item => Cypress.$(item).text()))
+ .then(selectedOptions => expect(selectedOptions).to.have.members(values));
+ }
+
+ it("filters rows in a Table Visualization", () => {
+ // Defaults to All Options Selected
+
+ expectSelectedOptionsToHaveMembers(["a", "b", "c"]);
+ expectTableToHaveLength(11);
+ expectFirstColumnToHaveMembers(["a", "a", "a", "a", "b", "b", "b", "c", "c", "c", "c"]);
+
+ // Clear Option
+
+ cy.getByTestId("FilterName-stage1::multi-filter")
+ .find(".ant-select-selector")
+ .click();
+ cy.getByTestId("ClearOption").click();
+ cy.getByTestId("FilterName-stage1::multi-filter").click(); // close dropdown
+
+ cy.getByTestId("TableVisualization").should("not.exist");
+
+ // Single Option selected
+
+ cy.getByTestId("FilterName-stage1::multi-filter")
+ .find(".ant-select-selector")
+ .click();
+ cy.contains(".ant-select-item-option-grouped > .ant-select-item-option-content", "a").click();
+ cy.getByTestId("FilterName-stage1::multi-filter").click(); // close dropdown
+
+ expectSelectedOptionsToHaveMembers(["a"]);
+ expectTableToHaveLength(4);
+ expectFirstColumnToHaveMembers(["a", "a", "a", "a"]);
+
+ // Two Options selected
+
+ cy.getByTestId("FilterName-stage1::multi-filter")
+ .find(".ant-select-selector")
+ .click();
+ cy.contains(".ant-select-item-option-content", "b").click();
+ cy.getByTestId("FilterName-stage1::multi-filter").click(); // close dropdown
+
+ expectSelectedOptionsToHaveMembers(["a", "b"]);
+ expectTableToHaveLength(7);
+ expectFirstColumnToHaveMembers(["a", "a", "a", "a", "b", "b", "b"]);
+
+ // Select All Option
+
+ cy.getByTestId("FilterName-stage1::multi-filter")
+ .find(".ant-select-selector")
+ .click();
+ cy.getByTestId("SelectAllOption").click();
+ cy.getByTestId("FilterName-stage1::multi-filter").click(); // close dropdown
+
+ expectSelectedOptionsToHaveMembers(["a", "b", "c"]);
+ expectTableToHaveLength(11);
+ expectFirstColumnToHaveMembers(["a", "a", "a", "a", "b", "b", "b", "c", "c", "c", "c"]);
+ });
+ });
+});
diff --git a/client/cypress/integration/query/parameter_spec.js b/client/cypress/integration/query/parameter_spec.js
new file mode 100644
index 000000000..0b4cc9f60
--- /dev/null
+++ b/client/cypress/integration/query/parameter_spec.js
@@ -0,0 +1,645 @@
+import { dragParam } from "../../support/parameters";
+
+function openAndSearchAntdDropdown(testId, paramOption) {
+ cy.getByTestId(testId)
+ .find(".ant-select-selection-search-input")
+ .type(paramOption, { force: true });
+}
+
+describe("Parameter", () => {
+ const expectDirtyStateChange = edit => {
+ cy.getByTestId("ParameterName-test-parameter")
+ .find(".parameter-input")
+ .should($el => {
+ assert.isUndefined($el.data("dirty"));
+ });
+
+ edit();
+
+ cy.getByTestId("ParameterName-test-parameter")
+ .find(".parameter-input")
+ .should($el => {
+ assert.isTrue($el.data("dirty"));
+ });
+ };
+
+ beforeEach(() => {
+ cy.login();
+ });
+
+ describe("Text Parameter", () => {
+ beforeEach(() => {
+ const queryData = {
+ name: "Text Parameter",
+ query: "SELECT '{{test-parameter}}' AS parameter",
+ options: {
+ parameters: [{ name: "test-parameter", title: "Test Parameter", type: "text" }],
+ },
+ };
+
+ cy.createQuery(queryData, false).then(({ id }) => cy.visit(`/queries/${id}`));
+ });
+
+ it("updates the results after clicking Apply", () => {
+ cy.getByTestId("ParameterName-test-parameter")
+ .find("input")
+ .type("Redash");
+
+ cy.getByTestId("ParameterApplyButton").click();
+
+ cy.getByTestId("TableVisualization").should("contain", "Redash");
+ });
+
+ it("sets dirty state when edited", () => {
+ expectDirtyStateChange(() => {
+ cy.getByTestId("ParameterName-test-parameter")
+ .find("input")
+ .type("Redash");
+ });
+ });
+ });
+
+ describe("Number Parameter", () => {
+ beforeEach(() => {
+ const queryData = {
+ name: "Number Parameter",
+ query: "SELECT '{{test-parameter}}' AS parameter",
+ options: {
+ parameters: [{ name: "test-parameter", title: "Test Parameter", type: "number" }],
+ },
+ };
+
+ cy.createQuery(queryData, false).then(({ id }) => cy.visit(`/queries/${id}`));
+ });
+
+ it("updates the results after clicking Apply", () => {
+ cy.getByTestId("ParameterName-test-parameter")
+ .find("input")
+ .type("{selectall}42");
+
+ cy.getByTestId("ParameterApplyButton").click();
+
+ cy.getByTestId("TableVisualization").should("contain", 42);
+
+ cy.getByTestId("ParameterName-test-parameter")
+ .find("input")
+ .type("{selectall}31415");
+
+ cy.getByTestId("ParameterApplyButton").click();
+
+ cy.getByTestId("TableVisualization").should("contain", 31415);
+ });
+
+ it("sets dirty state when edited", () => {
+ expectDirtyStateChange(() => {
+ cy.getByTestId("ParameterName-test-parameter")
+ .find("input")
+ .type("{selectall}42");
+ });
+ });
+ });
+
+ describe("Dropdown Parameter", () => {
+ beforeEach(() => {
+ const queryData = {
+ name: "Dropdown Parameter",
+ query: "SELECT '{{test-parameter}}' AS parameter",
+ options: {
+ parameters: [
+ { name: "test-parameter", title: "Test Parameter", type: "enum", enumOptions: "value1\nvalue2\nvalue3" },
+ ],
+ },
+ };
+
+ cy.createQuery(queryData, false).then(({ id }) => cy.visit(`/queries/${id}/source`));
+ });
+
+ it("updates the results after selecting a value", () => {
+ openAndSearchAntdDropdown("ParameterName-test-parameter", "value2"); // asserts option filter prop
+
+ // only the filtered option should be on the DOM
+ cy.get(".ant-select-item-option")
+ .should("have.length", 1)
+ .and("contain", "value2")
+ .click();
+
+ cy.getByTestId("ParameterApplyButton").click();
+ // ensure that query is being executed
+ cy.getByTestId("QueryExecutionStatus").should("exist");
+
+ cy.getByTestId("TableVisualization").should("contain", "value2");
+ });
+
+ it("supports multi-selection", () => {
+ cy.clickThrough(`
+ ParameterSettings-test-parameter
+ AllowMultipleValuesCheckbox
+ QuotationSelect
+ DoubleQuotationMarkOption
+ SaveParameterSettings
+ `);
+
+ cy.getByTestId("ParameterName-test-parameter")
+ .find(".ant-select-selection-search")
+ .click();
+
+ // select all unselected options
+ cy.get(".ant-select-item-option").each($option => {
+ if (!$option.hasClass("ant-select-item-option-selected")) {
+ cy.wrap($option).click();
+ }
+ });
+
+ cy.getByTestId("QueryEditor").click(); // just to close the select menu
+
+ cy.getByTestId("ParameterApplyButton").click();
+
+ cy.getByTestId("TableVisualization").should("contain", '"value1","value2","value3"');
+ });
+
+ it("sets dirty state when edited", () => {
+ expectDirtyStateChange(() => {
+ cy.getByTestId("ParameterName-test-parameter")
+ .find(".ant-select")
+ .click();
+
+ cy.contains(".ant-select-item-option", "value2").click();
+ });
+ });
+ });
+
+ describe("Query Based Dropdown Parameter", () => {
+ context("based on a query with no results", () => {
+ beforeEach(() => {
+ const dropdownQueryData = {
+ name: "Dropdown Query",
+ query: "",
+ };
+ cy.createQuery(dropdownQueryData, true).then(dropdownQuery => {
+ const queryData = {
+ name: "Query Based Dropdown Parameter",
+ query: "SELECT '{{test-parameter}}' AS parameter",
+ options: {
+ parameters: [
+ { name: "test-parameter", title: "Test Parameter", type: "query", queryId: dropdownQuery.id },
+ ],
+ },
+ };
+
+ cy.createQuery(queryData, false).then(({ id }) => cy.visit(`/queries/${id}/source`));
+ });
+ });
+
+ it("should show a 'No options available' message when you click", () => {
+ cy.getByTestId("ParameterName-test-parameter")
+ .find(".ant-select:not(.ant-select-disabled) .ant-select-selector")
+ .click();
+
+ cy.contains(".ant-select-item-empty", "No options available");
+ });
+ });
+
+ context("based on a query with 3 results", () => {
+ beforeEach(() => {
+ const dropdownQueryData = {
+ name: "Dropdown Query",
+ query: `SELECT 'value1' AS name, 1 AS value UNION ALL
+ SELECT 'value2' AS name, 2 AS value UNION ALL
+ SELECT 'value3' AS name, 3 AS value`,
+ };
+ cy.createQuery(dropdownQueryData, true).then(dropdownQuery => {
+ const queryData = {
+ name: "Query Based Dropdown Parameter",
+ query: "SELECT '{{test-parameter}}' AS parameter",
+ options: {
+ parameters: [
+ { name: "test-parameter", title: "Test Parameter", type: "query", queryId: dropdownQuery.id },
+ ],
+ },
+ };
+
+ cy.visit(`/queries/${dropdownQuery.id}`);
+ cy.getByTestId("ExecuteButton").click();
+ cy.getByTestId("TableVisualization")
+ .should("contain", "value1")
+ .and("contain", "value2")
+ .and("contain", "value3");
+
+ cy.createQuery(queryData, false).then(({ id }) => cy.visit(`/queries/${id}/source`));
+ });
+ });
+
+ it("updates the results after selecting a value", () => {
+ openAndSearchAntdDropdown("ParameterName-test-parameter", "value2"); // asserts option filter prop
+
+ // only the filtered option should be on the DOM
+ cy.get(".ant-select-item-option")
+ .should("have.length", 1)
+ .and("contain", "value2")
+ .click();
+
+ cy.getByTestId("ParameterApplyButton").click();
+ // ensure that query is being executed
+ cy.getByTestId("QueryExecutionStatus").should("exist");
+
+ cy.getByTestId("TableVisualization").should("contain", "2");
+ });
+
+ it("supports multi-selection", () => {
+ cy.clickThrough(`
+ ParameterSettings-test-parameter
+ AllowMultipleValuesCheckbox
+ QuotationSelect
+ DoubleQuotationMarkOption
+ SaveParameterSettings
+ `);
+
+ cy.getByTestId("ParameterName-test-parameter")
+ .find(".ant-select")
+ .click();
+
+ // make sure all options are unselected and select all
+ cy.get(".ant-select-item-option").each($option => {
+ expect($option).not.to.have.class("ant-select-dropdown-menu-item-selected");
+ cy.wrap($option).click();
+ });
+
+ cy.getByTestId("QueryEditor").click(); // just to close the select menu
+
+ cy.getByTestId("ParameterApplyButton").click();
+
+ cy.getByTestId("TableVisualization").should("contain", '"1","2","3"');
+ });
+ });
+ });
+
+ const selectCalendarDate = date => {
+ cy.getByTestId("ParameterName-test-parameter")
+ .find("input")
+ .click();
+
+ cy.get(".ant-picker-panel")
+ .contains(".ant-picker-cell-inner", date)
+ .click();
+ };
+
+ describe("Date Parameter", () => {
+ beforeEach(() => {
+ const queryData = {
+ name: "Date Parameter",
+ query: "SELECT '{{test-parameter}}' AS parameter",
+ options: {
+ parameters: [{ name: "test-parameter", title: "Test Parameter", type: "date", value: null }],
+ },
+ };
+
+ const now = new Date();
+ now.setDate(1);
+ cy.wrap(now.getTime()).as("now");
+ cy.clock(now.getTime(), ["Date"]);
+
+ cy.createQuery(queryData, false).then(({ id }) => cy.visit(`/queries/${id}`));
+ });
+
+ afterEach(() => {
+ cy.clock().then(clock => clock.restore());
+ });
+
+ it("updates the results after selecting a date", function() {
+ selectCalendarDate("15");
+
+ cy.getByTestId("ParameterApplyButton").click();
+
+ cy.getByTestId("TableVisualization").should("contain", Cypress.moment(this.now).format("15/MM/YY"));
+ });
+
+ it("allows picking a dynamic date", function() {
+ cy.getByTestId("DynamicButton").click();
+
+ cy.getByTestId("DynamicButtonMenu")
+ .contains("Today/Now")
+ .click();
+
+ cy.getByTestId("ParameterApplyButton").click();
+
+ cy.getByTestId("TableVisualization").should("contain", Cypress.moment(this.now).format("DD/MM/YY"));
+ });
+
+ it("sets dirty state when edited", () => {
+ expectDirtyStateChange(() => selectCalendarDate("15"));
+ });
+ });
+
+ describe("Date and Time Parameter", () => {
+ beforeEach(() => {
+ const queryData = {
+ name: "Date and Time Parameter",
+ query: "SELECT '{{test-parameter}}' AS parameter",
+ options: {
+ parameters: [{ name: "test-parameter", title: "Test Parameter", type: "datetime-local", value: null }],
+ },
+ };
+
+ const now = new Date();
+ now.setDate(1);
+ cy.wrap(now.getTime()).as("now");
+ cy.clock(now.getTime(), ["Date"]);
+
+ cy.createQuery(queryData, false).then(({ id }) => cy.visit(`/queries/${id}`));
+ });
+
+ afterEach(() => {
+ cy.clock().then(clock => clock.restore());
+ });
+
+ it("updates the results after selecting a date and clicking in ok", function() {
+ cy.getByTestId("ParameterName-test-parameter")
+ .find("input")
+ .as("Input")
+ .click();
+
+ selectCalendarDate("15");
+
+ cy.get(".ant-picker-ok button").click();
+
+ cy.getByTestId("ParameterApplyButton").click();
+
+ cy.getByTestId("TableVisualization").should("contain", Cypress.moment(this.now).format("YYYY-MM-15 HH:mm"));
+ });
+
+ it("shows the current datetime after clicking in Now", function() {
+ cy.getByTestId("ParameterName-test-parameter")
+ .find("input")
+ .as("Input")
+ .click();
+
+ cy.get(".ant-picker-panel")
+ .contains("Now")
+ .click();
+
+ cy.getByTestId("ParameterApplyButton").click();
+
+ cy.getByTestId("TableVisualization").should("contain", Cypress.moment(this.now).format("YYYY-MM-DD HH:mm"));
+ });
+
+ it("allows picking a dynamic date", function() {
+ cy.getByTestId("DynamicButton").click();
+
+ cy.getByTestId("DynamicButtonMenu")
+ .contains("Today/Now")
+ .click();
+
+ cy.getByTestId("ParameterApplyButton").click();
+
+ cy.getByTestId("TableVisualization").should("contain", Cypress.moment(this.now).format("YYYY-MM-DD HH:mm"));
+ });
+
+ it("sets dirty state when edited", () => {
+ expectDirtyStateChange(() => {
+ cy.getByTestId("ParameterName-test-parameter")
+ .find("input")
+ .click();
+
+ cy.get(".ant-picker-panel")
+ .contains("Now")
+ .click();
+ });
+ });
+ });
+
+ describe("Date Range Parameter", () => {
+ const selectCalendarDateRange = (startDate, endDate) => {
+ cy.getByTestId("ParameterName-test-parameter")
+ .find("input")
+ .first()
+ .click();
+
+ cy.get(".ant-picker-panel")
+ .contains(".ant-picker-cell-inner", startDate)
+ .click();
+
+ cy.get(".ant-picker-panel")
+ .contains(".ant-picker-cell-inner", endDate)
+ .click();
+ };
+
+ beforeEach(() => {
+ const queryData = {
+ name: "Date Range Parameter",
+ query: "SELECT '{{test-parameter.start}} - {{test-parameter.end}}' AS parameter",
+ options: {
+ parameters: [{ name: "test-parameter", title: "Test Parameter", type: "date-range" }],
+ },
+ };
+
+ const now = new Date();
+ now.setDate(1);
+ cy.wrap(now.getTime()).as("now");
+ cy.clock(now.getTime(), ["Date"]);
+
+ cy.createQuery(queryData, false).then(({ id }) => cy.visit(`/queries/${id}/source`));
+ });
+
+ afterEach(() => {
+ cy.clock().then(clock => clock.restore());
+ });
+
+ it("updates the results after selecting a date range", function() {
+ selectCalendarDateRange("15", "20");
+
+ cy.getByTestId("ParameterApplyButton").click();
+
+ const now = Cypress.moment(this.now);
+ cy.getByTestId("TableVisualization").should(
+ "contain",
+ now.format("YYYY-MM-15") + " - " + now.format("YYYY-MM-20")
+ );
+ });
+
+ it("allows picking a dynamic date range", function() {
+ cy.getByTestId("DynamicButton").click();
+
+ cy.getByTestId("DynamicButtonMenu")
+ .contains("Last month")
+ .click();
+
+ cy.getByTestId("ParameterApplyButton").click();
+
+ const lastMonth = Cypress.moment(this.now).subtract(1, "month");
+ cy.getByTestId("TableVisualization").should(
+ "contain",
+ lastMonth.startOf("month").format("YYYY-MM-DD") + " - " + lastMonth.endOf("month").format("YYYY-MM-DD")
+ );
+ });
+
+ it("sets dirty state when edited", () => {
+ expectDirtyStateChange(() => selectCalendarDateRange("15", "20"));
+ });
+ });
+
+ describe("Apply Changes", () => {
+ const expectAppliedChanges = apply => {
+ cy.getByTestId("ParameterName-test-parameter-1")
+ .find("input")
+ .as("Input")
+ .type("Redash");
+
+ cy.getByTestId("ParameterName-test-parameter-2")
+ .find("input")
+ .type("Redash");
+
+ cy.location("search").should("not.contain", "Redash");
+
+ cy.server();
+ cy.route("POST", "**/api/queries/*/results").as("Results");
+
+ apply(cy.get("@Input"));
+
+ cy.location("search").should("contain", "Redash");
+ cy.wait("@Results");
+ };
+
+ beforeEach(() => {
+ const queryData = {
+ name: "Testing Apply Button",
+ query: "SELECT '{{test-parameter-1}} {{ test-parameter-2 }}'",
+ options: {
+ parameters: [
+ { name: "test-parameter-1", title: "Test Parameter 1", type: "text" },
+ { name: "test-parameter-2", title: "Test Parameter 2", type: "text" },
+ ],
+ },
+ };
+
+ cy.server();
+ cy.route("GET", "**/api/data_sources/*/schema").as("Schema");
+
+ cy.createQuery(queryData, false)
+ .then(({ id }) => cy.visit(`/queries/${id}/source`))
+ .then(() => cy.wait("@Schema"));
+ });
+
+ it("shows and hides according to parameter dirty state", () => {
+ cy.getByTestId("ParameterApplyButton").should("not.be", "visible");
+
+ cy.getByTestId("ParameterName-test-parameter-1")
+ .find("input")
+ .as("Param")
+ .type("Redash");
+
+ cy.getByTestId("ParameterApplyButton").should("be.visible");
+
+ cy.get("@Param").clear();
+
+ cy.getByTestId("ParameterApplyButton").should("not.be", "visible");
+ });
+
+ it("updates dirty counter", () => {
+ cy.getByTestId("ParameterName-test-parameter-1")
+ .find("input")
+ .type("Redash");
+
+ cy.getByTestId("ParameterApplyButton")
+ .find(".ant-badge-count p.current")
+ .should("contain", "1");
+
+ cy.getByTestId("ParameterName-test-parameter-2")
+ .find("input")
+ .type("Redash");
+
+ cy.getByTestId("ParameterApplyButton")
+ .find(".ant-badge-count p.current")
+ .should("contain", "2");
+ });
+
+ it('applies changes from "Apply Changes" button', () => {
+ expectAppliedChanges(() => {
+ cy.getByTestId("ParameterApplyButton").click();
+ });
+ });
+
+ it('applies changes from "alt+enter" keyboard shortcut', () => {
+ expectAppliedChanges(input => {
+ input.type("{alt}{enter}");
+ });
+ });
+
+ it('disables "Execute" button', () => {
+ cy.getByTestId("ParameterName-test-parameter-1")
+ .find("input")
+ .as("Input")
+ .type("Redash");
+ cy.getByTestId("ExecuteButton").should("be.disabled");
+
+ cy.get("@Input").clear();
+ cy.getByTestId("ExecuteButton").should("be.enabled");
+ });
+ });
+
+ describe("Draggable", () => {
+ beforeEach(() => {
+ const queryData = {
+ name: "Draggable",
+ query: "SELECT '{{param1}}', '{{param2}}', '{{param3}}', '{{param4}}' AS parameter",
+ options: {
+ parameters: [
+ { name: "param1", title: "Parameter 1", type: "text" },
+ { name: "param2", title: "Parameter 2", type: "text" },
+ { name: "param3", title: "Parameter 3", type: "text" },
+ { name: "param4", title: "Parameter 4", type: "text" },
+ ],
+ },
+ };
+
+ cy.createQuery(queryData, false).then(({ id }) => cy.visit(`/queries/${id}/source`));
+
+ cy.get(".parameter-block")
+ .first()
+ .invoke("width")
+ .as("paramWidth");
+
+ cy.get("body").type("{alt}D"); // hide schema browser
+ });
+
+ it("is possible to rearrange parameters", function() {
+ cy.server();
+ cy.route("POST", "**/api/queries/*").as("QuerySave");
+
+ dragParam("param1", this.paramWidth, 1);
+ cy.wait("@QuerySave");
+ dragParam("param4", -this.paramWidth, 1);
+ cy.wait("@QuerySave");
+
+ cy.reload();
+
+ const expectedOrder = ["Parameter 2", "Parameter 1", "Parameter 4", "Parameter 3"];
+ cy.get(".parameter-container label").each(($label, index) => expect($label).to.have.text(expectedOrder[index]));
+ });
+ });
+
+ describe("Parameter Settings", () => {
+ beforeEach(() => {
+ const queryData = {
+ name: "Draggable",
+ query: "SELECT '{{parameter}}' AS parameter",
+ options: {
+ parameters: [{ name: "parameter", title: "Parameter", type: "text" }],
+ },
+ };
+
+ cy.createQuery(queryData, false).then(({ id }) => cy.visit(`/queries/${id}/source`));
+
+ cy.getByTestId("ParameterSettings-parameter").click();
+ });
+
+ it("changes the parameter title", () => {
+ cy.getByTestId("ParameterTitleInput").type("{selectall}New Parameter Name");
+ cy.getByTestId("SaveParameterSettings").click();
+
+ cy.contains("Query saved");
+ cy.reload();
+
+ cy.getByTestId("ParameterName-parameter").contains("label", "New Parameter Name");
+ });
+ });
+});
diff --git a/client/cypress/integration/query/query_tags_spec.js b/client/cypress/integration/query/query_tags_spec.js
new file mode 100644
index 000000000..0c8e01099
--- /dev/null
+++ b/client/cypress/integration/query/query_tags_spec.js
@@ -0,0 +1,37 @@
+import { expectTagsToContain, typeInTagsSelectAndSave } from "../../support/tags";
+
+describe("Query Tags", () => {
+ beforeEach(() => {
+ cy.login();
+
+ const queryData = {
+ name: "Query Tags",
+ query: "SELECT 1 as value",
+ };
+
+ cy.createQuery(queryData, false).then(({ id }) => cy.visit(`/queries/${id}`));
+ });
+
+ it("is possible to add and edit tags", () => {
+ cy.server();
+ cy.route("POST", "**/api/queries/*").as("QuerySave");
+
+ cy.getByTestId("TagsControl").contains(".label", "Unpublished");
+
+ cy.getByTestId("EditTagsButton")
+ .should("contain", "Add tag")
+ .click();
+
+ typeInTagsSelectAndSave("tag1{enter}tag2{enter}tag3{enter}");
+
+ cy.wait("@QuerySave");
+ expectTagsToContain(["tag1", "tag2", "tag3"]);
+
+ cy.getByTestId("EditTagsButton").click();
+ typeInTagsSelectAndSave("tag4{enter}");
+
+ cy.wait("@QuerySave");
+ cy.reload();
+ expectTagsToContain(["tag1", "tag2", "tag3", "tag4"]);
+ });
+});
diff --git a/client/cypress/integration/settings/organization_settings_spec.js b/client/cypress/integration/settings/organization_settings_spec.js
new file mode 100644
index 000000000..8318d7028
--- /dev/null
+++ b/client/cypress/integration/settings/organization_settings_spec.js
@@ -0,0 +1,45 @@
+describe("Settings", () => {
+ beforeEach(() => {
+ cy.login();
+ cy.visit("/settings/general");
+ });
+
+ it("renders the page and takes a screenshot", () => {
+ cy.getByTestId("OrganizationSettings").within(() => {
+ cy.getByTestId("TimeFormatSelect").should("contain", "HH:mm");
+ });
+
+ cy.percySnapshot("Organization Settings");
+ });
+
+ it("can set date format setting", () => {
+ cy.getByTestId("DateFormatSelect").click();
+ cy.getByTestId("DateFormatSelect:YYYY-MM-DD").click();
+ cy.getByTestId("OrganizationSettingsSaveButton").click();
+
+ cy.createQuery({
+ name: "test date format",
+ query: "SELECT NOW()",
+ }).then(({ id: queryId }) => {
+ cy.visit(`/queries/${queryId}`);
+ cy.findByText("Refresh Now").click();
+
+ // "created at" field is formatted with the date format.
+ cy.getByTestId("TableVisualization")
+ .findAllByText(/\d{4}-\d{2}-\d{2}/)
+ .should("exist");
+
+ // set to a different format and expect a different result in the table
+ cy.visit("/settings/general");
+ cy.getByTestId("DateFormatSelect").click();
+ cy.getByTestId("DateFormatSelect:MM/DD/YY").click();
+ cy.getByTestId("OrganizationSettingsSaveButton").click();
+
+ cy.visit(`/queries/${queryId}`);
+
+ cy.getByTestId("TableVisualization")
+ .findAllByText(/\d{2}\/\d{2}\/\d{2}/)
+ .should("exist");
+ });
+ });
+});
diff --git a/client/cypress/integration/settings/settings_tabs_spec.js b/client/cypress/integration/settings/settings_tabs_spec.js
new file mode 100644
index 000000000..d67886b53
--- /dev/null
+++ b/client/cypress/integration/settings/settings_tabs_spec.js
@@ -0,0 +1,58 @@
+describe("Settings Tabs", () => {
+ const regularUser = {
+ name: "Example User",
+ email: "user@redash.io",
+ password: "password",
+ };
+
+ const userTabs = ["Users", "Groups", "Query Snippets", "Account"];
+ const adminTabs = ["Data Sources", "Alert Destinations", "General"];
+
+ const expectSettingsTabsToBe = expectedTabs =>
+ cy.getByTestId("SettingsScreenItem").then($list => {
+ const listedPages = $list.toArray().map(el => el.text);
+ expect(listedPages).to.have.members(expectedTabs);
+ });
+
+ before(() => {
+ cy.login().then(() => cy.createUser(regularUser));
+ });
+
+ describe("For admin user", () => {
+ beforeEach(() => {
+ cy.logout();
+ cy.login();
+ cy.visit("/");
+ });
+
+ it("settings link should lead to Data Sources settings", () => {
+ cy.getByTestId("SettingsLink")
+ .should("exist")
+ .should("have.attr", "href", "data_sources");
+ });
+
+ it("all tabs should be available", () => {
+ cy.getByTestId("SettingsLink").click();
+ expectSettingsTabsToBe([...userTabs, ...adminTabs]);
+ });
+ });
+
+ describe("For regular user", () => {
+ beforeEach(() => {
+ cy.logout();
+ cy.login(regularUser.email, regularUser.password);
+ cy.visit("/");
+ });
+
+ it("settings link should lead to Users settings", () => {
+ cy.getByTestId("SettingsLink")
+ .should("exist")
+ .should("have.attr", "href", "users");
+ });
+
+ it("limited set of settings tabs should be available", () => {
+ cy.getByTestId("SettingsLink").click();
+ expectSettingsTabsToBe(userTabs);
+ });
+ });
+});
diff --git a/client/cypress/integration/user/create_user_spec.js b/client/cypress/integration/user/create_user_spec.js
new file mode 100644
index 000000000..0b2e5b60b
--- /dev/null
+++ b/client/cypress/integration/user/create_user_spec.js
@@ -0,0 +1,28 @@
+describe("Create User", () => {
+ beforeEach(() => {
+ cy.login();
+ cy.visit("/users/new");
+ });
+
+ const fillUserFormAndSubmit = (name, email) => {
+ cy.getByTestId("CreateUserDialog").within(() => {
+ cy.getByTestId("Name").type(name);
+ cy.getByTestId("Email").type(email);
+ });
+ cy.getByTestId("SaveUserButton").click();
+ };
+
+ it("creates a new user", () => {
+ // delete existing "new-user@redash.io"
+ cy.request("GET", "api/users?q=new-user")
+ .then(({ body }) => body.results.filter(user => user.email === "new-user@redash.io"))
+ .each(user => cy.request("DELETE", `api/users/${user.id}`));
+
+ fillUserFormAndSubmit("New User", "admin@redash.io");
+
+ cy.getByTestId("CreateUserErrorAlert").should("contain", "Email already taken");
+
+ fillUserFormAndSubmit("{selectall}New User", "{selectall}new-user@redash.io");
+ cy.contains("Saved.");
+ });
+});
diff --git a/client/cypress/integration/user/edit_profile_spec.js b/client/cypress/integration/user/edit_profile_spec.js
new file mode 100644
index 000000000..baf0e7b09
--- /dev/null
+++ b/client/cypress/integration/user/edit_profile_spec.js
@@ -0,0 +1,71 @@
+function fillProfileDataAndSave(name, email) {
+ cy.getByTestId("Name").type(`{selectall}${name}`);
+ cy.getByTestId("Email").type(`{selectall}${email}{enter}`);
+ cy.contains("Saved.");
+}
+
+function fillChangePasswordAndSave(currentPassword, newPassword, repeatPassword) {
+ cy.getByTestId("CurrentPassword").type(currentPassword);
+ cy.getByTestId("NewPassword").type(newPassword);
+ cy.getByTestId("RepeatPassword").type(`${repeatPassword}{enter}`);
+}
+
+describe("Edit Profile", () => {
+ beforeEach(() => {
+ cy.login();
+ cy.visit("/users/me");
+ });
+
+ it("updates the user after Save", () => {
+ fillProfileDataAndSave("Jian Yang", "jian.yang@redash.io");
+ cy.logout();
+ cy.login("jian.yang@redash.io")
+ .its("status")
+ .should("eq", 200);
+ cy.visit("/users/me");
+ cy.contains("Jian Yang");
+ fillProfileDataAndSave("Example Admin", "admin@redash.io");
+ });
+
+ it("regenerates API Key", () => {
+ cy.getByTestId("ApiKey").then($apiKey => {
+ const previousApiKey = $apiKey.val();
+
+ cy.getByTestId("RegenerateApiKey").click();
+ cy.get(".ant-btn-primary")
+ .contains("Regenerate")
+ .click({ force: true });
+
+ cy.getByTestId("ApiKey").should("not.eq", previousApiKey);
+ });
+ });
+
+ it("renders the page and takes a screenshot", () => {
+ cy.getByTestId("Groups").should("contain", "admin");
+ cy.percySnapshot("User Profile");
+ });
+
+ context("changing password", () => {
+ beforeEach(() => {
+ cy.getByTestId("ChangePassword").click();
+ });
+
+ it("updates user password when password is correct", () => {
+ fillChangePasswordAndSave("password", "newpassword", "newpassword");
+ cy.contains("Saved.");
+ cy.logout();
+ cy.login(undefined, "newpassword")
+ .its("status")
+ .should("eq", 200);
+ cy.visit("/users/me");
+ cy.getByTestId("ChangePassword").click();
+ fillChangePasswordAndSave("newpassword", "password", "password");
+ cy.contains("Saved.");
+ });
+
+ it("shows an error when current password is wrong", () => {
+ fillChangePasswordAndSave("wrongpassword", "newpassword", "newpassword");
+ cy.contains("Incorrect current password.");
+ });
+ });
+});
diff --git a/client/cypress/integration/user/login_spec.js b/client/cypress/integration/user/login_spec.js
new file mode 100644
index 000000000..77a59a078
--- /dev/null
+++ b/client/cypress/integration/user/login_spec.js
@@ -0,0 +1,30 @@
+describe("Login", () => {
+ beforeEach(() => {
+ cy.visit("/login");
+ });
+
+ it("greets the user and take a screenshot", () => {
+ cy.contains("h3", "Login to Redash");
+
+ cy.wait(1000); // eslint-disable-line cypress/no-unnecessary-waiting
+ cy.percySnapshot("Login");
+ });
+
+ it("shows message on failed login", () => {
+ cy.getByTestId("Email").type("admin@redash.io");
+ cy.getByTestId("Password").type("wrongpassword{enter}");
+
+ cy.getByTestId("ErrorMessage").should("contain", "Wrong email or password.");
+ });
+
+ it("navigates to homepage with successful login", () => {
+ cy.getByTestId("Email").type("admin@redash.io");
+ cy.getByTestId("Password").type("password{enter}");
+
+ cy.title().should("eq", "Redash");
+ cy.get(`img.profile__image_thumb[alt="Example Admin"]`).should("exist");
+
+ cy.wait(1000); // eslint-disable-line cypress/no-unnecessary-waiting
+ cy.percySnapshot("Homepage");
+ });
+});
diff --git a/client/cypress/integration/user/logout_spec.js b/client/cypress/integration/user/logout_spec.js
new file mode 100644
index 000000000..069c73a7f
--- /dev/null
+++ b/client/cypress/integration/user/logout_spec.js
@@ -0,0 +1,17 @@
+describe("Logout", () => {
+ beforeEach(() => {
+ cy.login();
+ cy.visit("/");
+ });
+
+ it("shows login page after logout", () => {
+ cy.getByTestId("ProfileDropdown").click();
+ // Wait until submenu appears and become interactive
+ cy.wait(500); // eslint-disable-line cypress/no-unnecessary-waiting
+ cy.getByTestId("LogOutButton")
+ .should("be.visible")
+ .click();
+
+ cy.title().should("eq", "Login to Redash");
+ });
+});
diff --git a/client/cypress/integration/user/user_list_spec.js b/client/cypress/integration/user/user_list_spec.js
new file mode 100644
index 000000000..5afe994e6
--- /dev/null
+++ b/client/cypress/integration/user/user_list_spec.js
@@ -0,0 +1,14 @@
+describe("User List", () => {
+ beforeEach(() => {
+ cy.login();
+ cy.visit("/users");
+ });
+
+ it("renders the page and takes a screenshot", () => {
+ cy.getByTestId("UserList")
+ .should("exist")
+ .and("contain", "Example Admin");
+
+ cy.percySnapshot("Users");
+ });
+});
diff --git a/client/cypress/integration/visualizations/box_plot_spec.js b/client/cypress/integration/visualizations/box_plot_spec.js
new file mode 100644
index 000000000..84cb9f463
--- /dev/null
+++ b/client/cypress/integration/visualizations/box_plot_spec.js
@@ -0,0 +1,70 @@
+/* global cy, Cypress */
+
+const SQL = `
+ SELECT 12 AS mn, 4967 AS mx UNION ALL
+ SELECT 10 AS mn, 19430 AS mx UNION ALL
+ SELECT 3132 AS mn, 3275 AS mx UNION ALL
+ SELECT 2 AS mn, 19429 AS mx UNION ALL
+ SELECT 7 AS mn, 19433 AS mx UNION ALL
+ SELECT 4824 AS mn, 4824 AS mx UNION ALL
+ SELECT 11353 AS mn, 16565 AS mx UNION ALL
+ SELECT 551 AS mn, 19415 AS mx UNION ALL
+ SELECT 307 AS mn, 17918 AS mx UNION ALL
+ SELECT 25 AS mn, 19436 AS mx UNION ALL
+ SELECT 98 AS mn, 19230 AS mx UNION ALL
+ SELECT 1652 AS mn, 1667 AS mx UNION ALL
+ SELECT 4486 AS mn, 4486 AS mx UNION ALL
+ SELECT 5113 AS mn, 5120 AS mx UNION ALL
+ SELECT 1642 AS mn, 1678 AS mx UNION ALL
+ SELECT 1632 AS mn, 16183 AS mx UNION ALL
+ SELECT 8 AS mn, 19434 AS mx UNION ALL
+ SELECT 13149 AS mn, 16945 AS mx UNION ALL
+ SELECT 340 AS mn, 340 AS mx UNION ALL
+ SELECT 15495 AS mn, 16559 AS mx UNION ALL
+ SELECT 24 AS mn, 19266 AS mx UNION ALL
+ SELECT 532 AS mn, 19283 AS mx UNION ALL
+ SELECT 4958 AS mn, 4958 AS mx UNION ALL
+ SELECT 10078 AS mn, 10079 AS mx UNION ALL
+ SELECT 102 AS mn, 17895 AS mx UNION ALL
+ SELECT 5366 AS mn, 18463 AS mx UNION ALL
+ SELECT 11363 AS mn, 16552 AS mx UNION ALL
+ SELECT 1 AS mn, 5211 AS mx UNION ALL
+ SELECT 6 AS mn, 19431 AS mx UNION ALL
+ SELECT 11378 AS mn, 16946 AS mx UNION ALL
+ SELECT 4676 AS mn, 4944 AS mx UNION ALL
+ SELECT 5228 AS mn, 18466 AS mx
+`;
+
+describe("Box Plot", () => {
+ const viewportWidth = Cypress.config("viewportWidth");
+
+ beforeEach(() => {
+ cy.login();
+ cy.createQuery({ query: SQL })
+ .then(({ id }) => cy.createVisualization(id, "BOXPLOT", "Boxplot (Deprecated)", {}))
+ .then(({ id: visualizationId, query_id: queryId }) => {
+ cy.visit(`queries/${queryId}/source#${visualizationId}`);
+ cy.getByTestId("ExecuteButton").click();
+ });
+ });
+
+ it("creates visualization", () => {
+ cy.clickThrough(`
+ EditVisualization
+ `);
+
+ cy.fillInputs({
+ "BoxPlot.XAxisLabel": "X Axis",
+ "BoxPlot.YAxisLabel": "Y Axis",
+ });
+
+ // Wait for proper initialization of visualization
+ cy.wait(500); // eslint-disable-line cypress/no-unnecessary-waiting
+
+ cy.getByTestId("VisualizationPreview")
+ .find("svg")
+ .should("exist");
+
+ cy.percySnapshot("Visualizations - Box Plot", { widths: [viewportWidth] });
+ });
+});
diff --git a/client/cypress/integration/visualizations/chart_spec.js b/client/cypress/integration/visualizations/chart_spec.js
new file mode 100644
index 000000000..830023ce5
--- /dev/null
+++ b/client/cypress/integration/visualizations/chart_spec.js
@@ -0,0 +1,110 @@
+/* global cy */
+
+import { getWidgetTestId } from "../../support/dashboard";
+import {
+ assertAxesAndAddLabels,
+ assertPlotPreview,
+ assertTabbedEditor,
+ createChartThroughUI,
+ createDashboardWithCharts,
+} from "../../support/visualizations/chart";
+
+const SQL = `
+ SELECT 'a' AS stage, 11 AS value1, 22 AS value2 UNION ALL
+ SELECT 'a' AS stage, 12 AS value1, 41 AS value2 UNION ALL
+ SELECT 'a' AS stage, 45 AS value1, 93 AS value2 UNION ALL
+ SELECT 'a' AS stage, 54 AS value1, 79 AS value2 UNION ALL
+ SELECT 'b' AS stage, 33 AS value1, 65 AS value2 UNION ALL
+ SELECT 'b' AS stage, 73 AS value1, 50 AS value2 UNION ALL
+ SELECT 'b' AS stage, 90 AS value1, 40 AS value2 UNION ALL
+ SELECT 'c' AS stage, 19 AS value1, 33 AS value2 UNION ALL
+ SELECT 'c' AS stage, 92 AS value1, 14 AS value2 UNION ALL
+ SELECT 'c' AS stage, 63 AS value1, 65 AS value2 UNION ALL
+ SELECT 'c' AS stage, 44 AS value1, 27 AS value2\
+`;
+
+describe("Chart", () => {
+ beforeEach(() => {
+ cy.login();
+ cy.createQuery({ name: "Chart Visualization", query: SQL })
+ .its("id")
+ .as("queryId");
+ });
+
+ it("creates Bar charts", function() {
+ cy.visit(`queries/${this.queryId}/source`);
+ cy.getByTestId("ExecuteButton").click();
+
+ const getBarChartAssertionFunction = (specificBarChartAssertionFn = () => {}) => () => {
+ // checks for TabbedEditor standard tabs
+ assertTabbedEditor();
+
+ // standard chart should be bar
+ cy.getByTestId("Chart.GlobalSeriesType").contains(".ant-select-selection-item", "Bar");
+
+ // checks the plot canvas exists and is empty
+ assertPlotPreview("not.exist");
+
+ // creates a chart and checks it is plotted
+ cy.getByTestId("Chart.ColumnMapping.x").selectAntdOption("Chart.ColumnMapping.x.stage");
+ cy.getByTestId("Chart.ColumnMapping.y").selectAntdOption("Chart.ColumnMapping.y.value1");
+ cy.getByTestId("Chart.ColumnMapping.y").selectAntdOption("Chart.ColumnMapping.y.value2");
+ assertPlotPreview("exist");
+
+ specificBarChartAssertionFn();
+ };
+
+ const chartTests = [
+ {
+ name: "Basic Bar Chart",
+ alias: "basicBarChart",
+ assertionFn: () => {
+ assertAxesAndAddLabels("Stage", "Value");
+ },
+ },
+ {
+ name: "Horizontal Bar Chart",
+ alias: "horizontalBarChart",
+ assertionFn: () => {
+ cy.getByTestId("Chart.SwappedAxes").check();
+ cy.getByTestId("VisualizationEditor.Tabs.XAxis").should("have.text", "Y Axis");
+ cy.getByTestId("VisualizationEditor.Tabs.YAxis").should("have.text", "X Axis");
+ },
+ },
+ {
+ name: "Stacked Bar Chart",
+ alias: "stackedBarChart",
+ assertionFn: () => {
+ cy.getByTestId("Chart.Stacking").selectAntdOption("Chart.Stacking.Stack");
+ },
+ },
+ {
+ name: "Normalized Bar Chart",
+ alias: "normalizedBarChart",
+ assertionFn: () => {
+ cy.getByTestId("Chart.NormalizeValues").check();
+ },
+ },
+ ];
+
+ chartTests.forEach(({ name, alias, assertionFn }) => {
+ createChartThroughUI(name, getBarChartAssertionFunction(assertionFn)).as(alias);
+ });
+
+ const chartGetters = chartTests.map(({ alias }) => alias);
+
+ const withDashboardWidgetsAssertionFn = (widgetGetters, dashboardUrl) => {
+ cy.visit(dashboardUrl);
+ widgetGetters.forEach(widgetGetter => {
+ cy.get(`@${widgetGetter}`).then(widget => {
+ cy.getByTestId(getWidgetTestId(widget)).within(() => {
+ cy.get("g.points").should("exist");
+ });
+ });
+ });
+ };
+
+ createDashboardWithCharts("Bar chart visualizations", chartGetters, withDashboardWidgetsAssertionFn);
+ cy.percySnapshot("Visualizations - Charts - Bar");
+ });
+});
diff --git a/client/cypress/integration/visualizations/choropleth_spec.js b/client/cypress/integration/visualizations/choropleth_spec.js
new file mode 100644
index 000000000..100f26161
--- /dev/null
+++ b/client/cypress/integration/visualizations/choropleth_spec.js
@@ -0,0 +1,85 @@
+/* global cy */
+
+const SQL = `
+ SELECT 'AR' AS "code", 'Argentina' AS "name", 37.62 AS "value" UNION ALL
+ SELECT 'AU' AS "code", 'Australia' AS "name", 37.62 AS "value" UNION ALL
+ SELECT 'AT' AS "code", 'Austria' AS "name", 42.62 AS "value" UNION ALL
+ SELECT 'BE' AS "code", 'Belgium' AS "name", 37.62 AS "value" UNION ALL
+ SELECT 'BR' AS "code", 'Brazil' AS "name", 190.10 AS "value" UNION ALL
+ SELECT 'CA' AS "code", 'Canada' AS "name", 303.96 AS "value" UNION ALL
+ SELECT 'CL' AS "code", 'Chile' AS "name", 46.62 AS "value" UNION ALL
+ SELECT 'CZ' AS "code", 'Czech Republic' AS "name", 90.24 AS "value" UNION ALL
+ SELECT 'DK' AS "code", 'Denmark' AS "name", 37.62 AS "value" UNION ALL
+ SELECT 'FI' AS "code", 'Finland' AS "name", 41.62 AS "value" UNION ALL
+ SELECT 'FR' AS "code", 'France' AS "name", 195.10 AS "value" UNION ALL
+ SELECT 'DE' AS "code", 'Germany' AS "name", 156.48 AS "value" UNION ALL
+ SELECT 'HU' AS "code", 'Hungary' AS "name", 45.62 AS "value" UNION ALL
+ SELECT 'IN' AS "code", 'India' AS "name", 75.26 AS "value" UNION ALL
+ SELECT 'IE' AS "code", 'Ireland' AS "name", 45.62 AS "value" UNION ALL
+ SELECT 'IT' AS "code", 'Italy' AS "name", 37.62 AS "value" UNION ALL
+ SELECT 'NL' AS "code", 'Netherlands' AS "name", 40.62 AS "value" UNION ALL
+ SELECT 'NO' AS "code", 'Norway' AS "name", 39.62 AS "value" UNION ALL
+ SELECT 'PL' AS "code", 'Poland' AS "name", 37.62 AS "value" UNION ALL
+ SELECT 'PT' AS "code", 'Portugal' AS "name", 77.24 AS "value" UNION ALL
+ SELECT 'ES' AS "code", 'Spain' AS "name", 37.62 AS "value" UNION ALL
+ SELECT 'SE' AS "code", 'Sweden' AS "name", 38.62 AS "value" UNION ALL
+ SELECT 'US' AS "code", 'USA' AS "name", 523.06 AS "value" UNION ALL
+ SELECT 'GB' AS "code", 'United Kingdom' AS "name", 112.86 AS "value"
+`;
+
+describe("Choropleth", () => {
+ const viewportWidth = Cypress.config("viewportWidth");
+
+ beforeEach(() => {
+ cy.login();
+ cy.createQuery({ query: SQL }).then(({ id }) => {
+ cy.visit(`queries/${id}/source`);
+ cy.getByTestId("ExecuteButton").click();
+ });
+ cy.getByTestId("NewVisualization").click();
+ cy.getByTestId("VisualizationType").selectAntdOption("VisualizationType.CHOROPLETH");
+ });
+
+ it("creates visualization", () => {
+ cy.clickThrough(`
+ VisualizationEditor.Tabs.General
+ Choropleth.Editor.MapType
+ Choropleth.Editor.MapType.countries
+ Choropleth.Editor.KeyColumn
+ Choropleth.Editor.KeyColumn.name
+ Choropleth.Editor.TargetField
+ Choropleth.Editor.TargetField.name
+ Choropleth.Editor.ValueColumn
+ Choropleth.Editor.ValueColumn.value
+ `);
+
+ cy.clickThrough("VisualizationEditor.Tabs.Colors");
+ cy.clickThrough("Choropleth.Editor.Colors.Min");
+ cy.fillInputs({ "ColorPicker.CustomColor": "yellow{enter}" });
+ cy.getByTestId("ColorPicker.CustomColor").should("not.be.visible");
+ cy.clickThrough("Choropleth.Editor.Colors.Max");
+ cy.fillInputs({ "ColorPicker.CustomColor": "red{enter}" });
+ cy.getByTestId("ColorPicker.CustomColor").should("not.be.visible");
+ cy.clickThrough("Choropleth.Editor.Colors.Borders");
+ cy.fillInputs({ "ColorPicker.CustomColor": "black{enter}" });
+ cy.getByTestId("ColorPicker.CustomColor").should("not.be.visible");
+
+ cy.clickThrough(`
+ VisualizationEditor.Tabs.Format
+ Choropleth.Editor.LegendPosition
+ Choropleth.Editor.LegendPosition.TopRight
+ `);
+
+ cy.getByTestId("Choropleth.Editor.LegendTextAlignment")
+ .find('[data-test="TextAlignmentSelect.Left"]')
+ .check({ force: true });
+
+ // Wait for proper initialization of visualization
+ cy.wait(500); // eslint-disable-line cypress/no-unnecessary-waiting
+ cy.getByTestId("VisualizationPreview")
+ .find(".map-visualization-container.leaflet-container")
+ .should("exist");
+
+ cy.percySnapshot("Visualizations - Choropleth", { widths: [viewportWidth] });
+ });
+});
diff --git a/client/cypress/integration/visualizations/cohort_spec.js b/client/cypress/integration/visualizations/cohort_spec.js
new file mode 100644
index 000000000..e889157ea
--- /dev/null
+++ b/client/cypress/integration/visualizations/cohort_spec.js
@@ -0,0 +1,72 @@
+/* global cy, Cypress */
+
+const SQL = `
+ SELECT '2019-01-01' AS "date", 21 AS "bucket", 5 AS "value", 1 AS "stage" UNION ALL
+ SELECT '2019-01-01' AS "date", 21 AS "bucket", 8 AS "value", 2 AS "stage" UNION ALL
+ SELECT '2019-01-01' AS "date", 21 AS "bucket", 2 AS "value", 3 AS "stage" UNION ALL
+ SELECT '2019-01-01' AS "date", 21 AS "bucket", 6 AS "value", 4 AS "stage" UNION ALL
+
+ SELECT '2019-02-01' AS "date", 10 AS "bucket", 7 AS "value", 1 AS "stage" UNION ALL
+ SELECT '2019-02-01' AS "date", 10 AS "bucket", 3 AS "value", 3 AS "stage" UNION ALL
+
+ SELECT '2019-03-01' AS "date", 19 AS "bucket", 4 AS "value", 1 AS "stage" UNION ALL
+ SELECT '2019-03-01' AS "date", 19 AS "bucket", 7 AS "value", 2 AS "stage" UNION ALL
+ SELECT '2019-03-01' AS "date", 19 AS "bucket", 8 AS "value", 3 AS "stage" UNION ALL
+
+ SELECT '2019-05-01' AS "date", 15 AS "bucket", 13 AS "value", 1 AS "stage" UNION ALL
+ SELECT '2019-05-01' AS "date", 15 AS "bucket", 2 AS "value", 4 AS "stage"
+`;
+
+describe("Cohort", () => {
+ const viewportWidth = Cypress.config("viewportWidth");
+
+ beforeEach(() => {
+ cy.login();
+ cy.createQuery({ query: SQL }).then(({ id }) => {
+ cy.visit(`queries/${id}/source`);
+ cy.getByTestId("ExecuteButton").click();
+ });
+ cy.getByTestId("NewVisualization").click();
+ cy.getByTestId("VisualizationType").selectAntdOption("VisualizationType.COHORT");
+ });
+
+ it("creates visualization", () => {
+ cy.clickThrough(`
+ VisualizationEditor.Tabs.Options
+ Cohort.TimeInterval
+ Cohort.TimeInterval.monthly
+ Cohort.Mode
+ Cohort.Mode.simple
+
+ VisualizationEditor.Tabs.Columns
+ Cohort.DateColumn
+ Cohort.DateColumn.date
+ Cohort.StageColumn
+ Cohort.StageColumn.stage
+ Cohort.TotalColumn
+ Cohort.TotalColumn.bucket
+ Cohort.ValueColumn
+ Cohort.ValueColumn.value
+ `);
+
+ // Wait for proper initialization of visualization
+ cy.wait(500); // eslint-disable-line cypress/no-unnecessary-waiting
+ cy.getByTestId("VisualizationPreview")
+ .find("table")
+ .should("exist");
+ cy.percySnapshot("Visualizations - Cohort (simple)", { widths: [viewportWidth] });
+
+ cy.clickThrough(`
+ VisualizationEditor.Tabs.Options
+ Cohort.Mode
+ Cohort.Mode.diagonal
+ `);
+
+ // Wait for proper initialization of visualization
+ cy.wait(500); // eslint-disable-line cypress/no-unnecessary-waiting
+ cy.getByTestId("VisualizationPreview")
+ .find("table")
+ .should("exist");
+ cy.percySnapshot("Visualizations - Cohort (diagonal)", { widths: [viewportWidth] });
+ });
+});
diff --git a/client/cypress/integration/visualizations/counter_spec.js b/client/cypress/integration/visualizations/counter_spec.js
new file mode 100644
index 000000000..6ff573fb5
--- /dev/null
+++ b/client/cypress/integration/visualizations/counter_spec.js
@@ -0,0 +1,191 @@
+/* global cy, Cypress */
+
+const SQL = `
+ SELECT 27182.8182846 AS a, 20000 AS b, 'lorem' AS c UNION ALL
+ SELECT 31415.9265359 AS a, 40000 AS b, 'ipsum' AS c
+`;
+
+describe("Counter", () => {
+ const viewportWidth = Cypress.config("viewportWidth");
+
+ beforeEach(() => {
+ cy.login();
+ cy.createQuery({ query: SQL }).then(({ id }) => {
+ cy.visit(`queries/${id}/source`);
+ cy.getByTestId("ExecuteButton").click();
+ });
+ cy.getByTestId("NewVisualization").click();
+ cy.getByTestId("VisualizationType").selectAntdOption("VisualizationType.COUNTER");
+ });
+
+ it("creates simple Counter", () => {
+ cy.clickThrough(`
+ Counter.General.ValueColumn
+ Counter.General.ValueColumn.a
+ `);
+
+ cy.getByTestId("VisualizationPreview")
+ .find(".counter-visualization-container")
+ .should("exist");
+
+ // wait a bit before taking snapshot
+ cy.wait(500); // eslint-disable-line cypress/no-unnecessary-waiting
+ cy.percySnapshot("Visualizations - Counter (with defaults)", { widths: [viewportWidth] });
+ });
+
+ it("creates Counter with custom label", () => {
+ cy.clickThrough(`
+ Counter.General.ValueColumn
+ Counter.General.ValueColumn.a
+ `);
+
+ cy.fillInputs({
+ "Counter.General.Label": "Custom Label",
+ });
+
+ cy.getByTestId("VisualizationPreview")
+ .find(".counter-visualization-container")
+ .should("exist");
+
+ // wait a bit before taking snapshot
+ cy.wait(500); // eslint-disable-line cypress/no-unnecessary-waiting
+ cy.percySnapshot("Visualizations - Counter (custom label)", { widths: [viewportWidth] });
+ });
+
+ it("creates Counter with non-numeric value", () => {
+ cy.clickThrough(`
+ Counter.General.ValueColumn
+ Counter.General.ValueColumn.c
+
+ Counter.General.TargetValueColumn
+ Counter.General.TargetValueColumn.c
+ `);
+
+ cy.fillInputs({
+ "Counter.General.TargetValueRowNumber": "2",
+ });
+
+ cy.getByTestId("VisualizationPreview")
+ .find(".counter-visualization-container")
+ .should("exist");
+
+ // wait a bit before taking snapshot
+ cy.wait(500); // eslint-disable-line cypress/no-unnecessary-waiting
+ cy.percySnapshot("Visualizations - Counter (non-numeric value)", { widths: [viewportWidth] });
+ });
+
+ it("creates Counter with target value (trend positive)", () => {
+ cy.clickThrough(`
+ Counter.General.ValueColumn
+ Counter.General.ValueColumn.a
+
+ Counter.General.TargetValueColumn
+ Counter.General.TargetValueColumn.b
+ `);
+
+ cy.getByTestId("VisualizationPreview")
+ .find(".counter-visualization-container")
+ .should("exist");
+
+ // wait a bit before taking snapshot
+ cy.wait(500); // eslint-disable-line cypress/no-unnecessary-waiting
+ cy.percySnapshot("Visualizations - Counter (target value + trend positive)", { widths: [viewportWidth] });
+ });
+
+ it("creates Counter with custom row number (trend negative)", () => {
+ cy.clickThrough(`
+ Counter.General.ValueColumn
+ Counter.General.ValueColumn.a
+
+ Counter.General.TargetValueColumn
+ Counter.General.TargetValueColumn.b
+ `);
+
+ cy.fillInputs({
+ "Counter.General.ValueRowNumber": "2",
+ "Counter.General.TargetValueRowNumber": "2",
+ });
+
+ cy.getByTestId("VisualizationPreview")
+ .find(".counter-visualization-container")
+ .should("exist");
+
+ // wait a bit before taking snapshot
+ cy.wait(500); // eslint-disable-line cypress/no-unnecessary-waiting
+ cy.percySnapshot("Visualizations - Counter (row number + trend negative)", { widths: [viewportWidth] });
+ });
+
+ it("creates Counter with count rows", () => {
+ cy.clickThrough(`
+ Counter.General.ValueColumn
+ Counter.General.ValueColumn.a
+
+ Counter.General.CountRows
+ `);
+
+ cy.getByTestId("VisualizationPreview")
+ .find(".counter-visualization-container")
+ .should("exist");
+
+ // wait a bit before taking snapshot
+ cy.wait(500); // eslint-disable-line cypress/no-unnecessary-waiting
+ cy.percySnapshot("Visualizations - Counter (count rows)", { widths: [viewportWidth] });
+ });
+
+ it("creates Counter with formatting", () => {
+ cy.clickThrough(`
+ Counter.General.ValueColumn
+ Counter.General.ValueColumn.a
+
+ Counter.General.TargetValueColumn
+ Counter.General.TargetValueColumn.b
+
+ VisualizationEditor.Tabs.Format
+ `);
+
+ cy.fillInputs({
+ "Counter.Formatting.DecimalPlace": "4",
+ "Counter.Formatting.DecimalCharacter": ",",
+ "Counter.Formatting.ThousandsSeparator": "`",
+ "Counter.Formatting.StringPrefix": "$",
+ "Counter.Formatting.StringSuffix": "%",
+ });
+
+ cy.getByTestId("VisualizationPreview")
+ .find(".counter-visualization-container")
+ .should("exist");
+
+ // wait a bit before taking snapshot
+ cy.wait(500); // eslint-disable-line cypress/no-unnecessary-waiting
+ cy.percySnapshot("Visualizations - Counter (custom formatting)", { widths: [viewportWidth] });
+ });
+
+ it("creates Counter with target value formatting", () => {
+ cy.clickThrough(`
+ Counter.General.ValueColumn
+ Counter.General.ValueColumn.a
+
+ Counter.General.TargetValueColumn
+ Counter.General.TargetValueColumn.b
+
+ VisualizationEditor.Tabs.Format
+ Counter.Formatting.FormatTargetValue
+ `);
+
+ cy.fillInputs({
+ "Counter.Formatting.DecimalPlace": "4",
+ "Counter.Formatting.DecimalCharacter": ",",
+ "Counter.Formatting.ThousandsSeparator": "`",
+ "Counter.Formatting.StringPrefix": "$",
+ "Counter.Formatting.StringSuffix": "%",
+ });
+
+ cy.getByTestId("VisualizationPreview")
+ .find(".counter-visualization-container")
+ .should("exist");
+
+ // wait a bit before taking snapshot
+ cy.wait(500); // eslint-disable-line cypress/no-unnecessary-waiting
+ cy.percySnapshot("Visualizations - Counter (format target value)", { widths: [viewportWidth] });
+ });
+});
diff --git a/client/cypress/integration/visualizations/edit_visualization_dialog_spec.js b/client/cypress/integration/visualizations/edit_visualization_dialog_spec.js
new file mode 100644
index 000000000..494bb2229
--- /dev/null
+++ b/client/cypress/integration/visualizations/edit_visualization_dialog_spec.js
@@ -0,0 +1,58 @@
+/* global cy */
+
+describe("Edit visualization dialog", () => {
+ beforeEach(() => {
+ cy.login();
+ cy.createQuery().then(({ id }) => {
+ cy.visit(`queries/${id}/source`);
+ cy.getByTestId("ExecuteButton").click();
+ });
+ });
+
+ it("opens New Visualization dialog", () => {
+ cy.getByTestId("NewVisualization")
+ .should("exist")
+ .click();
+ cy.getByTestId("EditVisualizationDialog").should("exist");
+ // Default visualization should be selected
+ cy.getByTestId("VisualizationType")
+ .should("exist")
+ .should("contain", "Chart");
+ cy.getByTestId("VisualizationName")
+ .should("exist")
+ .should("have.value", "Chart");
+ });
+
+ it("opens Edit Visualization dialog", () => {
+ cy.getByTestId("EditVisualization").click();
+ cy.getByTestId("EditVisualizationDialog").should("exist");
+ // Default `Table` visualization should be selected
+ cy.getByTestId("VisualizationType")
+ .should("exist")
+ .should("contain", "Table");
+ cy.getByTestId("VisualizationName")
+ .should("exist")
+ .should("have.value", "Table");
+ });
+
+ it("creates visualization with custom name", () => {
+ const visualizationName = "Custom name";
+
+ cy.clickThrough(`
+ NewVisualization
+ VisualizationType
+ VisualizationType.TABLE
+ `);
+
+ cy.getByTestId("VisualizationName")
+ .clear()
+ .type(visualizationName);
+
+ cy.getByTestId("EditVisualizationDialog")
+ .contains("button", "Save")
+ .click();
+ cy.getByTestId("QueryPageVisualizationTabs")
+ .contains("span", visualizationName)
+ .should("exist");
+ });
+});
diff --git a/client/cypress/integration/visualizations/funnel_spec.js b/client/cypress/integration/visualizations/funnel_spec.js
new file mode 100644
index 000000000..85b3419fe
--- /dev/null
+++ b/client/cypress/integration/visualizations/funnel_spec.js
@@ -0,0 +1,89 @@
+/* global cy, Cypress */
+
+const SQL = `
+ SELECT 'a.01' AS a, 1.758831600227 AS b UNION ALL
+ SELECT 'a.02' AS a, 613.4456936572 AS b UNION ALL
+ SELECT 'a.03' AS a, 9.045647090023 AS b UNION ALL
+ SELECT 'a.04' AS a, 29.37836413439 AS b UNION ALL
+ SELECT 'a.05' AS a, 642.9434910444 AS b UNION ALL
+ SELECT 'a.06' AS a, 176.7634164480 AS b UNION ALL
+ SELECT 'a.07' AS a, 279.4880059198 AS b UNION ALL
+ SELECT 'a.08' AS a, 78.48128609207 AS b UNION ALL
+ SELECT 'a.09' AS a, 14.10443892662 AS b UNION ALL
+ SELECT 'a.10' AS a, 59.25097112438 AS b UNION ALL
+ SELECT 'a.11' AS a, 61.58610868125 AS b UNION ALL
+ SELECT 'a.12' AS a, 277.8473055268 AS b UNION ALL
+ SELECT 'a.13' AS a, 621.1535090415 AS b UNION ALL
+ SELECT 'a.14' AS a, 261.1409234646 AS b UNION ALL
+ SELECT 'a.15' AS a, 72.94883358030 AS b
+`;
+
+describe("Funnel", () => {
+ const viewportWidth = Cypress.config("viewportWidth");
+
+ beforeEach(() => {
+ cy.login();
+ cy.createQuery({ query: SQL }).then(({ id }) => {
+ cy.visit(`queries/${id}/source`);
+ cy.getByTestId("ExecuteButton").click();
+ });
+ });
+
+ it("creates visualization", () => {
+ cy.clickThrough(`
+ NewVisualization
+ `);
+ cy.getByTestId("VisualizationType").selectAntdOption("VisualizationType.FUNNEL");
+ cy.clickThrough(`
+ VisualizationEditor.Tabs.General
+
+ Funnel.StepColumn
+ Funnel.StepColumn.a
+ Funnel.ValueColumn
+ Funnel.ValueColumn.b
+
+ Funnel.CustomSort
+ Funnel.SortColumn
+ Funnel.SortColumn.b
+ Funnel.SortDirection
+ Funnel.SortDirection.Ascending
+ `);
+
+ cy.fillInputs(
+ {
+ "Funnel.StepColumnTitle": "Column A",
+ "Funnel.ValueColumnTitle": "Column B",
+ },
+ { wait: 200 }
+ ); // inputs are debounced
+
+ // Wait for proper initialization of visualization
+ cy.wait(500); // eslint-disable-line cypress/no-unnecessary-waiting
+ cy.getByTestId("VisualizationPreview")
+ .find("table")
+ .should("exist");
+ cy.percySnapshot("Visualizations - Funnel (basic)", { widths: [viewportWidth] });
+
+ cy.clickThrough(`
+ VisualizationEditor.Tabs.Appearance
+ `);
+
+ cy.fillInputs(
+ {
+ "Funnel.NumberFormat": "0[.]00",
+ "Funnel.PercentFormat": "0[.]0000%",
+ "Funnel.ItemsLimit": "10",
+ "Funnel.PercentRangeMin": "10",
+ "Funnel.PercentRangeMax": "90",
+ },
+ { wait: 200 }
+ ); // inputs are debounced
+
+ // Wait for proper initialization of visualization
+ cy.wait(500); // eslint-disable-line cypress/no-unnecessary-waiting
+ cy.getByTestId("VisualizationPreview")
+ .find("table")
+ .should("exist");
+ cy.percySnapshot("Visualizations - Funnel (extra options)", { widths: [viewportWidth] });
+ });
+});
diff --git a/client/cypress/integration/visualizations/map_spec.js b/client/cypress/integration/visualizations/map_spec.js
new file mode 100644
index 000000000..223540752
--- /dev/null
+++ b/client/cypress/integration/visualizations/map_spec.js
@@ -0,0 +1,96 @@
+/* global cy */
+
+const SQL = `
+ SELECT 'Israel' AS country, 32.0808800 AS lat, 34.7805700 AS lng UNION ALL
+ SELECT 'Israel' AS country, 31.7690400 AS lat, 35.2163300 AS lng UNION ALL
+ SELECT 'Israel' AS country, 32.8184100 AS lat, 34.9885000 AS lng UNION ALL
+
+ SELECT 'Ukraine' AS country, 50.4546600 AS lat, 30.5238000 AS lng UNION ALL
+ SELECT 'Ukraine' AS country, 49.8382600 AS lat, 24.0232400 AS lng UNION ALL
+ SELECT 'Ukraine' AS country, 49.9808100 AS lat, 36.2527200 AS lng UNION ALL
+
+ SELECT 'Hungary' AS country, 47.4980100 AS lat, 19.0399100 AS lng
+`;
+
+describe("Map (Markers)", () => {
+ const viewportWidth = Cypress.config("viewportWidth");
+
+ beforeEach(() => {
+ cy.login();
+
+ const mapTileUrl = "/static/images/fixtures/map-tile.png";
+
+ cy.createQuery({ query: SQL })
+ .then(({ id }) => cy.createVisualization(id, "MAP", "Map (Markers)", { mapTileUrl }))
+ .then(({ id: visualizationId, query_id: queryId }) => {
+ cy.visit(`queries/${queryId}/source#${visualizationId}`);
+ cy.getByTestId("ExecuteButton").click();
+ });
+ });
+
+ it("creates Map with groups", () => {
+ cy.clickThrough(`
+ EditVisualization
+ VisualizationEditor.Tabs.General
+ Map.Editor.LatitudeColumnName
+ Map.Editor.LatitudeColumnName.lat
+ Map.Editor.LongitudeColumnName
+ Map.Editor.LongitudeColumnName.lng
+ Map.Editor.GroupBy
+ Map.Editor.GroupBy.country
+ `);
+
+ cy.clickThrough("VisualizationEditor.Tabs.Groups");
+ cy.clickThrough("Map.Editor.Groups.Israel.Color");
+ cy.fillInputs({ "ColorPicker.CustomColor": "red{enter}" });
+ cy.getByTestId("ColorPicker.CustomColor").should("not.be.visible");
+ cy.clickThrough("Map.Editor.Groups.Ukraine.Color");
+ cy.fillInputs({ "ColorPicker.CustomColor": "green{enter}" });
+ cy.getByTestId("ColorPicker.CustomColor").should("not.be.visible");
+ cy.clickThrough("Map.Editor.Groups.Hungary.Color");
+ cy.fillInputs({ "ColorPicker.CustomColor": "blue{enter}" });
+ cy.getByTestId("ColorPicker.CustomColor").should("not.be.visible");
+
+ cy.getByTestId("VisualizationPreview")
+ .find(".leaflet-control-zoom-in")
+ .click();
+
+ // Wait for proper initialization of visualization
+ cy.wait(1000); // eslint-disable-line cypress/no-unnecessary-waiting
+ cy.percySnapshot("Visualizations - Map (Markers) with groups", { widths: [viewportWidth] });
+ });
+
+ it("creates Map with custom markers", () => {
+ cy.clickThrough(`
+ EditVisualization
+ VisualizationEditor.Tabs.General
+ Map.Editor.LatitudeColumnName
+ Map.Editor.LatitudeColumnName.lat
+ Map.Editor.LongitudeColumnName
+ Map.Editor.LongitudeColumnName.lng
+ `);
+
+ cy.clickThrough(`
+ VisualizationEditor.Tabs.Style
+ Map.Editor.ClusterMarkers
+ Map.Editor.CustomizeMarkers
+ `);
+
+ cy.fillInputs({ "Map.Editor.MarkerIcon": "home" }, { wait: 250 }); // this input is debounced
+
+ cy.clickThrough("Map.Editor.MarkerBackgroundColor");
+ cy.fillInputs({ "ColorPicker.CustomColor": "red{enter}" });
+ cy.getByTestId("ColorPicker.CustomColor").should("not.be.visible");
+ cy.clickThrough("Map.Editor.MarkerBorderColor");
+ cy.fillInputs({ "ColorPicker.CustomColor": "maroon{enter}" });
+ cy.getByTestId("ColorPicker.CustomColor").should("not.be.visible");
+
+ cy.getByTestId("VisualizationPreview")
+ .find(".leaflet-control-zoom-in")
+ .click();
+
+ // Wait for proper initialization of visualization
+ cy.wait(1000); // eslint-disable-line cypress/no-unnecessary-waiting
+ cy.percySnapshot("Visualizations - Map (Markers) with custom markers", { widths: [viewportWidth] });
+ });
+});
diff --git a/client/cypress/integration/visualizations/pivot_spec.js b/client/cypress/integration/visualizations/pivot_spec.js
new file mode 100644
index 000000000..c0622b615
--- /dev/null
+++ b/client/cypress/integration/visualizations/pivot_spec.js
@@ -0,0 +1,159 @@
+/* global cy */
+
+import { getWidgetTestId } from "../../support/dashboard";
+
+const SQL = `
+ SELECT 'a' AS stage1, 'a1' AS stage2, 11 AS value UNION ALL
+ SELECT 'a' AS stage1, 'a2' AS stage2, 12 AS value UNION ALL
+ SELECT 'a' AS stage1, 'a3' AS stage2, 45 AS value UNION ALL
+ SELECT 'a' AS stage1, 'a4' AS stage2, 54 AS value UNION ALL
+ SELECT 'b' AS stage1, 'b1' AS stage2, 33 AS value UNION ALL
+ SELECT 'b' AS stage1, 'b2' AS stage2, 73 AS value UNION ALL
+ SELECT 'b' AS stage1, 'b3' AS stage2, 90 AS value UNION ALL
+ SELECT 'c' AS stage1, 'c1' AS stage2, 19 AS value UNION ALL
+ SELECT 'c' AS stage1, 'c2' AS stage2, 92 AS value UNION ALL
+ SELECT 'c' AS stage1, 'c3' AS stage2, 63 AS value UNION ALL
+ SELECT 'c' AS stage1, 'c4' AS stage2, 44 AS value\
+`;
+
+function createPivotThroughUI(visualizationName, options = {}) {
+ cy.getByTestId("NewVisualization").click();
+ cy.getByTestId("VisualizationType").selectAntdOption("VisualizationType.PIVOT");
+ cy.getByTestId("VisualizationName")
+ .clear()
+ .type(visualizationName);
+ if (options.hideControls) {
+ cy.getByTestId("PivotEditor.HideControls").click();
+ cy.getByTestId("VisualizationPreview")
+ .find("table")
+ .find(".pvtAxisContainer, .pvtRenderer, .pvtVals")
+ .should("be.not.visible");
+ }
+ cy.getByTestId("VisualizationPreview")
+ .find("table")
+ .should("exist");
+ cy.getByTestId("EditVisualizationDialog")
+ .contains("button", "Save")
+ .click();
+}
+
+describe("Pivot", () => {
+ beforeEach(() => {
+ cy.login();
+ cy.createQuery({ name: "Pivot Visualization", query: SQL })
+ .its("id")
+ .as("queryId");
+ });
+
+ it("creates Pivot with controls", function() {
+ cy.visit(`queries/${this.queryId}/source`);
+ cy.getByTestId("ExecuteButton").click();
+
+ const visualizationName = "Pivot";
+ createPivotThroughUI(visualizationName);
+
+ cy.getByTestId("QueryPageVisualizationTabs")
+ .contains("span", visualizationName)
+ .should("exist");
+ });
+
+ it("creates Pivot without controls", function() {
+ cy.visit(`queries/${this.queryId}/source`);
+ cy.getByTestId("ExecuteButton").click();
+
+ const visualizationName = "Pivot";
+
+ cy.server();
+ cy.route("POST", "**/api/visualizations").as("SaveVisualization");
+
+ createPivotThroughUI(visualizationName, { hideControls: true });
+
+ cy.wait("@SaveVisualization");
+ // Added visualization should also have hidden controls
+ cy.getByTestId("PivotTableVisualization")
+ .find("table")
+ .find(".pvtAxisContainer, .pvtRenderer, .pvtVals")
+ .should("be.not.visible");
+ });
+
+ it("updates the visualization when results change", function() {
+ const options = {
+ aggregatorName: "Count",
+ data: [], // force it to have a data object, although it shouldn't
+ controls: { enabled: false },
+ cols: ["stage1"],
+ rows: ["stage2"],
+ vals: ["value"],
+ };
+
+ cy.createVisualization(this.queryId, "PIVOT", "Pivot", options).then(visualization => {
+ cy.visit(`queries/${this.queryId}/source#${visualization.id}`);
+ cy.getByTestId("ExecuteButton").click();
+
+ // assert number of rows is 11
+ cy.getByTestId("PivotTableVisualization").contains(".pvtGrandTotal", "11");
+
+ cy.getByTestId("QueryEditor")
+ .get(".ace_text-input")
+ .first()
+ .focus()
+ .type(" UNION ALL {enter}SELECT 'c' AS stage1, 'c5' AS stage2, 55 AS value");
+
+ cy.getByTestId("SaveButton").click();
+ cy.getByTestId("ExecuteButton").click();
+
+ // assert number of rows is 12
+ cy.getByTestId("PivotTableVisualization").contains(".pvtGrandTotal", "12");
+ });
+ });
+
+ it("takes a snapshot with different configured Pivots", function() {
+ const options = {
+ aggregatorName: "Sum",
+ controls: { enabled: true },
+ cols: ["stage1"],
+ rows: ["stage2"],
+ vals: ["value"],
+ };
+
+ const pivotTables = [
+ { name: "Pivot", options, position: { autoHeight: false, sizeY: 10, sizeX: 2 } },
+ {
+ name: "Pivot without Row Totals",
+ options: { ...options, rendererOptions: { table: { rowTotals: false } } },
+ position: { autoHeight: false, col: 2, sizeY: 10, sizeX: 2 },
+ },
+ {
+ name: "Pivot without Col Totals",
+ options: { ...options, rendererOptions: { table: { colTotals: false } } },
+ position: { autoHeight: false, col: 4, sizeY: 10, sizeX: 2 },
+ },
+ {
+ name: "Pivot with Controls",
+ options: { ...options, controls: { enabled: false } },
+ position: { autoHeight: false, row: 9, sizeY: 13 },
+ },
+ ];
+
+ cy.createDashboard("Pivot Visualization")
+ .then(dashboard => {
+ this.dashboardUrl = `/dashboards/${dashboard.id}`;
+ return cy.all(
+ pivotTables.map(pivot => () =>
+ cy
+ .createVisualization(this.queryId, "PIVOT", pivot.name, pivot.options)
+ .then(visualization => cy.addWidget(dashboard.id, visualization.id, { position: pivot.position }))
+ )
+ );
+ })
+ .then(widgets => {
+ cy.visit(this.dashboardUrl);
+ widgets.forEach(widget => {
+ cy.getByTestId(getWidgetTestId(widget)).within(() =>
+ cy.getByTestId("PivotTableVisualization").should("exist")
+ );
+ });
+ cy.percySnapshot("Visualizations - Pivot Table");
+ });
+ });
+});
diff --git a/client/cypress/integration/visualizations/sankey_sunburst_spec.js b/client/cypress/integration/visualizations/sankey_sunburst_spec.js
new file mode 100644
index 000000000..65de07673
--- /dev/null
+++ b/client/cypress/integration/visualizations/sankey_sunburst_spec.js
@@ -0,0 +1,144 @@
+/* global cy */
+
+import { getWidgetTestId } from "../../support/dashboard";
+
+const SQL = `
+ SELECT 'a' AS s1, 'a1' AS s2, 'a2' AS s3, null AS s4, null AS s5, 11 AS value UNION ALL
+ SELECT 'a' AS s1, 'a2' AS s2, null AS s3, null AS s4, null AS s5, 12 AS value UNION ALL
+ SELECT 'a' AS s1, 'a3' AS s2, null AS s3, null AS s4, null AS s5, 45 AS value UNION ALL
+ SELECT 'a' AS s1, 'a4' AS s2, null AS s3, null AS s4, null AS s5, 54 AS value UNION ALL
+ SELECT 'b' AS s1, 'b1' AS s2, 'a2' AS s3, 'c1' AS s4, null AS s5, 33 AS value UNION ALL
+ SELECT 'b' AS s1, 'b2' AS s2, 'a4' AS s3, 'c3' AS s4, null AS s5, 73 AS value UNION ALL
+ SELECT 'b' AS s1, 'b3' AS s2, null AS s3, null AS s4, null AS s5, 90 AS value UNION ALL
+ SELECT 'c' AS s1, 'c1' AS s2, null AS s3, null AS s4, null AS s5, 19 AS value UNION ALL
+ SELECT 'c' AS s1, 'c2' AS s2, 'b2' AS s3, 'a2' AS s4, 'a3' AS s5, 92 AS value UNION ALL
+ SELECT 'c' AS s1, 'c3' AS s2, 'c4' AS s3, null AS s4, null AS s5, 63 AS value UNION ALL
+ SELECT 'c' AS s1, 'c4' AS s2, null AS s3, null AS s4, null AS s5, 44 AS value
+`;
+
+describe("Sankey and Sunburst", () => {
+ beforeEach(() => {
+ cy.login();
+ });
+
+ describe("Creation through UI", () => {
+ beforeEach(() => {
+ cy.createQuery({ query: SQL }).then(({ id }) => {
+ cy.visit(`queries/${id}/source`);
+ cy.getByTestId("ExecuteButton").click();
+ cy.getByTestId("NewVisualization").click();
+ cy.getByTestId("VisualizationType").selectAntdOption("VisualizationType.SUNBURST_SEQUENCE");
+ });
+ });
+
+ it("creates Sunburst", () => {
+ const visualizationName = "Sunburst";
+
+ cy.getByTestId("VisualizationName")
+ .clear()
+ .type(visualizationName);
+ cy.getByTestId("VisualizationPreview")
+ .find("svg")
+ .should("exist");
+
+ cy.getByTestId("EditVisualizationDialog")
+ .contains("button", "Save")
+ .click();
+ cy.getByTestId("QueryPageVisualizationTabs")
+ .contains("span", visualizationName)
+ .should("exist");
+ });
+
+ it("creates Sankey", () => {
+ const visualizationName = "Sankey";
+
+ cy.getByTestId("VisualizationName")
+ .clear()
+ .type(visualizationName);
+ cy.getByTestId("VisualizationPreview")
+ .find("svg")
+ .should("exist");
+
+ cy.getByTestId("EditVisualizationDialog")
+ .contains("button", "Save")
+ .click();
+ cy.getByTestId("QueryPageVisualizationTabs")
+ .contains("span", visualizationName)
+ .should("exist");
+ });
+ });
+
+ const STAGES_WIDGETS = [
+ { name: "1 stage", query: `SELECT s1,value FROM (${SQL}) q`, position: { autoHeight: false, sizeY: 10, sizeX: 2 } },
+ {
+ name: "2 stages",
+ query: `SELECT s1,s2,value FROM (${SQL}) q`,
+ position: { autoHeight: false, col: 2, sizeY: 10, sizeX: 2 },
+ },
+ {
+ name: "3 stages",
+ query: `SELECT s1,s2,s3,value FROM (${SQL}) q`,
+ position: { autoHeight: false, col: 4, sizeY: 10, sizeX: 2 },
+ },
+ {
+ name: "4 stages",
+ query: `SELECT s1,s2,s3,s4,value FROM (${SQL}) q`,
+ position: { autoHeight: false, row: 9, sizeY: 10, sizeX: 2 },
+ },
+ {
+ name: "5 stages",
+ query: `SELECT s1,s2,s3,s4,s5,value FROM (${SQL}) q`,
+ position: { autoHeight: false, row: 9, col: 2, sizeY: 10, sizeX: 2 },
+ },
+ ];
+
+ it("takes a snapshot with Sunburst (1 - 5 stages)", function() {
+ cy.createDashboard("Sunburst Visualization").then(dashboard => {
+ this.dashboardUrl = `/dashboards/${dashboard.id}`;
+ return cy
+ .all(
+ STAGES_WIDGETS.map(sunburst => () =>
+ cy
+ .createQuery({ name: `Sunburst with ${sunburst.name}`, query: sunburst.query })
+ .then(queryData => cy.createVisualization(queryData.id, "SUNBURST_SEQUENCE", "Sunburst", {}))
+ .then(visualization => cy.addWidget(dashboard.id, visualization.id, { position: sunburst.position }))
+ )
+ )
+ .then(widgets => {
+ cy.visit(this.dashboardUrl);
+ widgets.forEach(widget => {
+ cy.getByTestId(getWidgetTestId(widget)).within(() => cy.get("svg").should("exist"));
+ });
+
+ // wait a bit before taking snapshot
+ cy.wait(500); // eslint-disable-line cypress/no-unnecessary-waiting
+ cy.percySnapshot("Visualizations - Sunburst");
+ });
+ });
+ });
+
+ it("takes a snapshot with Sankey (1 - 5 stages)", function() {
+ cy.createDashboard("Sankey Visualization").then(dashboard => {
+ this.dashboardUrl = `/dashboards/${dashboard.id}`;
+ return cy
+ .all(
+ STAGES_WIDGETS.map(sankey => () =>
+ cy
+ .createQuery({ name: `Sankey with ${sankey.name}`, query: sankey.query })
+ .then(queryData => cy.createVisualization(queryData.id, "SANKEY", "Sankey", {}))
+ .then(visualization => cy.addWidget(dashboard.id, visualization.id, { position: sankey.position }))
+ )
+ )
+ .then(widgets => {
+ cy.visit(this.dashboardUrl);
+ widgets.forEach(widget => {
+ cy.getByTestId(getWidgetTestId(widget)).within(() => cy.get("svg").should("exist"));
+ });
+
+ // wait a bit before taking snapshot
+ cy.wait(500); // eslint-disable-line cypress/no-unnecessary-waiting
+ cy.percySnapshot("Visualizations - Sankey");
+ });
+ });
+ });
+});
diff --git a/client/cypress/integration/visualizations/table/.mocks/all-cell-types.js b/client/cypress/integration/visualizations/table/.mocks/all-cell-types.js
new file mode 100644
index 000000000..269f88ee4
--- /dev/null
+++ b/client/cypress/integration/visualizations/table/.mocks/all-cell-types.js
@@ -0,0 +1,78 @@
+export const query = `
+ SELECT
+ 314159.265359 AS num,
+ 'test' AS str,
+ 'hello, world ' AS html,
+ 'hello, world ' AS html2,
+ 'Link: http://example.com' AS html3,
+ '1995-09-03T07:45' AS "date",
+ true AS bool,
+ '[{"a": 3.14, "b": "test", "c": [], "d": {}}, false, [null, 123], "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."]' AS json,
+ 'ukr' AS img,
+ 'redash' AS link
+`;
+
+export const config = {
+ itemsPerPage: 25,
+ columns: [
+ {
+ name: "num",
+ displayAs: "number",
+ numberFormat: "0.000",
+ },
+ {
+ name: "str",
+ displayAs: "string",
+ allowHTML: true,
+ highlightLinks: false,
+ },
+ {
+ name: "html",
+ displayAs: "string",
+ allowHTML: true,
+ highlightLinks: false,
+ },
+ {
+ name: "html2",
+ displayAs: "string",
+ allowHTML: false,
+ highlightLinks: false,
+ },
+ {
+ name: "html3",
+ displayAs: "string",
+ allowHTML: true,
+ highlightLinks: true,
+ },
+ {
+ name: "date",
+ displayAs: "datetime",
+ dateTimeFormat: "D MMMM YYYY, h:mm A",
+ },
+ {
+ name: "bool",
+ displayAs: "boolean",
+ booleanValues: ["No", "Yes"],
+ },
+ {
+ name: "json",
+ displayAs: "json",
+ },
+ {
+ name: "img",
+ displayAs: "image",
+ imageUrlTemplate: "https://raw.githubusercontent.com/linssen/country-flag-icons/master/images/png/{{ @ }}.png",
+ imageTitleTemplate: "ISO: {{ @ }}",
+ imageWidth: "30",
+ imageHeight: "",
+ },
+ {
+ name: "link",
+ displayAs: "link",
+ linkUrlTemplate: "https://www.google.com.ua/search?q={{ @ }}",
+ linkTextTemplate: "Search for '{{ @ }}'",
+ linkTitleTemplate: "Search for '{{ @ }}'",
+ linkOpenInNewTab: true,
+ },
+ ],
+};
diff --git a/client/cypress/integration/visualizations/table/.mocks/large-dataset.js b/client/cypress/integration/visualizations/table/.mocks/large-dataset.js
new file mode 100644
index 000000000..2677beab5
--- /dev/null
+++ b/client/cypress/integration/visualizations/table/.mocks/large-dataset.js
@@ -0,0 +1,35 @@
+const loremIpsum =
+ "Lorem ipsum dolor sit amet consectetur adipiscing elit" +
+ "sed do eiusmod tempor incididunt ut labore et dolore magna aliqua";
+
+function pseudoRandom(seed) {
+ const x = Math.sin(seed) * 10000;
+ return x - Math.floor(x);
+}
+
+function randomString(index) {
+ const n = pseudoRandom(index);
+ const offset = Math.floor(n * loremIpsum.length);
+ const length = Math.floor(n * 15) + 1;
+ return loremIpsum.substr(offset, length).trim();
+}
+
+export const query = new Array(400)
+ .fill(null) // we actually don't need these values, but `.map()` ignores undefined elements
+ .map((unused, index) => `SELECT ${index} AS a, '${randomString(index)}' as b`)
+ .join(" UNION ALL\n");
+
+export const config = {
+ itemsPerPage: 10,
+ columns: [
+ {
+ name: "a",
+ displayAs: "number",
+ numberFormat: "0",
+ },
+ {
+ name: "b",
+ displayAs: "string",
+ },
+ ],
+};
diff --git a/client/cypress/integration/visualizations/table/.mocks/multi-column-sort.js b/client/cypress/integration/visualizations/table/.mocks/multi-column-sort.js
new file mode 100644
index 000000000..cf96ec32d
--- /dev/null
+++ b/client/cypress/integration/visualizations/table/.mocks/multi-column-sort.js
@@ -0,0 +1,32 @@
+export const query = `
+ SELECT 3 AS a, 1 AS b, 'h' AS c UNION ALL
+ SELECT 1 AS a, 1 AS b, 'b' AS c UNION ALL
+ SELECT 2 AS a, 1 AS b, 'e' AS c UNION ALL
+ SELECT 1 AS a, 3 AS b, 'd' AS c UNION ALL
+ SELECT 2 AS a, 2 AS b, 'f' AS c UNION ALL
+ SELECT 1 AS a, 1 AS b, 'a' AS c UNION ALL
+ SELECT 3 AS a, 2 AS b, 'i' AS c UNION ALL
+ SELECT 2 AS a, 3 AS b, 'g' AS c UNION ALL
+ SELECT 1 AS a, 2 AS b, 'c' AS c UNION ALL
+ SELECT 3 AS a, 3 AS b, 'j' AS c
+`;
+
+export const config = {
+ itemsPerPage: 25,
+ columns: [
+ {
+ name: "a",
+ displayAs: "number",
+ numberFormat: "0",
+ },
+ {
+ name: "b",
+ displayAs: "number",
+ numberFormat: "0",
+ },
+ {
+ name: "c",
+ displayAs: "string",
+ },
+ ],
+};
diff --git a/client/cypress/integration/visualizations/table/.mocks/search-in-data.js b/client/cypress/integration/visualizations/table/.mocks/search-in-data.js
new file mode 100644
index 000000000..de5aa68ed
--- /dev/null
+++ b/client/cypress/integration/visualizations/table/.mocks/search-in-data.js
@@ -0,0 +1,26 @@
+export const query = `
+ SELECT 'contains test' AS a, 'random string' AS b, 'another string' AS c UNION ALL
+ SELECT 'contains test' AS a, 'also contains Test' AS b, '' AS c UNION ALL
+ SELECT 'lorem ipsum' AS a, 'but TEST is here' AS b, 'none' AS c UNION ALL
+ SELECT 'should not appear' AS a, 'because' AS b, '"test" is here' AS c
+`;
+
+export const config = {
+ itemsPerPage: 25,
+ columns: [
+ {
+ name: "a",
+ displayAs: "string",
+ allowSearch: true,
+ },
+ {
+ name: "b",
+ displayAs: "string",
+ allowSearch: true,
+ },
+ {
+ name: "c",
+ allowSearch: false,
+ },
+ ],
+};
diff --git a/client/cypress/integration/visualizations/table/table_spec.js b/client/cypress/integration/visualizations/table/table_spec.js
new file mode 100644
index 000000000..b0fa8ec61
--- /dev/null
+++ b/client/cypress/integration/visualizations/table/table_spec.js
@@ -0,0 +1,126 @@
+/* global cy, Cypress */
+
+/*
+ This test suite relies on Percy (does not validate rendered visualizations)
+*/
+
+import * as AllCellTypes from "./.mocks/all-cell-types";
+import * as MultiColumnSort from "./.mocks/multi-column-sort";
+import * as SearchInData from "./.mocks/search-in-data";
+import * as LargeDataset from "./.mocks/large-dataset";
+
+function prepareVisualization(query, type, name, options) {
+ return cy
+ .createQuery({ query })
+ .then(({ id }) => cy.createVisualization(id, type, name, options))
+ .then(({ id: visualizationId, query_id: queryId }) => {
+ // use data-only view because we don't need editor features, but it will
+ // free more space for visualizations. Also, we'll hide schema browser (via shortcut)
+ cy.visit(`queries/${queryId}#${visualizationId}`);
+
+ cy.getByTestId("ExecuteButton").click();
+ cy.get("body").type("{alt}D");
+
+ // do some pre-checks here to ensure that visualization was created and is visible
+ cy.getByTestId("TableVisualization")
+ .should("exist")
+ .find("table")
+ .should("exist");
+
+ return cy.then(() => ({ queryId, visualizationId }));
+ });
+}
+
+describe("Table", () => {
+ const viewportWidth = Cypress.config("viewportWidth");
+
+ beforeEach(() => {
+ cy.login();
+ });
+
+ it("renders all cell types", () => {
+ const { query, config } = AllCellTypes;
+ prepareVisualization(query, "TABLE", "All cell types", config).then(() => {
+ // eslint-disable-next-line cypress/no-unnecessary-waiting
+ cy.wait(500); // add some waiting to avoid an async update error from .jvi-toggle
+
+ // expand JSON cell
+ cy.get(".jvi-item.jvi-root .jvi-toggle").click();
+ cy.get(".jvi-item.jvi-root .jvi-item .jvi-toggle").click({ multiple: true });
+
+ cy.percySnapshot("Visualizations - Table (All cell types)", { widths: [viewportWidth] });
+ });
+ });
+
+ describe("Sorting data", () => {
+ beforeEach(function() {
+ const { query, config } = MultiColumnSort;
+ prepareVisualization(query, "TABLE", "Sort data", config).then(({ queryId, visualizationId }) => {
+ this.queryId = queryId;
+ this.visualizationId = visualizationId;
+ });
+ });
+
+ it("sorts data by a single column", function() {
+ cy.getByTestId("TableVisualization")
+ .find("table th")
+ .contains("c")
+ .should("exist")
+ .click();
+ cy.percySnapshot("Visualizations - Table (Single-column sort)", { widths: [viewportWidth] });
+ });
+
+ it("sorts data by a multiple columns", function() {
+ cy.getByTestId("TableVisualization")
+ .find("table th")
+ .contains("a")
+ .should("exist")
+ .click();
+
+ cy.get("body").type("{shift}", { release: false });
+ cy.getByTestId("TableVisualization")
+ .find("table th")
+ .contains("b")
+ .should("exist")
+ .click();
+
+ cy.percySnapshot("Visualizations - Table (Multi-column sort)", { widths: [viewportWidth] });
+ });
+
+ it("sorts data in reverse order", function() {
+ cy.getByTestId("TableVisualization")
+ .find("table th")
+ .contains("c")
+ .should("exist")
+ .click()
+ .click();
+ cy.percySnapshot("Visualizations - Table (Single-column reverse sort)", { widths: [viewportWidth] });
+ });
+ });
+
+ it("searches in multiple columns", () => {
+ const { query, config } = SearchInData;
+ prepareVisualization(query, "TABLE", "Search", config).then(({ visualizationId }) => {
+ cy.getByTestId("TableVisualization")
+ .find("table input")
+ .should("exist")
+ .type("test");
+ cy.percySnapshot("Visualizations - Table (Search in data)", { widths: [viewportWidth] });
+ });
+ });
+
+ it("shows pagination and navigates to third page", () => {
+ const { query, config } = LargeDataset;
+ prepareVisualization(query, "TABLE", "With pagination", config).then(({ visualizationId }) => {
+ cy.get(".visualization-renderer")
+ .find(".ant-table-pagination")
+ .should("exist")
+ .find("li")
+ .contains("3")
+ .should("exist")
+ .click();
+
+ cy.percySnapshot("Visualizations - Table (Pagination)", { widths: [viewportWidth] });
+ });
+ });
+});
diff --git a/client/cypress/integration/visualizations/word_cloud_spec.js b/client/cypress/integration/visualizations/word_cloud_spec.js
new file mode 100644
index 000000000..bd9b5148d
--- /dev/null
+++ b/client/cypress/integration/visualizations/word_cloud_spec.js
@@ -0,0 +1,134 @@
+/* global cy, Cypress */
+
+const { map } = Cypress._;
+
+const SQL = `
+ SELECT 'Lorem ipsum dolor' AS a, 'ipsum' AS b, 2 AS c UNION ALL
+ SELECT 'Lorem sit amet' AS a, 'amet' AS b, 2 AS c UNION ALL
+ SELECT 'dolor adipiscing elit' AS a, 'elit' AS b, 4 AS c UNION ALL
+ SELECT 'sed do sed' AS a, 'sed' AS b, 5 AS c UNION ALL
+ SELECT 'sed eiusmod tempor' AS a, 'tempor' AS b, 7 AS c
+`;
+
+// Hack to fix Cypress -> Percy communication
+// Word Cloud uses `font-family` defined in CSS with a lot of fallbacks, so
+// it's almost impossible to know which font will be used on particular machine/browser.
+// In Cypress browser it could be one font, in Percy - another.
+// The issue is in how Percy takes screenshots: it takes a DOM/CSS/assets snapshot in Cypress,
+// copies it to own servers and restores in own browsers. Word Cloud computes its layout
+// using Cypress font, sets absolute positions for elements (in pixels), and when it is restored
+// on Percy machines (with another font) - visualization gets messed up.
+// Solution: explicitly provide some font that will be 100% the same on all CI machines. In this
+// case, it's "Roboto" just because it's in the list of fallback fonts and we already have this
+// webfont in assets folder (so browser can load it).
+function injectFont(document) {
+ const style = document.createElement("style");
+ style.setAttribute("id", "percy-fix");
+ style.setAttribute("type", "text/css");
+
+ const fonts = [
+ ["Roboto", "Roboto-Light-webfont", 300],
+ ["Roboto", "Roboto-Regular-webfont", 400],
+ ["Roboto", "Roboto-Medium-webfont", 500],
+ ["Roboto", "Roboto-Bold-webfont", 700],
+ ];
+
+ const basePath = "/static/fonts/roboto/";
+
+ // `insertRule` does not load font for some reason. Using text content works ¯\_(ツ)_/¯
+ style.appendChild(
+ document.createTextNode(
+ map(
+ fonts,
+ ([fontFamily, fileName, fontWeight]) => `
+ @font-face {
+ font-family: "${fontFamily}";
+ font-weight: ${fontWeight};
+ src: url("${basePath}${fileName}.eot");
+ src: url("${basePath}${fileName}.eot?#iefix") format("embedded-opentype"),
+ url("${basePath}${fileName}.woff") format("woff"),
+ url("${basePath}${fileName}.ttf") format("truetype"),
+ url("${basePath}${fileName}.svg") format("svg");
+ }
+ `
+ ).join("\n\n")
+ )
+ );
+ document.getElementsByTagName("head")[0].appendChild(style);
+}
+
+describe("Word Cloud", () => {
+ const viewportWidth = Cypress.config("viewportWidth");
+
+ beforeEach(() => {
+ cy.login();
+ cy.createQuery({ query: SQL }).then(({ id }) => {
+ cy.visit(`queries/${id}/source`);
+ cy.getByTestId("ExecuteButton").click();
+ });
+ cy.document().then(injectFont);
+ cy.getByTestId("NewVisualization").click();
+ cy.getByTestId("VisualizationType").selectAntdOption("VisualizationType.WORD_CLOUD");
+ });
+
+ it("creates visualization with automatic word frequencies", () => {
+ cy.clickThrough(`
+ WordCloud.WordsColumn
+ WordCloud.WordsColumn.a
+ `);
+
+ // Wait for proper initialization of visualization
+ cy.wait(500); // eslint-disable-line cypress/no-unnecessary-waiting
+
+ cy.getByTestId("VisualizationPreview")
+ .find("svg text")
+ .should("have.length", 11);
+
+ cy.percySnapshot("Visualizations - Word Cloud (Automatic word frequencies)", { widths: [viewportWidth] });
+ });
+
+ it("creates visualization with word frequencies from another column", () => {
+ cy.clickThrough(`
+ WordCloud.WordsColumn
+ WordCloud.WordsColumn.b
+
+ WordCloud.FrequenciesColumn
+ WordCloud.FrequenciesColumn.c
+ `);
+
+ // Wait for proper initialization of visualization
+ cy.wait(500); // eslint-disable-line cypress/no-unnecessary-waiting
+
+ cy.getByTestId("VisualizationPreview")
+ .find("svg text")
+ .should("have.length", 5);
+
+ cy.percySnapshot("Visualizations - Word Cloud (Frequencies from another column)", { widths: [viewportWidth] });
+ });
+
+ it("creates visualization with word length and frequencies limits", () => {
+ cy.clickThrough(`
+ WordCloud.WordsColumn
+ WordCloud.WordsColumn.b
+
+ WordCloud.FrequenciesColumn
+ WordCloud.FrequenciesColumn.c
+ `);
+
+ cy.fillInputs({
+ "WordCloud.WordLengthLimit.Min": "4",
+ "WordCloud.WordLengthLimit.Max": "5",
+ "WordCloud.WordCountLimit.Min": "1",
+ "WordCloud.WordCountLimit.Max": "3",
+ });
+
+ // Wait for proper initialization of visualization
+ cy.wait(500); // eslint-disable-line cypress/no-unnecessary-waiting
+
+ cy.getByTestId("VisualizationPreview")
+ .find("svg text")
+ .should("have.length", 2);
+
+ cy.percySnapshot("Visualizations - Word Cloud (With filters)", { widths: [viewportWidth] });
+ });
+});
diff --git a/client/cypress/plugins/index.js b/client/cypress/plugins/index.js
new file mode 100644
index 000000000..a11c0619e
--- /dev/null
+++ b/client/cypress/plugins/index.js
@@ -0,0 +1,10 @@
+const percyHealthCheck = require("@percy/cypress/task"); // eslint-disable-line import/no-extraneous-dependencies, import/no-unresolved
+
+module.exports = (on, config) => {
+ if (config.env.coverage) {
+ require("@cypress/code-coverage/task")(on, config);
+ }
+ on("task", percyHealthCheck);
+
+ return config;
+};
diff --git a/client/cypress/seed-data.js b/client/cypress/seed-data.js
new file mode 100644
index 000000000..21c6a47d1
--- /dev/null
+++ b/client/cypress/seed-data.js
@@ -0,0 +1,46 @@
+exports.seedData = [
+ {
+ route: "/setup",
+ type: "form",
+ data: {
+ name: "Example Admin",
+ email: "admin@redash.io",
+ password: "password",
+ org_name: "Redash",
+ },
+ },
+ {
+ route: "/login",
+ type: "form",
+ data: {
+ email: "admin@redash.io",
+ password: "password",
+ },
+ },
+ {
+ route: "/api/data_sources",
+ type: "json",
+ data: {
+ name: "Test PostgreSQL",
+ options: {
+ dbname: "postgres",
+ host: "postgres",
+ port: 5432,
+ sslmode: "prefer",
+ user: "postgres",
+ },
+ type: "pg",
+ },
+ },
+ {
+ route: "/api/destinations",
+ type: "json",
+ data: {
+ name: "Test Email Destination",
+ options: {
+ addresses: "test@example.com",
+ },
+ type: "email",
+ },
+ },
+];
diff --git a/client/cypress/support/commands.js b/client/cypress/support/commands.js
new file mode 100644
index 000000000..675b58f03
--- /dev/null
+++ b/client/cypress/support/commands.js
@@ -0,0 +1,129 @@
+/* global Cypress */
+
+import "@percy/cypress"; // eslint-disable-line import/no-extraneous-dependencies, import/no-unresolved
+
+import "@testing-library/cypress/add-commands";
+
+const { each } = Cypress._;
+
+Cypress.Commands.add("login", (email = "admin@redash.io", password = "password") => {
+ let csrf;
+ cy.visit("/login");
+ cy.getCookie("csrf_token")
+ .then(cookie => {
+ if (cookie) {
+ csrf = cookie.value;
+ } else {
+ cy.visit("/login").then(() => {
+ cy.get('input[name="csrf_token"]')
+ .invoke("val")
+ .then(csrf_token => {
+ csrf = csrf_token;
+ });
+ });
+ }
+ })
+ .then(() => {
+ cy.request({
+ url: "/login",
+ method: "POST",
+ form: true,
+ body: {
+ email,
+ password,
+ csrf_token: csrf,
+ },
+ });
+ });
+});
+
+Cypress.Commands.add("logout", () => cy.visit("/logout"));
+Cypress.Commands.add("getByTestId", element => cy.get('[data-test="' + element + '"]'));
+
+/* Clicks a series of elements. Pass in a newline-seperated string in order to click all elements by their test id,
+ or enclose the above string in an object with 'button' as key to click the buttons by name. For example:
+
+ cy.clickThrough(`
+ TestId1
+ TestId2
+ TestId3
+ `, { button: `
+ Label of button 4
+ Label of button 5
+ ` }, `
+ TestId6
+ TestId7`);
+*/
+Cypress.Commands.add("clickThrough", (...args) => {
+ args.forEach(elements => {
+ const names = elements.button || elements;
+
+ const click = element =>
+ (elements.button ? cy.contains("button", element.trim()) : cy.getByTestId(element.trim())).click();
+
+ names
+ .trim()
+ .split(/\n/)
+ .filter(Boolean)
+ .forEach(click);
+ });
+
+ return undefined;
+});
+
+/**
+ * Selects ANTD selector option
+ */
+Cypress.Commands.add("selectAntdOption", { prevSubject: "element" }, (subject, testId) => {
+ cy.wrap(subject).click();
+ return cy.getByTestId(testId).click({ force: true });
+});
+
+Cypress.Commands.add("fillInputs", (elements, { wait = 0 } = {}) => {
+ each(elements, (value, testId) => {
+ cy.getByTestId(testId)
+ .filter(":visible")
+ .clear()
+ .type(value);
+ if (wait > 0) {
+ cy.wait(wait); // eslint-disable-line cypress/no-unnecessary-waiting
+ }
+ });
+});
+
+Cypress.Commands.add("dragBy", { prevSubject: true }, (subject, offsetLeft, offsetTop, force = false) => {
+ if (!offsetLeft) {
+ offsetLeft = 1;
+ }
+ if (!offsetTop) {
+ offsetTop = 1;
+ }
+ return cy
+ .wrap(subject)
+ .trigger("mouseover", { force })
+ .trigger("mousedown", "topLeft", { force })
+ .trigger("mousemove", 1, 1, { force }) // must have at least 2 mousemove events for react-grid-layout to trigger onLayoutChange
+ .trigger("mousemove", offsetLeft, offsetTop, { force })
+ .trigger("mouseup", { force });
+});
+
+Cypress.Commands.add("all", (...functions) => {
+ if (Cypress._.isEmpty(functions)) {
+ return [];
+ }
+
+ const fns = Cypress._.isArray(functions[0]) ? functions[0] : functions;
+ const results = [];
+
+ fns.reduce((prev, fn) => {
+ fn().then(result => results.push(result));
+ return results;
+ }, results);
+
+ return cy.wrap(results);
+});
+
+Cypress.Commands.overwrite("percySnapshot", (originalFn, ...args) => {
+ Cypress.$("*[data-test=TimeAgo]").text("just now");
+ return originalFn(...args);
+});
diff --git a/client/cypress/support/dashboard/index.js b/client/cypress/support/dashboard/index.js
new file mode 100644
index 000000000..1f92bc249
--- /dev/null
+++ b/client/cypress/support/dashboard/index.js
@@ -0,0 +1,43 @@
+/* global cy */
+
+const { get } = Cypress._;
+const RESIZE_HANDLE_SELECTOR = ".react-resizable-handle";
+
+export function getWidgetTestId(widget) {
+ return `WidgetId${widget.id}`;
+}
+
+export function createQueryAndAddWidget(dashboardId, queryData = {}, widgetOptions = {}) {
+ return cy
+ .createQuery(queryData)
+ .then(query => {
+ const visualizationId = get(query, "visualizations.0.id");
+ assert.isDefined(visualizationId, "Query api call returns at least one visualization with id");
+ return cy.addWidget(dashboardId, visualizationId, widgetOptions);
+ })
+ .then(getWidgetTestId);
+}
+
+export function editDashboard() {
+ cy.getByTestId("DashboardMoreButton").click();
+
+ cy.getByTestId("DashboardMoreButtonMenu")
+ .contains("Edit")
+ .click();
+}
+
+export function shareDashboard() {
+ cy.clickThrough(
+ { button: "Publish" },
+ `OpenShareForm
+ PublicAccessEnabled`
+ );
+
+ return cy.getByTestId("SecretAddress").invoke("val");
+}
+
+export function resizeBy(wrapper, offsetLeft = 0, offsetTop = 0) {
+ return wrapper.within(() => {
+ cy.get(RESIZE_HANDLE_SELECTOR).dragBy(offsetLeft, offsetTop, true);
+ });
+}
diff --git a/client/cypress/support/index.js b/client/cypress/support/index.js
new file mode 100644
index 000000000..ca2180ebf
--- /dev/null
+++ b/client/cypress/support/index.js
@@ -0,0 +1,14 @@
+/* global Cypress */
+
+import "@cypress/code-coverage/support";
+import "./commands";
+import "./redash-api/index.js";
+
+Cypress.env("dataSourceId", 1);
+
+Cypress.on("uncaught:exception", err => {
+ // Prevent ResizeObserver error from failing tests
+ if (err && Cypress._.includes(err.message, "ResizeObserver loop limit exceeded")) {
+ return false;
+ }
+});
diff --git a/client/cypress/support/parameters.js b/client/cypress/support/parameters.js
new file mode 100644
index 000000000..335cc70f7
--- /dev/null
+++ b/client/cypress/support/parameters.js
@@ -0,0 +1,13 @@
+export function dragParam(paramName, offsetLeft, offsetTop) {
+ cy.getByTestId(`DragHandle-${paramName}`)
+ .trigger("mouseover")
+ .trigger("mousedown");
+
+ cy.get(".parameter-dragged .drag-handle")
+ .trigger("mousemove", offsetLeft, offsetTop, { force: true })
+ .trigger("mouseup", { force: true });
+}
+
+export function expectParamOrder(expectedOrder) {
+ cy.get(".parameter-container label").each(($label, index) => expect($label).to.have.text(expectedOrder[index]));
+}
diff --git a/client/cypress/support/redash-api/index.js b/client/cypress/support/redash-api/index.js
new file mode 100644
index 000000000..e9bc0ace6
--- /dev/null
+++ b/client/cypress/support/redash-api/index.js
@@ -0,0 +1,171 @@
+/* global cy, Cypress */
+
+const { extend, get, merge, find } = Cypress._;
+
+const post = options =>
+ cy
+ .getCookie("csrf_token")
+ .then(csrf => cy.request({ ...options, method: "POST", headers: { "X-CSRF-TOKEN": csrf.value } }));
+
+Cypress.Commands.add("createDashboard", name => {
+ return post({ url: "api/dashboards", body: { name } }).then(({ body }) => body);
+});
+
+Cypress.Commands.add("createQuery", (data, shouldPublish = true) => {
+ const merged = extend(
+ {
+ name: "Test Query",
+ query: "select 1",
+ data_source_id: Cypress.env("dataSourceId"),
+ options: {
+ parameters: [],
+ },
+ schedule: null,
+ },
+ data
+ );
+
+ // eslint-disable-next-line cypress/no-assigning-return-values
+ let request = post({ url: "/api/queries", body: merged }).then(({ body }) => body);
+ if (shouldPublish) {
+ request = request.then(query =>
+ post({ url: `/api/queries/${query.id}`, body: { is_draft: false } }).then(() => query)
+ );
+ }
+
+ return request;
+});
+
+Cypress.Commands.add("createVisualization", (queryId, type, name, options) => {
+ const data = { query_id: queryId, type, name, options };
+ return post({ url: "/api/visualizations", body: data }).then(({ body }) => ({
+ query_id: queryId,
+ ...body,
+ }));
+});
+
+Cypress.Commands.add("addTextbox", (dashboardId, text = "text", options = {}) => {
+ const defaultOptions = {
+ position: { col: 0, row: 0, sizeX: 3, sizeY: 3 },
+ };
+
+ const data = {
+ width: 1,
+ dashboard_id: dashboardId,
+ visualization_id: null,
+ text,
+ options: merge(defaultOptions, options),
+ };
+
+ return post({ url: "api/widgets", body: data }).then(({ body }) => {
+ const id = get(body, "id");
+ assert.isDefined(id, "Widget api call returns widget id");
+ return body;
+ });
+});
+
+Cypress.Commands.add("addWidget", (dashboardId, visualizationId, options = {}) => {
+ const defaultOptions = {
+ position: { col: 0, row: 0, sizeX: 3, sizeY: 3 },
+ };
+
+ const data = {
+ width: 1,
+ dashboard_id: dashboardId,
+ visualization_id: visualizationId,
+ options: merge(defaultOptions, options),
+ };
+
+ return post({ url: "api/widgets", body: data }).then(({ body }) => {
+ const id = get(body, "id");
+ assert.isDefined(id, "Widget api call returns widget id");
+ return body;
+ });
+});
+
+Cypress.Commands.add("createAlert", (queryId, options = {}, name) => {
+ const defaultOptions = {
+ column: "?column?",
+ op: "greater than",
+ rearm: 0,
+ value: 1,
+ };
+
+ const data = {
+ query_id: queryId,
+ name: name || "Alert for query " + queryId,
+ options: merge(defaultOptions, options),
+ };
+
+ return post({ url: "api/alerts", body: data }).then(({ body }) => {
+ const id = get(body, "id");
+ assert.isDefined(id, "Alert api call retu ns alert id");
+ return body;
+ });
+});
+
+Cypress.Commands.add("createUser", ({ name, email, password }) => {
+ return post({
+ url: "api/users?no_invite=yes",
+ body: { name, email },
+ failOnStatusCode: false,
+ }).then(xhr => {
+ const { status, body } = xhr;
+ if (status < 200 || status > 400) {
+ throw new Error(xhr);
+ }
+
+ if (status === 400 && body.message === "Email already taken.") {
+ // all is good, do nothing
+ return;
+ }
+
+ const id = get(body, "id");
+ assert.isDefined(id, "User api call returns user id");
+
+ return post({
+ url: body.invite_link,
+ form: true,
+ body: { password },
+ });
+ });
+});
+
+Cypress.Commands.add("createDestination", (name, type, options = {}) => {
+ return post({
+ url: "api/destinations",
+ body: { name, type, options },
+ failOnStatusCode: false,
+ });
+});
+
+Cypress.Commands.add("getDestinations", () => {
+ return cy.request("GET", "api/destinations").then(({ body }) => body);
+});
+
+Cypress.Commands.add("addDestinationSubscription", (alertId, destinationName) => {
+ return cy
+ .getDestinations()
+ .then(destinations => {
+ const destination = find(destinations, { name: destinationName });
+ if (!destination) {
+ throw new Error("Destination not found");
+ }
+ return post({
+ url: `api/alerts/${alertId}/subscriptions`,
+ body: {
+ alert_id: alertId,
+ destination_id: destination.id,
+ },
+ });
+ })
+ .then(({ body }) => {
+ const id = get(body, "id");
+ assert.isDefined(id, "Subscription api call returns subscription id");
+ return body;
+ });
+});
+
+Cypress.Commands.add("updateOrgSettings", settings => {
+ return post({ url: "api/settings/organization", body: settings }).then(({ body }) => body);
+});
diff --git a/client/cypress/support/tags/index.js b/client/cypress/support/tags/index.js
new file mode 100644
index 000000000..cef4c429a
--- /dev/null
+++ b/client/cypress/support/tags/index.js
@@ -0,0 +1,18 @@
+export function expectTagsToContain(tags = []) {
+ cy.getByTestId("TagsControl").within(() => {
+ cy.getByTestId("TagLabel")
+ .should("have.length", tags.length)
+ .each($tag => expect(tags).to.contain($tag.text()));
+ });
+}
+
+export function typeInTagsSelectAndSave(text) {
+ cy.getByTestId("EditTagsDialog").within(() => {
+ cy.get(".ant-select")
+ .find("input")
+ .type(text, { force: true });
+
+ cy.get(".ant-modal-header").click(); // hide dropdown options
+ cy.contains("OK").click();
+ });
+}
diff --git a/client/cypress/support/visualizations/chart.js b/client/cypress/support/visualizations/chart.js
new file mode 100644
index 000000000..a18375dae
--- /dev/null
+++ b/client/cypress/support/visualizations/chart.js
@@ -0,0 +1,100 @@
+/**
+ * Asserts the preview canvas exists, then captures the g.points element, which should be generated by plotly and asserts whether it exists
+ * @param should Passed to should expression after plot points are captured
+ */
+export function assertPlotPreview(should = "exist") {
+ cy.getByTestId("VisualizationPreview")
+ .find("g.plot")
+ .should("exist")
+ .find("g.points")
+ .should(should);
+}
+
+export function createChartThroughUI(chartName, chartSpecificAssertionFn = () => {}) {
+ cy.getByTestId("NewVisualization").click();
+ cy.getByTestId("VisualizationType").selectAntdOption("VisualizationType.CHART");
+ cy.getByTestId("VisualizationName")
+ .clear()
+ .type(chartName);
+
+ chartSpecificAssertionFn();
+
+ cy.server();
+ cy.route("POST", "**/api/visualizations").as("SaveVisualization");
+
+ cy.getByTestId("EditVisualizationDialog")
+ .contains("button", "Save")
+ .click();
+
+ cy.getByTestId("QueryPageVisualizationTabs")
+ .contains("span", chartName)
+ .should("exist");
+
+ cy.wait("@SaveVisualization").should("have.property", "status", 200);
+
+ return cy.get("@SaveVisualization").then(xhr => {
+ const { id, name, options } = xhr.response.body;
+ return cy.wrap({ id, name, options });
+ });
+}
+
+export function assertTabbedEditor(chartSpecificTabbedEditorAssertionFn = () => {}) {
+ cy.getByTestId("Chart.GlobalSeriesType").should("exist");
+
+ cy.getByTestId("VisualizationEditor.Tabs.Series").click();
+ cy.getByTestId("VisualizationEditor")
+ .find("table")
+ .should("exist");
+
+ cy.getByTestId("VisualizationEditor.Tabs.Colors").click();
+ cy.getByTestId("VisualizationEditor")
+ .find("table")
+ .should("exist");
+
+ cy.getByTestId("VisualizationEditor.Tabs.DataLabels").click();
+ cy.getByTestId("VisualizationEditor")
+ .getByTestId("Chart.DataLabels.ShowDataLabels")
+ .should("exist");
+
+ chartSpecificTabbedEditorAssertionFn();
+
+ cy.getByTestId("VisualizationEditor.Tabs.General").click();
+}
+
+export function assertAxesAndAddLabels(xaxisLabel, yaxisLabel) {
+ cy.getByTestId("VisualizationEditor.Tabs.XAxis").click();
+ cy.getByTestId("Chart.XAxis.Type")
+ .contains(".ant-select-selection-item", "Auto Detect")
+ .should("exist");
+
+ cy.getByTestId("Chart.XAxis.Name")
+ .clear()
+ .type(xaxisLabel);
+
+ cy.getByTestId("VisualizationEditor.Tabs.YAxis").click();
+ cy.getByTestId("Chart.LeftYAxis.Type")
+ .contains(".ant-select-selection-item", "Linear")
+ .should("exist");
+
+ cy.getByTestId("Chart.LeftYAxis.Name")
+ .clear()
+ .type(yaxisLabel);
+
+ cy.getByTestId("VisualizationEditor.Tabs.General").click();
+}
+
+export function createDashboardWithCharts(title, chartGetters, widgetsAssertionFn = () => {}) {
+ cy.createDashboard(title).then(dashboard => {
+ const dashboardUrl = `/dashboards/${dashboard.id}`;
+ const widgetGetters = chartGetters.map(chartGetter => `${chartGetter}Widget`);
+
+ chartGetters.forEach((chartGetter, i) => {
+ const position = { autoHeight: false, sizeY: 8, sizeX: 3, col: (i % 2) * 3 };
+ cy.get(`@${chartGetter}`)
+ .then(chart => cy.addWidget(dashboard.id, chart.id, { position }))
+ .as(widgetGetters[i]);
+ });
+
+ widgetsAssertionFn(widgetGetters, dashboardUrl);
+ });
+}
diff --git a/client/cypress/support/visualizations/table.js b/client/cypress/support/visualizations/table.js
new file mode 100644
index 000000000..2095b9fb8
--- /dev/null
+++ b/client/cypress/support/visualizations/table.js
@@ -0,0 +1,12 @@
+export function expectTableToHaveLength(length) {
+ cy.getByTestId("TableVisualization")
+ .find("tbody tr")
+ .should("have.length", length);
+}
+
+export function expectFirstColumnToHaveMembers(values) {
+ cy.getByTestId("TableVisualization")
+ .find("tbody tr td:first-child")
+ .then($cell => Cypress.$.map($cell, item => Cypress.$(item).text()))
+ .then(firstColumnCells => expect(firstColumnCells).to.have.members(values));
+}
diff --git a/client/cypress/tsconfig.json b/client/cypress/tsconfig.json
new file mode 100644
index 000000000..d4c0b515b
--- /dev/null
+++ b/client/cypress/tsconfig.json
@@ -0,0 +1,7 @@
+{
+ "extends": "../tsconfig.json",
+ "compilerOptions": {
+ "types": ["cypress", "@percy/cypress", "@testing-library/cypress"]
+ },
+ "include": ["./**/*.ts"]
+}
diff --git a/client/prettier.config.js b/client/prettier.config.js
new file mode 100644
index 000000000..059f7f83b
--- /dev/null
+++ b/client/prettier.config.js
@@ -0,0 +1,6 @@
+module.exports = {
+ printWidth: 120,
+ jsxBracketSameLine: true,
+ tabWidth: 2,
+ trailingComma: 'es5',
+};
diff --git a/client/tsconfig.json b/client/tsconfig.json
new file mode 100644
index 000000000..e8f885200
--- /dev/null
+++ b/client/tsconfig.json
@@ -0,0 +1,28 @@
+{
+ "compilerOptions": {
+ // Target latest version of ECMAScript.
+ "target": "es2019",
+ // Search under node_modules for non-relative imports.
+ "moduleResolution": "node",
+ // Process & infer types from .js files.
+ "allowJs": true,
+ // Don't emit; allow Babel to transform files.
+ "noEmit": true,
+ // Enable strictest settings like strictNullChecks & noImplicitAny.
+ "strict": true,
+ // Import non-ES modules as default imports.
+ "esModuleInterop": true,
+ "jsx": "react",
+ "allowSyntheticDefaultImports": true,
+ "noUnusedLocals": true,
+ "lib": ["dom", "dom.iterable", "esnext"],
+ "forceConsistentCasingInFileNames": true,
+ "baseUrl": "./",
+ "paths": {
+ "@/*": ["./app/*"]
+ },
+ "skipLibCheck": true
+ },
+ "include": ["app/**/*"],
+ "exclude": ["dist"]
+}
diff --git a/package.json b/package.json
new file mode 100644
index 000000000..e84e4ef44
--- /dev/null
+++ b/package.json
@@ -0,0 +1,197 @@
+{
+ "name": "redash-client",
+ "version": "11.0.0-dev",
+ "description": "The frontend part of Redash.",
+ "main": "index.js",
+ "scripts": {
+ "start": "npm-run-all --parallel watch:viz webpack-dev-server",
+ "clean": "rm -rf ./client/dist/",
+ "build:viz": "(cd viz-lib && yarn build:babel)",
+ "build": "yarn clean && yarn build:viz && NODE_ENV=production webpack",
+ "build:old-node-version": "yarn clean && NODE_ENV=production node --max-old-space-size=4096 node_modules/.bin/webpack",
+ "watch:app": "webpack --watch --progress --colors -d",
+ "watch:viz": "(cd viz-lib && yarn watch:babel)",
+ "watch": "npm-run-all --parallel watch:*",
+ "webpack-dev-server": "webpack-dev-server",
+ "analyze": "yarn clean && BUNDLE_ANALYZER=on webpack",
+ "analyze:build": "yarn clean && NODE_ENV=production BUNDLE_ANALYZER=on webpack",
+ "lint": "yarn lint:base --ext .js --ext .jsx --ext .ts --ext .tsx ./client",
+ "lint:fix": "yarn lint:base --fix --ext .js --ext .jsx --ext .ts --ext .tsx ./client",
+ "lint:base": "eslint --config ./client/.eslintrc.js --ignore-path ./client/.eslintignore",
+ "lint:ci": "yarn lint --max-warnings 0 --format junit --output-file /tmp/test-results/eslint/results.xml",
+ "prettier": "prettier --write 'client/app/**/*.{js,jsx,ts,tsx}' 'client/cypress/**/*.{js,jsx,ts,tsx}'",
+ "type-check": "tsc --noEmit --project client/tsconfig.json",
+ "type-check:watch": "yarn type-check --watch",
+ "jest": "TZ=Africa/Khartoum jest",
+ "test": "run-s type-check jest",
+ "test:watch": "jest --watch",
+ "cypress": "node client/cypress/cypress.js",
+ "preinstall": "cd viz-lib && yarn link --link-folder ../.yarn",
+ "postinstall": "(cd viz-lib && yarn --frozen-lockfile && yarn build:babel) && yarn link --link-folder ./.yarn @redash/viz"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/getredash/redash.git"
+ },
+ "engines": {
+ "node": ">14.16.0 <17.0.0",
+ "yarn": "^1.22.10"
+ },
+ "author": "Redash Contributors",
+ "license": "BSD-2-Clause",
+ "bugs": {
+ "url": "https://github.com/getredash/redash/issues"
+ },
+ "homepage": "https://redash.io/",
+ "dependencies": {
+ "@ant-design/icons": "^4.2.1",
+ "@redash/viz": "file:viz-lib",
+ "ace-builds": "^1.4.12",
+ "antd": "^4.4.3",
+ "axios": "^0.21.1",
+ "axios-auth-refresh": "^3.0.0",
+ "bootstrap": "^3.3.7",
+ "classnames": "^2.2.6",
+ "d3": "^3.5.17",
+ "debug": "^3.1.0",
+ "dompurify": "^2.0.7",
+ "font-awesome": "^4.7.0",
+ "history": "^4.10.1",
+ "hoist-non-react-statics": "^3.3.0",
+ "markdown": "0.5.0",
+ "material-design-iconic-font": "^2.2.0",
+ "moment": "^2.19.3",
+ "mousetrap": "^1.6.1",
+ "mustache": "^2.3.0",
+ "numeral": "^2.0.6",
+ "path-to-regexp": "^3.1.0",
+ "prop-types": "^15.6.1",
+ "query-string": "^6.9.0",
+ "react": "^16.14.0",
+ "react-ace": "^9.1.1",
+ "react-dom": "^16.14.0",
+ "react-grid-layout": "^0.18.2",
+ "react-resizable": "^1.10.1",
+ "react-virtualized": "^9.21.2",
+ "sql-formatter": "git+https://github.com/getredash/sql-formatter.git",
+ "universal-router": "^8.3.0",
+ "use-debounce": "^3.1.0",
+ "use-media": "^1.4.0"
+ },
+ "devDependencies": {
+ "@babel/cli": "^7.10.4",
+ "@babel/core": "^7.10.4",
+ "@babel/plugin-proposal-class-properties": "^7.10.4",
+ "@babel/plugin-transform-object-assign": "^7.2.0",
+ "@babel/preset-env": "^7.10.4",
+ "@babel/preset-react": "^7.0.0",
+ "@babel/preset-typescript": "^7.10.4",
+ "@cypress/code-coverage": "^3.8.1",
+ "@percy/agent": "0.24.3",
+ "@percy/cypress": "^2.3.2",
+ "@pmmmwh/react-refresh-webpack-plugin": "^0.4.3",
+ "@testing-library/cypress": "^7.0.2",
+ "@types/classnames": "^2.2.10",
+ "@types/hoist-non-react-statics": "^3.3.1",
+ "@types/lodash": "^4.14.157",
+ "@types/prop-types": "^15.7.3",
+ "@types/react": "^16.14.2",
+ "@types/react-dom": "^16.9.10",
+ "@types/sql-formatter": "^2.3.0",
+ "@typescript-eslint/eslint-plugin": "^2.10.0",
+ "@typescript-eslint/parser": "^2.10.0",
+ "atob": "^2.1.2",
+ "babel-eslint": "^10.0.3",
+ "babel-jest": "^24.1.0",
+ "babel-loader": "^8.0.5",
+ "babel-plugin-istanbul": "^6.0.0",
+ "babel-plugin-transform-builtin-extend": "^1.1.2",
+ "copy-webpack-plugin": "^4.5.3",
+ "css-loader": "^0.28.7",
+ "cypress": "^5.3.0",
+ "enzyme": "^3.8.0",
+ "enzyme-adapter-react-16": "^1.7.1",
+ "enzyme-to-json": "^3.3.5",
+ "eslint": "^6.7.2",
+ "eslint-config-prettier": "^6.7.0",
+ "eslint-config-react-app": "^5.1.0",
+ "eslint-loader": "^3.0.3",
+ "eslint-plugin-chai-friendly": "^0.5.0",
+ "eslint-plugin-compat": "^3.3.0",
+ "eslint-plugin-cypress": "^2.0.1",
+ "eslint-plugin-flowtype": "^3.13.0",
+ "eslint-plugin-import": "^2.18.2",
+ "eslint-plugin-jest": "^22.2.2",
+ "eslint-plugin-jsx-a11y": "^6.4.1",
+ "eslint-plugin-no-only-tests": "^2.4.0",
+ "eslint-plugin-react": "^7.17.0",
+ "eslint-plugin-react-hooks": "^1.7.0",
+ "file-loader": "^2.0.0",
+ "html-webpack-plugin": "^3.2.0",
+ "identity-obj-proxy": "^3.0.0",
+ "jest": "^24.1.0",
+ "less": "^3.9.0",
+ "less-loader": "^4.1.0",
+ "less-plugin-autoprefix": "^1.5.1",
+ "lodash": "^4.17.20",
+ "mini-css-extract-plugin": "^0.4.4",
+ "mockdate": "^2.0.2",
+ "npm-run-all": "^4.1.5",
+ "prettier": "^1.19.1",
+ "raw-loader": "^0.5.1",
+ "react-refresh": "^0.9.0",
+ "react-test-renderer": "^16.5.2",
+ "request": "^2.88.0",
+ "request-cookies": "^1.1.0",
+ "style-loader": "^2.0.0",
+ "typescript": "^4.1.2",
+ "url-loader": "^1.1.2",
+ "webpack": "^4.44.2",
+ "webpack-build-notifier": "^0.1.30",
+ "webpack-bundle-analyzer": "^2.11.1",
+ "webpack-cli": "^3.1.2",
+ "webpack-dev-server": "^3.11.0",
+ "webpack-manifest-plugin": "^2.0.4"
+ },
+ "optionalDependencies": {
+ "fsevents": "^2.3.2"
+ },
+ "jest": {
+ "rootDir": "./client",
+ "setupFiles": [
+ "./app/__tests__/enzyme_setup.js",
+ "./app/__tests__/mocks.js"
+ ],
+ "snapshotSerializers": [
+ "enzyme-to-json/serializer"
+ ],
+ "moduleNameMapper": {
+ "^@/(.*)": "/app/$1",
+ "\\.(css|less)$": "identity-obj-proxy"
+ },
+ "testPathIgnorePatterns": [
+ "/app/__tests__/"
+ ]
+ },
+ "nyc": {
+ "include": [
+ "client/app/**",
+ "viz-lib/**"
+ ]
+ },
+ "//": "browserslist set to 'Async functions' compatibility",
+ "browserslist": [
+ "Edge >= 15",
+ "Firefox >= 52",
+ "Chrome >= 55",
+ "Safari >= 10.1",
+ "iOS >= 10.3",
+ "Opera >= 42",
+ "op_mob >= 46",
+ "android >= 67",
+ "and_chr >= 71",
+ "and_ff >= 64",
+ "and_uc >= 11.8",
+ "samsung >= 6.2"
+ ]
+}
diff --git a/rd_service/__init__.py b/rd_service/__init__.py
deleted file mode 100644
index 8b1378917..000000000
--- a/rd_service/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/rd_service/cli.py b/rd_service/cli.py
deleted file mode 100644
index 1157c8c97..000000000
--- a/rd_service/cli.py
+++ /dev/null
@@ -1,44 +0,0 @@
-import argparse
-import logging
-import urlparse
-import redis
-import time
-import settings
-import data
-
-
-def start_workers(data_manager):
- try:
- data_manager.start_workers(settings.WORKERS_COUNT, settings.CONNECTION_STRING,
- settings.MAX_CONNECTIONS)
- logging.info("Workers started.")
-
- while True:
- try:
- data_manager.refresh_queries()
- except Exception:
- logging.error("Something went wrong with refreshing queries...");
- time.sleep(60)
- except KeyboardInterrupt:
- logging.warning("Exiting; waiting for threads")
- data_manager.stop_workers()
-
-
-if __name__ == '__main__':
- channel = logging.StreamHandler()
- logging.getLogger().addHandler(channel)
- logging.getLogger().setLevel("DEBUG")
-
- parser = argparse.ArgumentParser()
- parser.add_argument("command")
- args = parser.parse_args()
-
- url = urlparse.urlparse(settings.REDIS_URL)
- redis_connection = redis.StrictRedis(host=url.hostname, port=url.port, db=0, password=url.password)
- data_manager = data.Manager(redis_connection, settings.INTERNAL_DB_CONNECTION_STRING, settings.MAX_CONNECTIONS)
-
- if args.command == "worker":
- start_workers(data_manager)
- else:
- print "Unknown command"
-
diff --git a/rd_service/data/__init__.py b/rd_service/data/__init__.py
deleted file mode 100644
index 56b4ed1e5..000000000
--- a/rd_service/data/__init__.py
+++ /dev/null
@@ -1,4 +0,0 @@
-from manager import Manager
-from worker import Job
-import models
-import utils
diff --git a/rd_service/data/manager.py b/rd_service/data/manager.py
deleted file mode 100644
index 9b8e54d80..000000000
--- a/rd_service/data/manager.py
+++ /dev/null
@@ -1,171 +0,0 @@
-import collections
-from contextlib import contextmanager
-import json
-import logging
-import psycopg2
-import psycopg2.pool
-import qr
-import redis
-import time
-import query_runner
-import worker
-from utils import gen_query_hash
-
-
-class QueryResult(collections.namedtuple('QueryData', 'id query data runtime retrieved_at query_hash')):
- def to_dict(self, parse_data=False):
- d = self._asdict()
-
- if parse_data and d['data']:
- d['data'] = json.loads(d['data'])
-
- return d
-
-
-class Manager(object):
- def __init__(self, redis_connection, db_connection_string, db_max_connections):
- self.redis_connection = redis_connection
- self.workers = []
- self.db_connection_pool = psycopg2.pool.ThreadedConnectionPool(1, db_max_connections,
- db_connection_string)
- self.queue = qr.PriorityQueue("jobs")
- self.max_retries = 5
-
- # TODO: Use our Django Models
- def get_query_result_by_id(self, query_result_id):
- with self.db_transaction() as cursor:
- sql = "SELECT id, query, data, runtime, retrieved_at, query_hash FROM query_results " \
- "WHERE id=%s LIMIT 1"
- cursor.execute(sql, (query_result_id,))
- query_result = cursor.fetchone()
-
- if query_result:
- query_result = QueryResult(*query_result)
-
- return query_result
-
- def get_query_result(self, query, ttl=0):
- query_hash = gen_query_hash(query)
-
- with self.db_transaction() as cursor:
- sql = "SELECT id, query, data, runtime, retrieved_at, query_hash FROM query_results " \
- "WHERE query_hash=%s " \
- "AND retrieved_at < now() at time zone 'utc' - interval '%s second'" \
- "ORDER BY retrieved_at DESC LIMIT 1"
- cursor.execute(sql, (query_hash, psycopg2.extensions.AsIs(ttl)))
- query_result = cursor.fetchone()
-
- if query_result:
- query_result = QueryResult(*query_result)
-
- return query_result
-
- def add_job(self, query, priority):
- query_hash = gen_query_hash(query)
- logging.info("[Manager][%s] Inserting job with priority=%s", query_hash, priority)
- try_count = 0
- job = None
-
- while try_count < self.max_retries:
- try_count += 1
-
- pipe = self.redis_connection.pipeline()
- try:
- pipe.watch('query_hash_job:%s' % query_hash)
- job_id = pipe.get('query_hash_job:%s' % query_hash)
- if job_id:
- logging.info("[Manager][%s] Found existing job: %s", query_hash, job_id)
- job = worker.Job.load(self, job_id)
- else:
- job = worker.Job(self, query, priority)
- pipe.multi()
- job.save(pipe)
- logging.info("[Manager][%s] Created new job: %s", query_hash, job.id)
- self.queue.push(job.id, job.priority)
- break
-
- except redis.WatchError:
- continue
-
- if not job:
- logging.error("[Manager][%s] Failed adding job for query.", query_hash)
-
- return job
-
- def refresh_queries(self):
- sql = """SELECT queries.query, queries.ttl, retrieved_at
- FROM (SELECT query, min(ttl) as ttl FROM queries WHERE ttl > 0 GROUP by query) queries
- JOIN (SELECT query, max(retrieved_at) as retrieved_at
- FROM query_results
- GROUP BY query) query_results on query_results.query=queries.query
- WHERE queries.ttl > 0
- AND query_results.retrieved_at + ttl * interval '1 second' < now() at time zone 'utc';"""
-
- queries = self.run_query(sql)
- for query, ttl, retrieved_at in queries:
- self.add_job(query, worker.Job.LOW_PRIORITY)
-
- def store_query_result(self, query, data, run_time, retrieved_at):
- query_result_id = None
- query_hash = gen_query_hash(query)
- sql = "INSERT INTO query_results (query_hash, query, data, runtime, retrieved_at) " \
- "VALUES (%s, %s, %s, %s, %s) RETURNING id"
- with self.db_transaction() as cursor:
- cursor.execute(sql, (query_hash, query, data, run_time, retrieved_at))
- if cursor.rowcount == 1:
- query_result_id = cursor.fetchone()[0]
- logging.info("[Manager][%s] Inserted query data; id=%s", query_hash, query_result_id)
-
- sql = "UPDATE queries SET latest_query_data_id=%s WHERE query_hash=%s"
- cursor.execute(sql, (query_result_id, query_hash))
-
- logging.info("[Manager][%s] Updated %s queries.", query_hash, cursor.rowcount)
- else:
- logging.error("[Manager][%s] Failed inserting query data.", query_hash)
- return query_result_id
-
- def run_query(self, *args):
- sql = args[0]
- logging.debug("running query: %s %s", sql, args[1:])
-
- with self.db_transaction() as cursor:
- cursor.execute(sql, args[1:])
- if cursor.description:
- data = list(cursor)
- else:
- data = cursor.rowcount
-
- return data
-
- def start_workers(self, workers_count, connection_string, max_connections):
- if self.workers:
- return self.workers
-
- # TODO: who closes the connection pool?
- pg_connection_pool = psycopg2.pool.ThreadedConnectionPool(1, max_connections, connection_string)
- runner = query_runner.redshift(pg_connection_pool)
-
- self.workers = [worker.Worker(self, runner) for i in range(workers_count)]
- for w in self.workers:
- w.start()
-
- return self.workers
-
- def stop_workers(self):
- for w in self.workers:
- w.continue_working = False
- w.join()
-
- @contextmanager
- def db_transaction(self):
- connection = self.db_connection_pool.getconn()
- cursor = connection.cursor()
- try:
- yield cursor
- except:
- connection.rollback()
- raise
- else:
- connection.commit()
- finally:
- self.db_connection_pool.putconn(connection)
diff --git a/rd_service/data/models.py b/rd_service/data/models.py
deleted file mode 100644
index 381dd3239..000000000
--- a/rd_service/data/models.py
+++ /dev/null
@@ -1,137 +0,0 @@
-import json
-from django.db import models
-from django.template.defaultfilters import slugify
-import utils
-
-
-class QueryResult(models.Model):
- id = models.AutoField(primary_key=True)
- query_hash = models.CharField(max_length=32)
- query = models.TextField()
- data = models.TextField()
- runtime = models.FloatField()
- retrieved_at = models.DateTimeField()
-
- class Meta:
- app_label = 'redash'
- db_table = 'query_results'
-
- def to_dict(self):
- return {
- 'id': self.id,
- 'query_hash': self.query_hash,
- 'query': self.query,
- 'data': json.loads(self.data),
- 'runtime': self.runtime,
- 'retrieved_at': self.retrieved_at
- }
-
- def __unicode__(self):
- return u"%d | %s | %s" % (self.id, self.query_hash, self.retrieved_at)
-
-
-class Query(models.Model):
- id = models.AutoField(primary_key=True)
- latest_query_data = models.ForeignKey(QueryResult)
- name = models.CharField(max_length=255)
- description = models.CharField(max_length=4096)
- query = models.TextField()
- query_hash = models.CharField(max_length=32)
- ttl = models.IntegerField()
- user = models.CharField(max_length=360)
- created_at = models.DateTimeField(auto_now_add=True)
-
- class Meta:
- app_label = 'redash'
- db_table = 'queries'
-
- def to_dict(self, with_result=True):
- d = {
- 'id': self.id,
- 'latest_query_data_id': self.latest_query_data_id,
- 'name': self.name,
- 'description': self.description,
- 'query': self.query,
- 'query_hash': self.query_hash,
- 'ttl': self.ttl,
- 'user': self.user,
- 'created_at': self.created_at,
- }
-
- if with_result and self.latest_query_data_id:
- d['latest_query_data'] = self.latest_query_data.to_dict()
-
- return d
-
- def save(self, *args, **kwargs):
- self.query_hash = utils.gen_query_hash(self.query)
- super(Query, self).save(*args, **kwargs)
-
- def __unicode__(self):
- return unicode(self.id)
-
-
-class Dashboard(models.Model):
- id = models.AutoField(primary_key=True)
- slug = models.CharField(max_length=140)
- name = models.CharField(max_length=100)
- user = models.CharField(max_length=360)
- layout = models.TextField()
- is_archived = models.BooleanField(default=False)
-
- class Meta:
- app_label = 'redash'
- db_table = 'dashboards'
-
- def to_dict(self, with_widgets=False):
- layout = json.loads(self.layout)
-
- if with_widgets:
- widgets = {w.id: w.to_dict() for w in self.widgets.all()}
- widgets_layout = map(lambda row: map(lambda widget_id: widgets.get(widget_id, None), row), layout)
- else:
- widgets_layout = None
-
- return {
- 'id': self.id,
- 'slug': self.slug,
- 'name': self.name,
- 'user': self.user,
- 'layout': layout,
- 'widgets': widgets_layout
- }
-
- def save(self, *args, **kwargs):
- # TODO: make sure slug is unique
- if not self.slug:
- self.slug = slugify(self.name)
- super(Dashboard, self).save(*args, **kwargs)
-
- def __unicode__(self):
- return u"%s=%s" % (self.id, self.name)
-
-
-class Widget(models.Model):
- id = models.AutoField(primary_key=True)
- query = models.ForeignKey(Query)
- type = models.CharField(max_length=100)
- width = models.IntegerField()
- options = models.TextField()
- dashboard = models.ForeignKey(Dashboard, related_name='widgets')
-
- class Meta:
- app_label = 'redash'
- db_table = 'widgets'
-
- def to_dict(self):
- return {
- 'id': self.id,
- 'query': self.query.to_dict(),
- 'type': self.type,
- 'width': self.width,
- 'options': json.loads(self.options),
- 'dashboard_id': self.dashboard_id
- }
-
- def __unicode__(self):
- return u"%s=>%s" % (self.id, self.dashboard_id)
diff --git a/rd_service/data/query_runner.py b/rd_service/data/query_runner.py
deleted file mode 100644
index dfcb7b413..000000000
--- a/rd_service/data/query_runner.py
+++ /dev/null
@@ -1,43 +0,0 @@
-import json
-import psycopg2
-import sys
-from .utils import JSONEncoder
-
-
-def redshift(connection_pool):
- def column_friendly_name(column_name):
- return column_name
-
- def query_runner(query):
- connection = connection_pool.getconn()
- cursor = connection.cursor()
-
- try:
- cursor.execute(query)
-
- column_names = [col.name for col in cursor.description]
-
- rows = [dict(zip(column_names, row)) for row in cursor]
- columns = [{'name': col.name,
- 'friendly_name': column_friendly_name(col.name),
- 'type': None} for col in cursor.description]
-
- data = {'columns': columns, 'rows': rows}
- json_data = json.dumps(data, cls=JSONEncoder)
- error = None
- cursor.close()
- except psycopg2.DatabaseError as e:
- connection.rollback()
- json_data = None
- error = e.message
-
- except Exception as e:
- connection.rollback()
- connection_pool.putconn(connection)
- raise sys.exc_info()[1], None, sys.exc_info()[2]
-
- connection_pool.putconn(connection)
-
- return json_data, error
-
- return query_runner
diff --git a/rd_service/data/tables.sql b/rd_service/data/tables.sql
deleted file mode 100644
index 78191f3a3..000000000
--- a/rd_service/data/tables.sql
+++ /dev/null
@@ -1,68 +0,0 @@
-CREATE TABLE query_results (
- id serial,
- query_hash char(32),
- retrieved_at timestamptz,
- runtime float,
- data text,
- query text
-);
-
-CREATE TABLE queries (
- id serial primary key,
- selected_query_data_id int,
- latest_query_data_id int,
- name varchar(255),
- description varchar(4096),
- query text,
- query_hash char(32),
- ttl int,
- user varchar(360),
- created_at timestamptz default current_timestamp
-);
-
-BEGIN;
-CREATE TABLE "queries" (
- "id" serial NOT NULL PRIMARY KEY,
- "latest_query_data_id" integer NOT NULL,
- "name" varchar(255) NOT NULL,
- "description" varchar(4096) NOT NULL,
- "query" text NOT NULL,
- "query_hash" varchar(32) NOT NULL,
- "ttl" integer NOT NULL,
- "user" varchar(360) NOT NULL,
- "created_at" timestamp with time zone NOT NULL
-)
-;
-CREATE TABLE "query_results" (
- "id" serial NOT NULL PRIMARY KEY,
- "query_hash" varchar(32) NOT NULL,
- "query" text NOT NULL,
- "data" text NOT NULL,
- "runtime" double precision NOT NULL,
- "retrieved_at" timestamp with time zone NOT NULL
-)
-;
-CREATE TABLE "dashboards" (
- "id" serial NOT NULL PRIMARY KEY,
- "slug" varchar(140) NOT NULL,
- "name" varchar(100) NOT NULL,
- "user" varchar(360) NOT NULL,
- "layout" text NOT NULL,
- "is_archived" boolean NOT NULL
-)
-;
-CREATE TABLE "widgets" (
- "id" serial NOT NULL PRIMARY KEY,
- "query_id" integer NOT NULL REFERENCES "queries" ("id") DEFERRABLE INITIALLY DEFERRED,
- "type" varchar(100) NOT NULL,
- "width" integer NOT NULL,
- "options" text NOT NULL,
- "dashboard_id" integer NOT NULL REFERENCES "dashboards" ("id") DEFERRABLE INITIALLY DEFERRED
-)
-;
-CREATE INDEX "dashboards_slug" ON "dashboards" ("slug");
-CREATE INDEX "dashboards_slug_like" ON "dashboards" ("slug" varchar_pattern_ops);
-CREATE INDEX "widgets_query_id" ON "widgets" ("query_id");
-CREATE INDEX "widgets_dashboard_id" ON "widgets" ("dashboard_id");
-
-COMMIT;
\ No newline at end of file
diff --git a/rd_service/data/utils.py b/rd_service/data/utils.py
deleted file mode 100644
index c5d440cb7..000000000
--- a/rd_service/data/utils.py
+++ /dev/null
@@ -1,63 +0,0 @@
-import cStringIO
-import csv
-import codecs
-import decimal
-import datetime
-import json
-import re
-import hashlib
-
-COMMENTS_REGEX = re.compile("/\*.*?\*/")
-
-
-def gen_query_hash(sql):
- sql = COMMENTS_REGEX.sub("", sql)
- sql = "".join(sql.split()).lower()
- return hashlib.md5(sql).hexdigest()
-
-
-class JSONEncoder(json.JSONEncoder):
- def default(self, o):
- if isinstance(o, decimal.Decimal):
- return float(o)
-
- if isinstance(o, datetime.date):
- return o.isoformat()
-
- super(JSONEncoder, self).default(o)
-
-
-class UnicodeWriter:
- """
- A CSV writer which will write rows to CSV file "f",
- which is encoded in the given encoding.
- """
-
- def __init__(self, f, dialect=csv.excel, encoding="utf-8", **kwds):
- # Redirect output to a queue
- self.queue = cStringIO.StringIO()
- self.writer = csv.writer(self.queue, dialect=dialect, **kwds)
- self.stream = f
- self.encoder = codecs.getincrementalencoder(encoding)()
-
- def _encode_utf8(self, val):
- if isinstance(val, (unicode, str)):
- return val.encode('utf-8')
-
- return val
-
- def writerow(self, row):
- self.writer.writerow([self._encode_utf8(s) for s in row])
- # Fetch UTF-8 output from the queue ...
- data = self.queue.getvalue()
- data = data.decode("utf-8")
- # ... and reencode it into the target encoding
- data = self.encoder.encode(data)
- # write to the target stream
- self.stream.write(data)
- # empty queue
- self.queue.truncate(0)
-
- def writerows(self, rows):
- for row in rows:
- self.writerow(row)
\ No newline at end of file
diff --git a/rd_service/data/worker.py b/rd_service/data/worker.py
deleted file mode 100644
index 192816ce9..000000000
--- a/rd_service/data/worker.py
+++ /dev/null
@@ -1,163 +0,0 @@
-import json
-import logging
-import threading
-import uuid
-import datetime
-import time
-from utils import gen_query_hash
-
-
-class Job(object):
- HIGH_PRIORITY = 1
- LOW_PRIORITY = 2
-
- WAITING = 1
- PROCESSING = 2
- DONE = 3
- FAILED = 4
-
- def __init__(self, data_manager, query, priority,
- job_id=None,
- wait_time=None, query_time=None,
- updated_at=None, status=None, error=None, query_result_id=None):
- self.data_manager = data_manager
- self.query = query
- self.priority = priority
- self.query_hash = gen_query_hash(self.query)
- self.query_result_id = query_result_id
-
- if job_id is None:
- self.id = str(uuid.uuid1())
- self.new_job = True
- self.wait_time = 0
- self.query_time = 0
- self.error = None
- self.updated_at = time.time() # job_dict.get('updated_at', time.time())
- self.status = self.WAITING # int(job_dict.get('status', self.WAITING))
- else:
- self.id = job_id
- self.new_job = False
- self.error = error
- self.wait_time = wait_time
- self.query_time = query_time
- self.updated_at = updated_at
- self.status = status
-
-
- def to_dict(self):
- return {
- 'query': self.query,
- 'priority': self.priority,
- 'id': self.id,
- 'wait_time': self.wait_time,
- 'query_time': self.query_time,
- 'updated_at': self.updated_at,
- 'status': self.status,
- 'error': self.error,
- 'query_result_id': self.query_result_id
- }
-
- @staticmethod
- def _redis_key(job_id):
- return 'job:%s' % job_id
-
- def save(self, pipe=None):
- if not pipe:
- pipe = self.data_manager.redis_connection.pipeline()
-
- if self.new_job:
- pipe.set('query_hash_job:%s' % self.query_hash, self.id)
-
- if self.is_finished():
- pipe.delete('query_hash_job:%s' % self.query_hash)
-
- pipe.sadd('jobs_set', self.id)
- pipe.hmset(self._redis_key(self.id), self.to_dict())
- pipe.publish(self._redis_key(self.id), json.dumps(self.to_dict()))
- pipe.execute()
-
- def processing(self):
- self.status = self.PROCESSING
- self.wait_time = time.time() - self.updated_at
- self.updated_at = time.time()
- self.save()
-
- def is_finished(self):
- return self.status in (self.FAILED, self.DONE)
-
- def done(self, query_result_id, error):
- if error:
- self.status = self.FAILED
- else:
- self.status = self.DONE
-
- self.query_result_id = query_result_id
- self.error = error
- self.query_time = time.time() - self.updated_at
- self.updated_at = time.time()
- self.save()
-
- def __str__(self):
- return "" % (self.id, self.priority, self.status)
-
- @classmethod
- def _load(cls, data_manager, job_id):
- return data_manager.redis_connection.hgetall(cls._redis_key(job_id))
-
- @classmethod
- def load(cls, data_manager, job_id):
- job_dict = cls._load(data_manager, job_id)
- job = None
- if job_dict:
- job = Job(data_manager, job_id=job_dict['id'], query=job_dict['query'],
- priority=int(job_dict['priority']), updated_at=float(job_dict['updated_at']),
- status=int(job_dict['status']), wait_time=float(job_dict['wait_time']),
- query_time=float(job_dict['query_time']), error=job_dict['error'],
- query_result_id=job_dict['query_result_id'])
-
- return job
-
-
-class Worker(threading.Thread):
- def __init__(self, manager, query_runner, sleep_time=0.1):
- self.manager = manager
- self.continue_working = True
- self.query_runner = query_runner
- self.sleep_time = sleep_time
-
- super(Worker, self).__init__(name="Worker-%s" % uuid.uuid1())
-
- def run(self):
- logging.info("[%s] started.", self.name)
- while self.continue_working:
- job_id = self.manager.queue.pop()
- if job_id:
- logging.info("[%s] Processing %s", self.name, job_id)
- self._process(job_id)
- logging.info("[%s] Finished Processing %s", self.name, job_id)
- else:
- time.sleep(self.sleep_time)
-
- def _process(self, job_id):
- job = Job.load(self.manager, job_id)
- if job.is_finished():
- logging.warning("[%s][%s] tried to process finished job.", self.name, job)
- return
-
- job.processing()
-
- logging.info("[%s][%s] running query...", self.name, job.id)
- start_time = time.time()
- data, error = self.query_runner(job.query)
- run_time = time.time() - start_time
- logging.info("[%s][%s] query finished... data length=%s, error=%s",
- self.name, job.id, data and len(data), error)
-
- # TODO: it is possible that storing the data will fail, and we will need to retry
- # while we already marked the job as done
- query_result_id = None
- if not error:
- query_result_id = self.manager.store_query_result(job.query, data, run_time,
- datetime.datetime.utcnow())
-
- job.done(query_result_id, error)
diff --git a/rd_service/requirements.txt b/rd_service/requirements.txt
deleted file mode 100644
index 83351077f..000000000
--- a/rd_service/requirements.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-psycopg2==2.5.1
-redis==2.7.5
-tornado==3.0.2
-sqlparse==0.1.8
-Django==1.5.4
-django-db-pool==0.0.10
-qr==0.6.0
-python-dateutil==2.1
\ No newline at end of file
diff --git a/rd_service/server.py b/rd_service/server.py
deleted file mode 100644
index c7018f37f..000000000
--- a/rd_service/server.py
+++ /dev/null
@@ -1,313 +0,0 @@
-import csv
-import hashlib
-import json
-import numbers
-import os
-import urlparse
-import logging
-import cStringIO
-import datetime
-import dateutil.parser
-import redis
-import sqlparse
-import tornado.ioloop
-import tornado.web
-import tornado.auth
-import tornado.options
-import settings
-from data import utils
-import data
-
-
-class BaseHandler(tornado.web.RequestHandler):
- def initialize(self):
- self.data_manager = self.application.settings.get('data_manager', None)
- self.redis_connection = self.application.settings['redis_connection']
-
- def get_current_user(self):
- user = self.get_secure_cookie("user")
- return user
-
- @tornado.web.authenticated
- def prepare(self):
- pass
-
- def write_json(self, response, encode=True):
- if encode:
- response = json.dumps(response, cls=utils.JSONEncoder)
- self.set_header("Content-Type", "application/json; charset=UTF-8")
- self.write(response)
-
-
-class PingHandler(tornado.web.RequestHandler):
- def get(self):
- self.write("PONG")
-
-
-class GoogleLoginHandler(tornado.web.RequestHandler,
- tornado.auth.GoogleMixin):
- @tornado.web.asynchronous
- @tornado.gen.coroutine
- def get(self):
- if self.get_argument("openid.mode", None):
- user = yield self.get_authenticated_user()
-
- if user['email'] in settings.ALLOWED_USERS or user['email'].endswith("@%s" % settings.GOOGLE_APPS_DOMAIN):
- logging.info("Authenticated: %s", user['email'])
- self.set_secure_cookie("user", user['email'])
- self.redirect("/")
- else:
- logging.error("Failed logging in with: %s", user)
- self.authenticate_redirect()
- else:
- self.authenticate_redirect()
-
-
-class MainHandler(BaseHandler):
- def get(self, *args):
- email_md5 = hashlib.md5(self.current_user.lower()).hexdigest()
- gravatar_url = "https://www.gravatar.com/avatar/%s?s=40" % email_md5
-
- user = {
- 'gravatar_url': gravatar_url,
- 'is_admin': self.current_user in settings.ADMINS,
- 'name': self.current_user
- }
-
- self.render("index.html", user=json.dumps(user))
-
-
-class QueryFormatHandler(BaseHandler):
- def post(self):
- arguments = json.loads(self.request.body)
- query = arguments.get("query", "")
-
- self.write(sqlparse.format(query, reindent=True, keyword_case='upper'))
-
-
-class StatusHandler(BaseHandler):
- def get(self):
- status = {}
- info = self.redis_connection.info()
- status['redis_used_memory'] = info['used_memory_human']
- status['queries_in_queue'] = self.redis_connection.zcard('jobs')
- status['queries_count'] = data.models.Query.objects.count()
- status['query_results_count'] = data.models.QueryResult.objects.count()
- status['dashboards_count'] = data.models.Dashboard.objects.count()
- status['widgets_count'] = data.models.Widget.objects.count()
-
- self.write_json(status)
-
-
-class WidgetsHandler(BaseHandler):
- def post(self, widget_id=None):
- widget_properties = json.loads(self.request.body)
- widget_properties['options'] = json.dumps(widget_properties['options'])
- widget = data.models.Widget(**widget_properties)
- widget.save()
-
- layout = json.loads(widget.dashboard.layout)
- new_row = True
-
- if len(layout) == 0 or widget.width == 2:
- layout.append([widget.id])
- elif len(layout[-1]) == 1:
- neighbour_widget = data.models.Widget.objects.get(pk=layout[-1][0])
- if neighbour_widget.width == 1:
- layout[-1].append(widget.id)
- new_row = False
- else:
- layout.append([widget.id])
- else:
- layout.append([widget.id])
-
- widget.dashboard.layout = json.dumps(layout)
- widget.dashboard.save()
-
- self.write_json({'widget': widget.to_dict(), 'layout': layout, 'new_row': new_row})
-
- def delete(self, widget_id):
- widget_id = int(widget_id)
- widget = data.models.Widget.objects.get(pk=widget_id)
- # TODO: reposition existing ones
- layout = json.loads(widget.dashboard.layout)
- layout = map(lambda row: filter(lambda w: w != widget_id, row), layout)
- layout = filter(lambda row: len(row) > 0, layout)
- widget.dashboard.layout = json.dumps(layout)
- widget.dashboard.save()
-
- widget.delete()
-
-
-class DashboardHandler(BaseHandler):
- def get(self, dashboard_slug=None):
- if dashboard_slug:
- dashboard = data.models.Dashboard.objects.prefetch_related('widgets__query__latest_query_data').get(slug=dashboard_slug)
- self.write_json(dashboard.to_dict(with_widgets=True))
- else:
- dashboards = [d.to_dict() for d in
- data.models.Dashboard.objects.filter(is_archived=False)]
- self.write_json(dashboards)
-
- def post(self, dashboard_id):
- if dashboard_id:
- dashboard_properties = json.loads(self.request.body)
- dashboard = data.models.Dashboard.objects.get(pk=dashboard_id)
- dashboard.layout = dashboard_properties['layout']
- dashboard.name = dashboard_properties['name']
- dashboard.save()
-
- self.write_json(dashboard.to_dict(with_widgets=True))
- else:
- dashboard_properties = json.loads(self.request.body)
- dashboard = data.models.Dashboard(name=dashboard_properties['name'],
- user=self.current_user,
- layout='[]')
- dashboard.save()
- self.write_json(dashboard.to_dict())
-
- def delete(self, dashboard_slug):
- dashboard = data.models.Dashboard.objects.get(slug=dashboard_slug)
- dashboard.is_archived = True
- dashboard.save()
-
-
-class QueriesHandler(BaseHandler):
- def post(self, id=None):
- query_def = json.loads(self.request.body)
- if 'created_at' in query_def:
- query_def['created_at'] = dateutil.parser.parse(query_def['created_at'])
-
- query_def.pop('latest_query_data', None)
-
- if id:
- query = data.models.Query(**query_def)
- fields = query_def.keys()
- fields.remove('id')
- query.save(update_fields=fields)
- else:
- query_def['user'] = self.current_user
- query = data.models.Query(**query_def)
- query.save()
-
- self.write_json(query.to_dict())
-
- def get(self, id=None):
- if id:
- q = data.models.Query.objects.get(pk=id)
- if q:
- self.write_json(q.to_dict())
- else:
- self.send_error(404)
- else:
- self.write_json([q.to_dict(with_result=False) for q in data.models.Query.objects.all()])
-
-
-class QueryResultsHandler(BaseHandler):
- def get(self, query_result_id):
- query_result = self.data_manager.get_query_result_by_id(query_result_id)
- if query_result:
- self.write_json({'query_result': query_result.to_dict(parse_data=True)})
- else:
- self.send_error(404)
-
- def post(self, _):
- params = json.loads(self.request.body)
-
- if params['ttl'] == 0:
- query_result = None
- else:
- query_result = self.data_manager.get_query_result(params['query'], int(params['ttl']))
-
- if query_result:
- self.write_json({'query_result': query_result.to_dict(parse_data=True)})
- else:
- job = self.data_manager.add_job(params['query'], data.Job.HIGH_PRIORITY)
- self.write({'job': job.to_dict()})
-
-
-class JobsHandler(BaseHandler):
- def get(self, job_id=None):
- if job_id:
- # TODO: if finished, include the query result
- job = data.Job.load(self.data_manager, job_id)
- self.write({'job': job.to_dict()})
- else:
- raise NotImplemented
-
- def delete(self, job_id):
- raise NotImplemented
-
-
-class CsvQueryResultsHandler(BaseHandler):
- def get(self, query_result_id):
- query_result = self.data_manager.get_query_result_by_id(query_result_id)
- if query_result:
- self.set_header("Content-Type", "text/csv; charset=UTF-8")
- s = cStringIO.StringIO()
-
- query_data = json.loads(query_result.data)
- writer = csv.DictWriter(s, fieldnames=[col['name'] for col in query_data['columns']])
- writer.writer = utils.UnicodeWriter(s)
- writer.writeheader()
- for row in query_data['rows']:
- for k, v in row.iteritems():
- if isinstance(v, numbers.Number) and (v > 1000 * 1000 * 1000 * 100):
- row[k] = datetime.datetime.fromtimestamp(v/1000.0)
-
- writer.writerow(row)
-
- self.write(s.getvalue())
- else:
- self.send_error(404)
-
-
-def get_application(static_path, is_debug, redis_connection, data_manager):
- return tornado.web.Application([(r"/", MainHandler),
- (r"/ping", PingHandler),
- (r"/api/queries/format", QueryFormatHandler),
- (r"/api/queries(?:/([0-9]*))?", QueriesHandler),
- (r"/api/query_results(?:/([0-9]*))?", QueryResultsHandler),
- (r"/api/query_results/(.*?).csv", CsvQueryResultsHandler),
- (r"/api/jobs/(.*)", JobsHandler),
- (r"/api/widgets(?:/([0-9]*))?", WidgetsHandler),
- (r"/api/dashboards(?:/(.*))?", DashboardHandler),
- (r"/admin/(.*)", MainHandler),
- (r"/dashboard/(.*)", MainHandler),
- (r"/queries(.*)", MainHandler),
- (r"/login", GoogleLoginHandler),
- (r"/status.json", StatusHandler),
- (r"/(.*)", tornado.web.StaticFileHandler,
- {"path": static_path})],
- template_path=static_path,
- static_path=static_path,
- debug=is_debug,
- login_url="/login",
- cookie_secret="1f7146d871a6a23263089419cc443813",
- redis_connection=redis_connection,
- data_manager=data_manager)
-
-
-if __name__ == '__main__':
- tornado.options.define("port", default=8888, type=int)
- tornado.options.define("debug", default=False, type=bool)
- tornado.options.define("static", default=settings.STATIC_ASSETS_PATH, type=str)
-
- tornado.options.parse_command_line()
-
- root_path = os.path.dirname(__file__)
- static_path = os.path.abspath(os.path.join(root_path, tornado.options.options.static))
-
- url = urlparse.urlparse(settings.REDIS_URL)
- redis_connection = redis.StrictRedis(host=url.hostname, port=url.port, db=0, password=url.password)
- data_manager = data.Manager(redis_connection, settings.INTERNAL_DB_CONNECTION_STRING,
- settings.MAX_CONNECTIONS)
-
- logging.info("redash web server stating on port: %d...", tornado.options.options.port)
- logging.info("UI assets path: %s...", static_path)
-
- application = get_application(static_path, tornado.options.options.debug,
- redis_connection, data_manager)
-
- application.listen(tornado.options.options.port)
- tornado.ioloop.IOLoop.instance().start()
\ No newline at end of file
diff --git a/rd_service/settings_example.py b/rd_service/settings_example.py
deleted file mode 100644
index 25673ebab..000000000
--- a/rd_service/settings_example.py
+++ /dev/null
@@ -1,21 +0,0 @@
-import django.conf
-
-REDIS_URL = "redis://localhost:6379"
-CONNECTION_STRING = "user= password= host= port=5439 dbname="
-GOOGLE_APPS_DOMAIN = ""
-STATIC_ASSETS_PATH = "../rd_ui/dist/"
-ALLOWED_USERS = []
-ADMINS = []
-WORKERS_COUNT = 2
-MAX_CONNECTIONS = 3
-INTERNAL_DB_CONNECTION_STRING = "dbname=postgres"
-
-django.conf.settings.configure(DATABASES = { 'default': {
- 'ENGINE': 'dbpool.db.backends.postgresql_psycopg2',
- 'OPTIONS': {'MAX_CONNS': 10, 'MIN_CONNS': 1},
- 'NAME': 'postgres',
- 'USER': '',
- 'PASSWORD': '',
- 'HOST': '',
- 'PORT': '',
- },}, TIME_ZONE = 'UTC')
diff --git a/rd_ui/.bowerrc b/rd_ui/.bowerrc
deleted file mode 100644
index ba0accc5a..000000000
--- a/rd_ui/.bowerrc
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "directory": "app/bower_components"
-}
diff --git a/rd_ui/.editorconfig b/rd_ui/.editorconfig
deleted file mode 100644
index c2cdfb8ad..000000000
--- a/rd_ui/.editorconfig
+++ /dev/null
@@ -1,21 +0,0 @@
-# EditorConfig helps developers define and maintain consistent
-# coding styles between different editors and IDEs
-# editorconfig.org
-
-root = true
-
-
-[*]
-
-# Change these settings to your own preference
-indent_style = space
-indent_size = 2
-
-# We recommend you to keep these unchanged
-end_of_line = lf
-charset = utf-8
-trim_trailing_whitespace = true
-insert_final_newline = true
-
-[*.md]
-trim_trailing_whitespace = false
diff --git a/rd_ui/.gitattributes b/rd_ui/.gitattributes
deleted file mode 100644
index 212566614..000000000
--- a/rd_ui/.gitattributes
+++ /dev/null
@@ -1 +0,0 @@
-* text=auto
\ No newline at end of file
diff --git a/rd_ui/.gitignore b/rd_ui/.gitignore
deleted file mode 100644
index ff422877e..000000000
--- a/rd_ui/.gitignore
+++ /dev/null
@@ -1,4 +0,0 @@
-node_modules
-.tmp
-.sass-cache
-app/bower_components
diff --git a/rd_ui/.jshintrc b/rd_ui/.jshintrc
deleted file mode 100644
index 40377ba25..000000000
--- a/rd_ui/.jshintrc
+++ /dev/null
@@ -1,24 +0,0 @@
-{
- "node": true,
- "browser": true,
- "esnext": true,
- "bitwise": true,
- "camelcase": true,
- "curly": true,
- "eqeqeq": true,
- "immed": true,
- "indent": 2,
- "latedef": true,
- "newcap": true,
- "noarg": true,
- "quotmark": "single",
- "regexp": true,
- "undef": true,
- "unused": true,
- "strict": true,
- "trailing": true,
- "smarttabs": true,
- "globals": {
- "angular": false
- }
-}
diff --git a/rd_ui/.travis.yml b/rd_ui/.travis.yml
deleted file mode 100644
index 83f4e22f0..000000000
--- a/rd_ui/.travis.yml
+++ /dev/null
@@ -1,7 +0,0 @@
-language: node_js
-node_js:
- - '0.8'
- - '0.10'
-before_script:
- - 'npm install -g bower grunt-cli'
- - 'bower install'
diff --git a/rd_ui/Gruntfile.js b/rd_ui/Gruntfile.js
deleted file mode 100644
index ab51fd0fd..000000000
--- a/rd_ui/Gruntfile.js
+++ /dev/null
@@ -1,362 +0,0 @@
-// Generated on 2013-08-25 using generator-angular 0.4.0
-'use strict';
-var LIVERELOAD_PORT = 35729;
-var lrSnippet = require('connect-livereload')({ port: LIVERELOAD_PORT });
-var mountFolder = function (connect, dir) {
- return connect.static(require('path').resolve(dir));
-};
-
-// # Globbing
-// for performance reasons we're only matching one level down:
-// 'test/spec/{,*/}*.js'
-// use this if you want to recursively match all subfolders:
-// 'test/spec/**/*.js'
-
-module.exports = function (grunt) {
- require('load-grunt-tasks')(grunt);
- require('time-grunt')(grunt);
-
- // configurable paths
- var yeomanConfig = {
- app: 'app',
- dist: 'dist'
- };
-
- try {
- yeomanConfig.app = require('./bower.json').appPath || yeomanConfig.app;
- } catch (e) {}
-
- grunt.initConfig({
- yeoman: yeomanConfig,
- watch: {
- coffee: {
- files: ['<%= yeoman.app %>/scripts/{,*/}*.coffee'],
- tasks: ['coffee:dist']
- },
- coffeeTest: {
- files: ['test/spec/{,*/}*.coffee'],
- tasks: ['coffee:test']
- },
- styles: {
- files: ['<%= yeoman.app %>/styles/{,*/}*.css'],
- tasks: ['copy:styles', 'autoprefixer']
- },
- livereload: {
- options: {
- livereload: LIVERELOAD_PORT
- },
- files: [
- '<%= yeoman.app %>/{,*/}*.html',
- '.tmp/styles/{,*/}*.css',
- '{.tmp,<%= yeoman.app %>}/scripts/{,*/}*.js',
- '<%= yeoman.app %>/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}'
- ]
- }
- },
- autoprefixer: {
- options: ['last 1 version'],
- dist: {
- files: [{
- expand: true,
- cwd: '.tmp/styles/',
- src: '{,*/}*.css',
- dest: '.tmp/styles/'
- }]
- }
- },
- connect: {
- options: {
- port: 9000,
- // Change this to '0.0.0.0' to access the server from outside.
- hostname: 'localhost'
- },
- livereload: {
- options: {
- middleware: function (connect) {
- return [
- lrSnippet,
- mountFolder(connect, '.tmp'),
- mountFolder(connect, yeomanConfig.app)
- ];
- }
- }
- },
- test: {
- options: {
- middleware: function (connect) {
- return [
- mountFolder(connect, '.tmp'),
- mountFolder(connect, 'test')
- ];
- }
- }
- },
- dist: {
- options: {
- middleware: function (connect) {
- return [
- mountFolder(connect, yeomanConfig.dist)
- ];
- }
- }
- }
- },
- open: {
- server: {
- url: 'http://localhost:<%= connect.options.port %>'
- }
- },
- clean: {
- dist: {
- files: [{
- dot: true,
- src: [
- '.tmp',
- '<%= yeoman.dist %>/*',
- '!<%= yeoman.dist %>/.git*'
- ]
- }]
- },
- server: '.tmp'
- },
- jshint: {
- options: {
- jshintrc: '.jshintrc'
- },
- all: [
- 'Gruntfile.js',
- '<%= yeoman.app %>/scripts/{,*/}*.js'
- ]
- },
- coffee: {
- options: {
- sourceMap: true,
- sourceRoot: ''
- },
- dist: {
- files: [{
- expand: true,
- cwd: '<%= yeoman.app %>/scripts',
- src: '{,*/}*.coffee',
- dest: '.tmp/scripts',
- ext: '.js'
- }]
- },
- test: {
- files: [{
- expand: true,
- cwd: 'test/spec',
- src: '{,*/}*.coffee',
- dest: '.tmp/spec',
- ext: '.js'
- }]
- }
- },
- // not used since Uglify task does concat,
- // but still available if needed
- /*concat: {
- dist: {}
- },*/
- rev: {
- dist: {
- files: {
- src: [
- '<%= yeoman.dist %>/scripts/{,*/}*.js',
- '<%= yeoman.dist %>/styles/{,*/}*.css',
- '<%= yeoman.dist %>/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}',
- '<%= yeoman.dist %>/styles/fonts/*'
- ]
- }
- }
- },
- useminPrepare: {
- html: '<%= yeoman.app %>/index.html',
- options: {
- dest: '<%= yeoman.dist %>'
- }
- },
- usemin: {
- html: ['<%= yeoman.dist %>/{,*/}*.html'],
- css: ['<%= yeoman.dist %>/styles/{,*/}*.css'],
- options: {
- dirs: ['<%= yeoman.dist %>']
- }
- },
- imagemin: {
- dist: {
- files: [{
- expand: true,
- cwd: '<%= yeoman.app %>/images',
- src: '{,*/}*.{png,jpg,jpeg}',
- dest: '<%= yeoman.dist %>/images'
- }]
- }
- },
- svgmin: {
- dist: {
- files: [{
- expand: true,
- cwd: '<%= yeoman.app %>/images',
- src: '{,*/}*.svg',
- dest: '<%= yeoman.dist %>/images'
- }]
- }
- },
- cssmin: {
- // By default, your `index.html` will take care of
- // minification. This option is pre-configured if you do not wish to use
- // Usemin blocks.
- // dist: {
- // files: {
- // '<%= yeoman.dist %>/styles/main.css': [
- // '.tmp/styles/{,*/}*.css',
- // '<%= yeoman.app %>/styles/{,*/}*.css'
- // ]
- // }
- // }
- },
- htmlmin: {
- dist: {
- options: {
- /*removeCommentsFromCDATA: true,
- // https://github.com/yeoman/grunt-usemin/issues/44
- //collapseWhitespace: true,
- collapseBooleanAttributes: true,
- removeAttributeQuotes: true,
- removeRedundantAttributes: true,
- useShortDoctype: true,
- removeEmptyAttributes: true,
- removeOptionalTags: true*/
- },
- files: [{
- expand: true,
- cwd: '<%= yeoman.app %>',
- src: ['*.html', 'views/*.html'],
- dest: '<%= yeoman.dist %>'
- }]
- }
- },
- // Put files not handled in other tasks here
- copy: {
- dist: {
- files: [{
- expand: true,
- dot: true,
- cwd: '<%= yeoman.app %>',
- dest: '<%= yeoman.dist %>',
- src: [
- '*.{ico,png,txt}',
- '.htaccess',
- 'bower_components/**/*',
- 'images/{,*/}*.{gif,webp}',
- 'styles/fonts/*'
- ]
- }, {
- expand: true,
- cwd: '.tmp/images',
- dest: '<%= yeoman.dist %>/images',
- src: [
- 'generated/*'
- ]
- }]
- },
- styles: {
- expand: true,
- cwd: '<%= yeoman.app %>/styles',
- dest: '.tmp/styles/',
- src: '{,*/}*.css'
- }
- },
- concurrent: {
- server: [
- 'coffee:dist',
- 'copy:styles'
- ],
- test: [
- 'coffee',
- 'copy:styles'
- ],
- dist: [
- 'coffee',
- 'copy:styles',
- 'imagemin',
- 'svgmin',
- 'htmlmin'
- ]
- },
- karma: {
- unit: {
- configFile: 'karma.conf.js',
- singleRun: true
- }
- },
- cdnify: {
- dist: {
- html: ['<%= yeoman.dist %>/*.html']
- }
- },
- ngmin: {
- dist: {
- files: [{
- expand: true,
- cwd: '<%= yeoman.dist %>/scripts',
- src: '*.js',
- dest: '<%= yeoman.dist %>/scripts'
- }]
- }
- },
- uglify: {
- dist: {
- files: {
- '<%= yeoman.dist %>/scripts/scripts.js': [
- '<%= yeoman.dist %>/scripts/scripts.js'
- ]
- }
- }
- }
- });
-
- grunt.registerTask('server', function (target) {
- if (target === 'dist') {
- return grunt.task.run(['build', 'open', 'connect:dist:keepalive']);
- }
-
- grunt.task.run([
- 'clean:server',
- 'concurrent:server',
- 'autoprefixer',
- 'connect:livereload',
- 'open',
- 'watch'
- ]);
- });
-
- grunt.registerTask('test', [
- 'clean:server',
- 'concurrent:test',
- 'autoprefixer',
- 'connect:test',
- 'karma'
- ]);
-
- grunt.registerTask('build', [
- 'clean:dist',
- 'useminPrepare',
- 'concurrent:dist',
- 'autoprefixer',
- 'concat',
- 'copy:dist',
- 'cdnify',
- 'ngmin',
- 'cssmin',
- 'uglify',
- 'rev',
- 'usemin'
- ]);
-
- grunt.registerTask('default', [
- 'jshint',
- 'test',
- 'build'
- ]);
-};
diff --git a/rd_ui/app/.buildignore b/rd_ui/app/.buildignore
deleted file mode 100644
index fc98b8eb5..000000000
--- a/rd_ui/app/.buildignore
+++ /dev/null
@@ -1 +0,0 @@
-*.coffee
\ No newline at end of file
diff --git a/rd_ui/app/404.html b/rd_ui/app/404.html
deleted file mode 100644
index fdace4ab1..000000000
--- a/rd_ui/app/404.html
+++ /dev/null
@@ -1,157 +0,0 @@
-
-
-
-
- Page Not Found :(
-
-
-
-
-
Not found :(
-
Sorry, but the page you were trying to view does not exist.
-
It looks like this was the result of either:
-
- a mistyped address
- an out-of-date link
-
-
-
-
-
-
diff --git a/rd_ui/app/index.html b/rd_ui/app/index.html
deleted file mode 100644
index 45b69d9b1..000000000
--- a/rd_ui/app/index.html
+++ /dev/null
@@ -1,114 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/rd_ui/app/scripts/admin_controllers.js b/rd_ui/app/scripts/admin_controllers.js
deleted file mode 100644
index 93311711d..000000000
--- a/rd_ui/app/scripts/admin_controllers.js
+++ /dev/null
@@ -1,19 +0,0 @@
-(function () {
- var AdminStatusCtrl = function ($scope, $http, $timeout) {
- $scope.$parent.pageTitle = "System Status";
-
- var refresh = function () {
- $scope.refresh_time = moment().add('minutes', 1);
- $http.get('/status.json').success(function (data) {
- $scope.status = data;
- });
-
- $timeout(refresh, 59 * 1000);
- };
-
- refresh();
- }
-
- angular.module('redash.admin_controllers', [])
- .controller('AdminStatusCtrl', ['$scope', '$http', '$timeout', AdminStatusCtrl])
-})();
diff --git a/rd_ui/app/scripts/app.js b/rd_ui/app/scripts/app.js
deleted file mode 100644
index 471cdd4e6..000000000
--- a/rd_ui/app/scripts/app.js
+++ /dev/null
@@ -1,19 +0,0 @@
-angular.module('redash', ['redash.directives', 'redash.admin_controllers', 'redash.controllers', 'redash.filters', 'redash.services',
- 'redash.renderers',
- 'ui.codemirror', 'highchart', 'angular-growl', 'angularMoment', 'ui.bootstrap', 'smartTable.table', 'ngResource']).
- config(['$routeProvider', '$locationProvider', '$compileProvider', function ($routeProvider, $locationProvider, $compileProvider) {
-
- $compileProvider.urlSanitizationWhitelist(/^\s*(https?|http|data):/);
-
- $locationProvider.html5Mode(true);
- $routeProvider.when('/dashboard/:dashboardSlug', {templateUrl: '/views/dashboard.html', controller: 'DashboardCtrl'});
- $routeProvider.when('/queries', {templateUrl: '/views/queries.html', controller: 'QueriesCtrl', reloadOnSearch: false});
- $routeProvider.when('/queries/new', {templateUrl: '/views/queryfiddle.html', controller: 'QueryFiddleCtrl', reloadOnSearch: false});
- $routeProvider.when('/queries/:queryId', {templateUrl: '/views/queryfiddle.html', controller: 'QueryFiddleCtrl', reloadOnSearch: false});
- $routeProvider.when('/admin/status', {templateUrl: '/views/admin_status.html', controller: 'AdminStatusCtrl'});
- $routeProvider.when('/', {templateUrl: '/views/index.html', controller: 'IndexCtrl'});
- $routeProvider.otherwise({redirectTo: '/'});
-
- Highcharts.setOptions({colors: ["#4572A7", "#AA4643", "#89A54E", "#80699B", "#3D96AE", "#DB843D", "#92A8CD", "#A47D7C", "#B5CA92"]});
- }]);
-
diff --git a/rd_ui/app/scripts/controllers.js b/rd_ui/app/scripts/controllers.js
deleted file mode 100644
index baab47318..000000000
--- a/rd_ui/app/scripts/controllers.js
+++ /dev/null
@@ -1,223 +0,0 @@
-(function () {
- var DashboardCtrl = function ($scope, $routeParams, $http, Dashboard) {
- $scope.dashboard = Dashboard.get({slug: $routeParams.dashboardSlug}, function(dashboard) {
- $scope.$parent.pageTitle = dashboard.name;
- });
- };
-
- var WidgetCtrl = function ($scope, $http, Query) {
- $scope.deleteWidget = function() {
- if (!confirm('Are you sure you want to remove "' + $scope.widget.query.name + '" from the dashboard?')) {
- return;
- }
-
- $http.delete('/api/widgets/' + $scope.widget.id).success(function() {
- $scope.dashboard.widgets = _.map($scope.dashboard.widgets, function(row) {
- return _.filter(row, function(widget) {
- return widget.id != $scope.widget.id;
- })
- });
- });
- }
-
- $scope.query = new Query($scope.widget.query);
- $scope.queryResult = $scope.query.getQueryResult();
-
- $scope.updateTime = (new Date($scope.queryResult.getUpdatedAt())).toISOString();
- $scope.nextUpdateTime = moment(new Date(($scope.query.updated_at + $scope.query.ttl + $scope.query.runtime + 300) * 1000)).fromNow();
-
- $scope.updateTime = '';
- }
-
- var QueryFiddleCtrl = function ($scope, $routeParams, $http, $location, growl, Query) {
- $scope.$parent.pageTitle = "Query Fiddle";
-
- $scope.tabs = [{'key': 'table', 'name': 'Table'}, {'key': 'chart', 'name': 'Chart'},
- {'key': 'pivot', 'name': 'Pivot Table'}];
-
- if (currentUser.is_admin) {
- $scope.tabs.push({'key': 'cohort', 'name': 'Cohort'});
- }
-
- $scope.lockButton = function (lock) {
- $scope.queryExecuting = lock;
- };
-
- $scope.formatQuery = function() {
- $scope.editorOptions.readOnly = 'nocursor';
-
- $http.post('/api/queries/format', {'query': $scope.query.query}).success(function(response) {
- $scope.query.query = response;
- $scope.editorOptions.readOnly = false;
- })
- }
-
- $scope.saveQuery = function (duplicate, oldId) {
- if (!oldId) {
- oldId = $scope.query.id;
- }
- $scope.query.$save(function (q) {
- if (duplicate) {
- growl.addInfoMessage("Query duplicated.", {ttl: 2000});
- } else{
- growl.addSuccessMessage("Query saved.", {ttl: 2000});
- }
-
- if (oldId != q.id) {
- if (oldId == undefined) {
- $location.path($location.path().replace('new', q.id)).replace();
- } else {
- // TODO: replace this with a safer method
- $location.path($location.path().replace(oldId, q.id)).replace();
- }
- }
- });
- };
-
- $scope.duplicateQuery = function () {
- var oldId = $scope.query.id;
- $scope.query.id = null;
- $scope.query.ttl = -1;
-
- $scope.saveQuery(true, oldId);
- };
-
- // Query Editor:
- $scope.editorOptions = {
- mode: 'text/x-sql',
- lineWrapping: true,
- lineNumbers: true,
- readOnly: false,
- matchBrackets: true,
- autoCloseBrackets: true
- };
-
- $scope.refreshOptions = [
- {value: -1, name: 'No Refresh'},
- ]
-
- _.each(_.range(1, 13), function(i) {
- $scope.refreshOptions.push({value: i*3600, name: 'Every ' + i + 'h'});
- })
-
- $scope.refreshOptions.push({value: 24*3600, name: 'Every 24h'});
-
-
- $scope.$watch('queryResult && queryResult.getError()', function (newError, oldError) {
- if (newError == undefined) {
- return;
- }
-
- if (oldError == undefined && newError != undefined) {
- $scope.lockButton(false);
- }
- });
-
- $scope.$watch('queryResult && queryResult.getData()', function (data, oldData) {
- if (!data) {
- return;
- }
-
- if ($scope.queryResult.getId() == null) {
- $scope.dataUri = "";
- } else {
- $scope.dataUri = '/api/query_results/' + $scope.queryResult.getId() + '.csv';
- $scope.dataFilename = $scope.query.name.replace(" ", "_") + moment($scope.queryResult.getUpdatedAt()).format("_YYYY_MM_DD") + ".csv";
- }
- });
-
- $scope.$watch("queryResult && queryResult.getStatus()", function (status) {
- if (!status) {
- return;
- }
-
- if (status == "done") {
- if ($scope.query.id && $scope.query.latest_query_data_id != $scope.queryResult.getId() &&
- $scope.query.query_hash == $scope.queryResult.query_result.query_hash) {
- Query.save({'id': $scope.query.id, 'latest_query_data_id': $scope.queryResult.getId()})
- }
- $scope.query.latest_query_data_id = $scope.queryResult.getId();
- $scope.lockButton(false);
- }
- });
-
- if ($routeParams.queryId != undefined) {
- $scope.query = Query.get({id: $routeParams.queryId}, function() {
- $scope.queryResult = $scope.query.getQueryResult();
- });
- } else {
- $scope.query = new Query({query: "", name: "New Query", ttl: -1, user: currentUser.name});
- $scope.lockButton(false);
- }
-
- $scope.$watch('query.name', function() {
- $scope.$parent.pageTitle = $scope.query.name;
- });
-
- $scope.executeQuery = function() {
- $scope.queryResult = $scope.query.getQueryResult(0);
- $scope.lockButton(true);
- }
- }
-
- var QueriesCtrl = function($scope, $http, $location, Query) {
- $scope.$parent.pageTitle = "All Queries";
-
- $scope.queries = Query.query();
- $scope.tabs = [{"name": "My Queries", "key": "my"}, {"key": "all", "name": "All Queries"}, {"key": "drafts", "name": "Drafts"}];
-
- $scope.$watch('selectedTab', function(tab) {
- if (tab) {
- $scope.$parent.pageTitle = tab.name;
- }
- })
-
- $scope.filterQueries = function(query) {
- if (!$scope.selectedTab) {
- return false;
- }
-
- if ($scope.selectedTab.key == 'my') {
- return query.user == currentUser.name && query.name != 'New Query';
- } else if ($scope.selectedTab.key == 'drafts') {
- return query.user == currentUser.name && query.name == 'New Query';
- }
-
- return query.name != 'New Query';
- }
- }
-
- var MainCtrl = function ($scope, Dashboard, notifications) {
- $scope.dashboards = Dashboard.query();
- $scope.currentUser = currentUser;
- $scope.newDashboard = {
- 'name': null,
- 'layout': null
- }
-
- $(window).click(function () {
- notifications.getPermissions();
- });
- }
-
- var IndexCtrl = function($scope, Dashboard) {
- $scope.$parent.pageTitle = "Home";
-
-
- $scope.archiveDashboard = function(dashboard) {
- if (confirm('Are you sure you want to delete "' + dashboard.name + '" dashboard?')) {
- dashboard.$delete(function() {
- $scope.$parent.dashboards = Dashboard.query();
- });
- }
- }
- }
-
- angular.module('redash.controllers', [])
- .controller('DashboardCtrl', ['$scope', '$routeParams', '$http', 'Dashboard', DashboardCtrl])
- .controller('WidgetCtrl', ['$scope', '$http', 'Query', WidgetCtrl])
- .controller('QueriesCtrl', ['$scope', '$http', '$location', 'Query', QueriesCtrl])
- .controller('QueryFiddleCtrl', ['$scope', '$routeParams', '$http', '$location', 'growl', 'Query', QueryFiddleCtrl])
- .controller('IndexCtrl', ['$scope', 'Dashboard', IndexCtrl])
- .controller('MainCtrl', ['$scope', 'Dashboard', 'notifications', MainCtrl]);
-})();
diff --git a/rd_ui/app/scripts/directives.js b/rd_ui/app/scripts/directives.js
deleted file mode 100644
index a2149954e..000000000
--- a/rd_ui/app/scripts/directives.js
+++ /dev/null
@@ -1,222 +0,0 @@
-var directives = angular.module('redash.directives', []);
-directives.directive('rdTabs', ['$location', '$rootScope', function($location, $rootScope) {
- return {
- restrict: 'E',
- scope: {
- tabsCollection: '=',
- selectedTab: '='
- },
- template: '',
- replace: true,
- link: function($scope, element, attrs) {
- $scope.selectTab = function(tabKey) {
- $scope.selectedTab = _.find($scope.tabsCollection, function(tab) { return tab.key == tabKey; });
- }
-
- $scope.$watch(function() { return $location.hash()}, function(hash) {
- if (hash) {
- $scope.selectTab($location.hash());
- } else {
- $scope.selectTab($scope.tabsCollection[0].key);
- }
- });
- }
- }
-}])
-
-directives.directive('editDashboardForm', ['$http', '$location', '$timeout', 'Dashboard', function($http, $location, $timeout, Dashboard) {
- return {
- restrict: 'E',
- scope: {
- dashboard: '='
- },
- templateUrl: '/views/edit_dashboard.html',
- replace: true,
- link: function($scope, element, attrs) {
- $scope.$watch('dashboard.widgets', function() {
- if ($scope.dashboard.widgets) {
- $scope.layout = [];
- _.each($scope.dashboard.widgets, function(row, rowIndex) {
- _.each(row, function(widget, colIndex) {
- $scope.layout.push({
- id: widget.id,
- col: colIndex+1,
- row: rowIndex+1,
- ySize: 1,
- xSize: widget.width,
- name: widget.query.name
- })
- })
- });
-
- $timeout(function () {
- $(".gridster ul").gridster({
- widget_margins: [5, 5],
- widget_base_dimensions: [260, 100],
- min_cols: 2,
- max_cols: 2,
- serialize_params: function ($w, wgd) {
- return { col: wgd.col, row: wgd.row, id: $w.data('widget-id') }
- }
- });
- });
- }
- });
-
- $scope.saveDashboard = function() {
- $scope.saveInProgress = true;
- // TODO: we should use the dashboard service here.
- if ($scope.dashboard.id) {
- var positions = $(element).find('.gridster ul').data('gridster').serialize();
- var layout = [];
- _.each(_.sortBy(positions, function (pos) {
- return pos.row * 10 + pos.col;
- }), function (pos) {
- var row = pos.row - 1;
- var col = pos.col - 1;
- layout[row] = layout[row] || [];
- if (col > 0 && layout[row][col - 1] == undefined) {
- layout[row][col - 1] = pos.id;
- } else {
- layout[row][col] = pos.id;
- }
-
- });
- $scope.dashboard.layout = layout;
-
- layout = JSON.stringify(layout);
- $http.post('/api/dashboards/' + $scope.dashboard.id, {'name': $scope.dashboard.name, 'layout': layout}).success(function(response) {
- $scope.dashboard = new Dashboard(response);
- $scope.saveInProgress = false;
- $(element).modal('hide');
- })
- } else {
- $http.post('/api/dashboards', {'name': $scope.dashboard.name}).success(function(response) {
- $(element).modal('hide');
- $location.path('/dashboard/' + response.slug).replace();
- })
- }
- }
-
- }
- }
-}])
-
-
-directives.directive('newWidgetForm', ['$http', function($http) {
- return {
- restrict: 'E',
- scope: {
- dashboard: '='
- },
- templateUrl: '/views/new_widget_form.html',
- replace: true,
- link: function($scope, element, attrs) {
- $scope.widgetTypes = [{name: 'Chart', value: 'chart'}, {name: 'Table', value: 'grid'}];
- $scope.widgetSizes = [{name: 'Regular Size', value: 1}, {name: 'Double Size', value: 2}];
-
- var reset = function() {
- $scope.saveInProgress = false;
- $scope.widgetType = 'chart';
- $scope.widgetSize = 1;
- $scope.queryId = null;
- }
-
- reset();
-
- $scope.saveWidget = function() {
- $scope.saveInProgress = true;
-
- var widget = {
- 'query_id': $scope.queryId,
- 'dashboard_id': $scope.dashboard.id,
- 'type': $scope.widgetType,
- 'options': {},
- 'width': $scope.widgetSize
- }
-
- $http.post('/api/widgets', widget).success(function(response) {
- // update dashboard layout
- $scope.dashboard.layout = response['layout'];
- if (response['new_row']) {
- $scope.dashboard.widgets.push([response['widget']]);
- } else {
- $scope.dashboard.widgets[$scope.dashboard.widgets.length-1].push(response['widget']);
- }
-
- // close the dialog
- $('#add_query_dialog').modal('hide');
- reset();
- })
- }
-
- }
- }
-}])
-
-// From: http://jsfiddle.net/joshdmiller/NDFHg/
-directives.directive('editInPlace', function () {
- return {
- restrict: 'E',
- scope: { value: '=' },
- template: ' ',
- link: function ($scope, element, attrs) {
- // Let's get a reference to the input element, as we'll want to reference it.
- var inputElement = angular.element(element.children()[1]);
-
- // This directive should have a set class so we can style it.
- element.addClass('edit-in-place');
-
- // Initially, we're not editing.
- $scope.editing = false;
-
- // ng-click handler to activate edit-in-place
- $scope.edit = function () {
- $scope.editing = true;
-
- // We control display through a class on the directive itself. See the CSS.
- element.addClass('active');
-
- // And we must focus the element.
- // `angular.element()` provides a chainable array, like jQuery so to access a native DOM function,
- // we have to reference the first element in the array.
- inputElement[0].focus();
- };
-
- $(inputElement).blur(function() {
- $scope.editing = false;
- element.removeClass('active');
- })
- }
- };
-});
-
-directives.directive('rdTimer', ['$timeout', function ($timeout) {
- return {
- restrict: 'E',
- scope: { timestamp: '=' },
- template: '{{currentTime}}',
- controller: ['$scope' ,function ($scope) {
- $scope.currentTime = "00:00:00";
- var currentTimeout = null;
-
- var updateTime = function() {
- $scope.currentTime = moment(moment() - moment($scope.timestamp)).utc().format("HH:mm:ss")
- currentTimeout = $timeout(updateTime, 1000);
- }
-
- var cancelTimer = function() {
- if (currentTimeout) {
- $timeout.cancel(currentTimeout);
- currentTimeout = null;
- }
- }
-
- updateTime();
-
- $scope.$on('$destroy', function () {
- cancelTimer();
- });
- }]
- };
-}]);
\ No newline at end of file
diff --git a/rd_ui/app/scripts/filters.js b/rd_ui/app/scripts/filters.js
deleted file mode 100644
index 629ded993..000000000
--- a/rd_ui/app/scripts/filters.js
+++ /dev/null
@@ -1,35 +0,0 @@
-angular.module('redash.filters', []).
- filter('durationHumanize', function () {
- return function (duration) {
- var humanized = "";
- if (duration == undefined) {
- humanized = "-";
- } else if (duration < 60) {
- humanized = Math.round(duration) + "s";
- } else if (duration >= 3600) {
- var hours = Math.round(parseFloat(duration) / 60.0 / 60.0)
- humanized = hours + "h";
- } else {
- var minutes = Math.round(parseFloat(duration) / 60.0);
- humanized = minutes + "m";
- }
- return humanized;
- }
- })
-
- .filter('toHuman', function() {
- return function(text) {
- return text.replace(/_/g, ' ').replace(/(?:^|\s)\S/g, function (a) {
- return a.toUpperCase();
- });
- }
- })
-
- .filter('colWidth', function () {
- return function (widgetWidth) {
- if (widgetWidth == 1) {
- return 6;
- }
- return 12;
- }
- });
\ No newline at end of file
diff --git a/rd_ui/app/scripts/ng-highchart.js b/rd_ui/app/scripts/ng-highchart.js
deleted file mode 100644
index 00e83c5db..000000000
--- a/rd_ui/app/scripts/ng-highchart.js
+++ /dev/null
@@ -1,62 +0,0 @@
-'use strict';
-
-angular.module('highchart', [])
- .directive('chart', ['$timeout', function ($timeout) {
- return {
- restrict: 'E',
- template: '
',
- scope: {
- options: "=options",
- series: "=series"
- },
- transclude: true,
- replace: true,
-
- link: function (scope, element, attrs) {
- var chartsDefaults = {
- chart: {
- renderTo: element[0],
- type: attrs.type || null,
- height: attrs.height || null,
- width: attrs.width || null
- }
- };
-
- var deepCopy = true;
- var newSettings = {};
- $.extend(deepCopy, newSettings, chartsDefaults, scope.options);
-
- // Making sure that the DOM is ready before creating the chart element, so it gets proper width.
- $timeout(function(){
- scope.chart = new Highcharts.Chart(newSettings);
-
- //Update when charts data changes
- scope.$watch(function () {
- return (scope.series && scope.series.length) || 0;
- }, function (length) {
- if (!length || length == 0) {
- scope.chart.showLoading();
- } else {
-
- while(scope.chart.series.length > 0) {
- scope.chart.series[0].remove(true);
- }
-
- scope.chart.counters.color = 0;
-
-
- _.each(scope.series, function(s) {
- scope.chart.addSeries(s);
- })
-
- scope.chart.redraw();
- scope.chart.hideLoading();
- };
- }, true);
- });
-
-
- }
- };
-
- }]);
\ No newline at end of file
diff --git a/rd_ui/app/scripts/query_fiddle/renderers.js b/rd_ui/app/scripts/query_fiddle/renderers.js
deleted file mode 100644
index 1594d1ba2..000000000
--- a/rd_ui/app/scripts/query_fiddle/renderers.js
+++ /dev/null
@@ -1,242 +0,0 @@
-var renderers = angular.module('redash.renderers', []);
-var defaultChartOptions = {
- "title": {
- "text": null
- },
- "tooltip": {
- valueDecimals: 2
- },
- xAxis: {
- type: 'datetime'
- },
- yAxis: {
- title: {
- text: null
- }
- },
- exporting: {
- chartOptions: {
- title: {
- text: this.description
- }
- },
- buttons: {
- contextButton: {
- menuItems: [
- {
- text: 'Toggle % Stacking',
- onclick: function () {
- var newStacking = "normal";
- if (this.series[0].options.stacking == "normal") {
- newStacking = "percent";
- }
-
- _.each(this.series, function (series) {
- series.update({stacking: newStacking}, true);
- });
- }
- }
- ]
- }
- }
- },
- credits: {
- enabled: false
- },
- plotOptions: {
- "column": {
- "stacking": "normal",
- "pointPadding": 0,
- "borderWidth": 1,
- "groupPadding": 0,
- "shadow": false
- }
- },
- "series": []
-};
-
-renderers.directive('chartRenderer', function () {
- return {
- restrict: 'E',
- scope: {
- queryResult: '=',
- stacking: '&'
- },
- template: " ",
- replace: false,
- controller: ['$scope', function ($scope) {
- $scope.chartSeries = [];
- $scope.chartOptions = defaultChartOptions;
-
- $scope.$watch('queryResult && queryResult.getData()', function (data) {
- if (!data) {
- return;
- }
-
- if ($scope.queryResult.getData() == null) {
- $scope.chartSeries.splice(0, $scope.chartSeries.length);
- } else {
- $scope.chartSeries.splice(0, $scope.chartSeries.length);
-
- var stacking = null;
- if ($scope.stacking() === undefined) {
- stacking = 'normal';
- }
-
- _.each($scope.queryResult.getChartData(), function (s) {
- $scope.chartSeries.push(_.extend(s, {'stacking': stacking}));
- });
-
- // TODO: move this to the parent controller
- // notifications.showNotification("RedDash", $scope.query.name + " updated.");
- }
- });
- }]
- }
-})
-
-renderers.directive('gridRenderer', function () {
- return {
- restrict: 'E',
- scope: {
- queryResult: '=',
- itemsPerPage: '='
- },
- templateUrl: "/views/grid_renderer.html",
- replace: false,
- controller: ['$scope', '$filter', function ($scope, $filter) {
- $scope.gridColumns = [];
- $scope.gridData = [];
- $scope.gridConfig = {
- isPaginationEnabled: true,
- itemsByPage: $scope.itemsPerPage || 15,
- maxSize: 8
- }
-
- $scope.$watch('queryResult && queryResult.getData()', function (data) {
- if (!data) {
- return;
- }
-
- if ($scope.queryResult.getData() == null) {
- $scope.gridColumns = [];
- $scope.gridData = [];
- $scope.filters = [];
- } else {
- $scope.gridColumns = _.map($scope.queryResult.getColumnCleanNames(), function (col, i) {
-
- return {
- 'label': $scope.queryResult.getColumnFriendlyNames()[i],
- 'map': col
- }
- });
-
- $scope.filters = $scope.queryResult.getFilters();
-
- var gridData = _.map($scope.queryResult.getData(), function (row) {
- var newRow = {};
- _.each(row, function (val, key) {
- // TODO: hack to detect date fields
- if (val > 1000 * 1000 * 1000 * 100) {
- newRow[$scope.queryResult.getColumnCleanName(key)] = moment(val).format("DD/MM/YY HH:mm");
- } else if (angular.isNumber(val)) {
- newRow[$scope.queryResult.getColumnCleanName(key)] = $filter('number')(val, 2);
- } else {
- newRow[$scope.queryResult.getColumnCleanName(key)] = val;
- }
-
- })
- return newRow;
- });
-
- $scope.gridData = _.clone(gridData);
-
- $scope.$watch('filters', function (filters) {
- $scope.gridData = _.filter(gridData, function (row) {
- return _.reduce(filters, function (memo, filter) {
- if (filter.current == 'All') {
- return memo && true;
- }
-
- return (memo && row[$scope.queryResult.getColumnCleanName(filter.name)] == filter.current);
- }, true);
- });
- }, true);
- }
- });
- }]
- }
-})
-
-renderers.directive('pivotTableRenderer', function () {
- return {
- restrict: 'E',
- scope: {
- queryResult: '='
- },
- template: "",
- replace: false,
- link: function($scope, element, attrs) {
- $scope.$watch('queryResult && queryResult.getData()', function (data) {
- if (!data) {
- return;
- }
-
- if ($scope.queryResult.getData() == null) {
- } else {
- $(element).pivotUI($scope.queryResult.getData(), {
- renderers: $.pivotUtilities.renderers
- }, true);
- }
- });
- }
- }
-})
-
-renderers.directive('cohortRenderer', function() {
- return {
- restrict: 'E',
- scope: {
- queryResult: '='
- },
- template: "",
- replace: false,
- link: function($scope, element, attrs) {
- $scope.$watch('queryResult && queryResult.getData()', function (data) {
- if (!data) {
- return;
- }
-
- if ($scope.queryResult.getData() == null) {
-
- } else {
- var sortedData = _.sortBy($scope.queryResult.getData(), "date");
- var grouped = _.groupBy(sortedData, "date");
- var data = _.map(grouped, function(values, date) {
- var row = [values[0].total];
- _.each(values, function(value) { row.push(value.value); });
- return row;
- });
-
- var initialDate = moment(sortedData[0].date).toDate(),
- container = angular.element(element)[0];
-
- Cornelius.draw({
- initialDate: initialDate,
- container: container,
- cohort: data,
- title: null,
- timeInterval: 'daily',
- labels: {
- time: 'Activation Day',
- people: 'Users'
- },
- formatHeaderLabel: function (i) {
- return "Day " + (i - 1);
- }
- });
- }
- });
- }
- }
-})
\ No newline at end of file
diff --git a/rd_ui/app/scripts/services.js b/rd_ui/app/scripts/services.js
deleted file mode 100644
index 010fbccc6..000000000
--- a/rd_ui/app/scripts/services.js
+++ /dev/null
@@ -1,272 +0,0 @@
-(function () {
- var QueryResult = function($resource, $timeout) {
- var QueryResultResource = $resource('/api/query_results/:id', {id: '@id'}, {'post': {'method': 'POST'}});
- var Job = $resource('/api/jobs/:id', {id: '@id'});
-
- var updateFunction = function (props) {
- angular.extend(this, props);
- if ('query_result' in props) {
- this.status = "done";
-
- _.each(this.query_result.data.rows, function (row) {
- _.each(row, function (v, k) {
- if (_.isString(v)) {
- var date = moment(v);
- if (date.isValid()) {
- row[k] = date;
- }
- }
- });
- });
- } else if (this.job.status == 3) {
- this.status = "processing";
- } else {
- this.status = undefined;
- }
- }
-
- function QueryResult(props) {
- this.job = {};
- this.query_result = {};
- this.status = "waiting";
-
- this.updatedAt = moment();
-
- if (props) {
- updateFunction.apply(this, [props]);
- }
- }
-
- var statuses = {
- 1: "waiting",
- 2: "processing",
- 3: "done",
- 4: "failed"
- }
-
- QueryResult.prototype.update = updateFunction;
-
- QueryResult.prototype.getId = function() {
- var id = null;
- if ('query_result' in this) {
- id = this.query_result.id;
- }
- return id;
- }
-
- QueryResult.prototype.getStatus = function() {
- return this.status || statuses[this.job.status];
- }
-
- QueryResult.prototype.getError = function() {
- // TODO: move this logic to the server...
- if (this.job.error == "None") {
- return undefined;
- }
-
- return this.job.error;
- }
-
- QueryResult.prototype.getUpdatedAt = function() {
- return this.query_result.retrieved_at || this.job.updated_at*1000.0 || this.updatedAt;
- }
-
- QueryResult.prototype.getRuntime = function() {
- return this.query_result.runtime;
- }
-
- QueryResult.prototype.getData = function() {
- if (!this.query_result.data) {
- return null;
- }
-
- var data = this.query_result.data.rows;
- return data;
- }
-
- QueryResult.prototype.getChartData = function () {
- var series = {};
-
- _.each(this.getData(), function (row) {
- var point = {};
- var seriesName = "";
- var yName = "";
- var xName = "";
-
- _.map(row, function (value, definition) {
- var type = definition.split("::")[1];
- var name = definition.split("::")[0];
-
- if (type == 'x') {
- xName = name;
- point[type] = value;
- }
-
- if (type == 'y') {
- yName = name;
- point[type] = value;
- }
-
- if (type == 'series') {
- seriesName = value;
- }
- });
-
- if (seriesName == "") {
- seriesName = yName;
- }
-
- if (series[seriesName] == undefined) {
- series[seriesName] = {
- name: seriesName,
- type: 'column',
- data: []
- }
- }
-
- series[seriesName]['data'].push(point);
- });
-
- return _.values(series);
- };
-
- QueryResult.prototype.getColumns = function () {
- if (this.columns == undefined) {
- this.columns = _.map(this.query_result.data.columns, function(v) {
- return v.name;
- })
- }
-
- return this.columns;
- }
-
- QueryResult.prototype.getColumnCleanName = function (column) {
- var parts = column.split('::');
- var name = parts[1];
- if (parts[0] != '') {
- name = parts[0].replace(' ', '_').replace(/\?/g,'');
- }
- return name;
- }
-
- QueryResult.prototype.getColumnFriendlyName = function (column) {
- return this.getColumnCleanName(column).replace('_', ' ').replace(/(?:^|\s)\S/g, function (a) {
- return a.toUpperCase();
- });
- }
-
- QueryResult.prototype.getColumnCleanNames = function () {
- return _.map(this.getColumns(), function (col) {
- return this.getColumnCleanName(col);
- }, this);
- }
-
- QueryResult.prototype.getColumnFriendlyNames = function () {
- return _.map(this.getColumns(), function (col) {
- return this.getColumnFriendlyName(col);
- }, this);
- }
-
- QueryResult.prototype.getFilters = function () {
- var filterNames = [];
- _.each(this.getColumns(), function (col) {
- if (col.split('::')[1] == 'filter') {
- filterNames.push(col);
- }
- });
-
- var filterValues = [];
- _.each(this.getData(), function (row) {
- _.each(filterNames, function (filter, i) {
- if (filterValues[i] == undefined) {
- filterValues[i] = [];
- }
- filterValues[i].push(row[filter]);
- })
- });
-
- var filters = _.map(filterNames, function (filter, i) {
- var f = {
- name: filter,
- friendlyName: this.getColumnFriendlyName(filter),
- values: _.uniq(filterValues[i])
- };
-
- f.current = f.values[0];
- return f;
- }, this);
-
- return filters;
- };
-
- var refreshStatus = function(queryResult, query, ttl) {
- Job.get({'id': queryResult.job.id}, function(response) {
- queryResult.update(response);
-
- if (queryResult.getStatus() == "processing" && queryResult.job.query_result_id && queryResult.job.query_result_id != "None") {
- QueryResultResource.get({'id': queryResult.job.query_result_id}, function(response) {
- queryResult.update(response);
- });
- } else if (queryResult.getStatus() != "failed") {
- $timeout(function () {
- refreshStatus(queryResult, query, ttl);
- }, 3000);
- }
- })
- }
-
- QueryResult.getById = function (id) {
- var queryResult = new QueryResult();
-
- QueryResultResource.get({'id': id}, function (response) {
- queryResult.update(response);
- });
-
- return queryResult;
- }
-
- QueryResult.get = function (query, ttl) {
- var queryResult = new QueryResult();
-
- QueryResultResource.post({'query': query, 'ttl': ttl}, function (response) {
- queryResult.update(response);
-
- if ('job' in response) {
- refreshStatus(queryResult, query, ttl);
- }
- });
-
- return queryResult;
- }
-
- return QueryResult;
- }
-
- var Query = function ($resource, QueryResult) {
- var Query = $resource('/api/queries/:id', {id: '@id'});
-
- Query.prototype.getQueryResult = function(ttl) {
- if (ttl == undefined) {
- ttl = this.ttl;
- }
-
- var queryResult = null;
- if (this.latest_query_data && ttl > 0) {
- queryResult = new QueryResult({'query_result': this.latest_query_data});
- } else if (this.latest_query_data_id && ttl > 0) {
- queryResult = QueryResult.getById(this.latest_query_data_id);
- } else {
- queryResult = QueryResult.get(this.query, ttl);
- }
-
- return queryResult;
- }
-
- return Query;
- }
-
- angular.module('redash.services', [])
- .factory('QueryResult', ['$resource', '$timeout', QueryResult])
- .factory('Query', ['$resource', 'QueryResult', Query])
-
-})();
diff --git a/rd_ui/app/scripts/services/dashboards.js b/rd_ui/app/scripts/services/dashboards.js
deleted file mode 100644
index 890c55c6f..000000000
--- a/rd_ui/app/scripts/services/dashboards.js
+++ /dev/null
@@ -1,12 +0,0 @@
-(function () {
- var Dashboard = function($resource) {
- var resource = $resource('/api/dashboards/:slug', {slug: '@slug'});
- resource.prototype.canEdit = function() {
- return currentUser.is_admin || currentUser.name == this.user;
- }
- return resource;
- }
-
- angular.module('redash.services')
- .factory('Dashboard', ['$resource', Dashboard])
-})();
diff --git a/rd_ui/app/scripts/services/notifications.js b/rd_ui/app/scripts/services/notifications.js
deleted file mode 100644
index 455569955..000000000
--- a/rd_ui/app/scripts/services/notifications.js
+++ /dev/null
@@ -1,53 +0,0 @@
-(function () {
- var notifications = function () {
- var notificationService = {};
- var lastNotification = null;
-
- notificationService.isSupported = function () {
- if (window.webkitNotifications) {
- return true;
- } else {
- console.log("HTML5 notifications are not supported.");
- return false;
- }
- }
-
- notificationService.getPermissions = function () {
- if (!this.isSupported()) {
- return;
- }
-
- if (!window.webkitNotifications.checkPermission() == 0) { // 0 is PERMISSION_ALLOWED
- window.webkitNotifications.requestPermission();
- }
- }
-
- notificationService.showNotification = function (title, content) {
- if (!this.isSupported()) {
- return;
- }
-
- if (document.webkitVisibilityState && document.webkitVisibilityState == 'visible') {
- return;
- }
-
- if (lastNotification) {
- lastNotification.cancel();
- }
-
- var notification = window.webkitNotifications.createNotification('', title, content);
- lastNotification = notification;
- notification.onclick = function () {
- window.focus();
- this.cancel();
- };
-
- notification.show()
- }
-
- return notificationService;
- }
-
- angular.module('redash.services')
- .factory('notifications', notifications);
-})();
diff --git a/rd_ui/app/scripts/smart-table.js b/rd_ui/app/scripts/smart-table.js
deleted file mode 100644
index 33249a5e6..000000000
--- a/rd_ui/app/scripts/smart-table.js
+++ /dev/null
@@ -1,936 +0,0 @@
-/* Column module */
-
-(function (global, angular) {
- "use strict";
- var smartTableColumnModule = angular.module('smartTable.column', ['smartTable.templateUrlList']).constant('DefaultColumnConfiguration', {
- isSortable: true,
- isEditable: false,
- type: 'text',
-
-
- //it is useless to have that empty strings, but it reminds what is available
- headerTemplateUrl: '',
- map: '',
- label: '',
- sortPredicate: '',
- formatFunction: '',
- formatParameter: '',
- filterPredicate: '',
- cellTemplateUrl: '',
- headerClass: '',
- cellClass: ''
- });
-
- function ColumnProvider(DefaultColumnConfiguration, templateUrlList) {
-
- function Column(config) {
- if (!(this instanceof Column)) {
- return new Column(config);
- }
- angular.extend(this, config);
- }
-
- this.setDefaultOption = function (option) {
- angular.extend(Column.prototype, option);
- };
-
- DefaultColumnConfiguration.headerTemplateUrl = templateUrlList.defaultHeader;
- this.setDefaultOption(DefaultColumnConfiguration);
-
- this.$get = function () {
- return Column;
- };
- }
-
- ColumnProvider.$inject = ['DefaultColumnConfiguration', 'templateUrlList'];
- smartTableColumnModule.provider('Column', ColumnProvider);
-
- //make it global so it can be tested
- global.ColumnProvider = ColumnProvider;
-})(window, angular);
-
-
-
-/* Directives */
-(function (angular) {
- "use strict";
- angular.module('smartTable.directives', ['smartTable.templateUrlList', 'smartTable.templates'])
- .directive('smartTable', ['templateUrlList', 'DefaultTableConfiguration', function (templateList, defaultConfig) {
- return {
- restrict: 'EA',
- scope: {
- columnCollection: '=columns',
- dataCollection: '=rows',
- config: '='
- },
- replace: 'true',
- templateUrl: templateList.smartTable,
- controller: 'TableCtrl',
- link: function (scope, element, attr, ctrl) {
-
- var templateObject;
-
- scope.$watch('config', function (config) {
- var newConfig = angular.extend({}, defaultConfig, config),
- length = scope.columns !== undefined ? scope.columns.length : 0;
-
- ctrl.setGlobalConfig(newConfig);
-
- //remove the checkbox column if needed
- if (newConfig.selectionMode !== 'multiple' || newConfig.displaySelectionCheckbox !== true) {
- for (var i = length - 1; i >= 0; i--) {
- if (scope.columns[i].isSelectionColumn === true) {
- ctrl.removeColumn(i);
- }
- }
- } else {
- //add selection box column if required
- ctrl.insertColumn({cellTemplateUrl: templateList.selectionCheckbox, headerTemplateUrl: templateList.selectAllCheckbox, isSelectionColumn: true}, 0);
- }
- }, true);
-
- //insert columns from column config
- //TODO add a way to clean all columns
- scope.$watch('columnCollection', function (oldValue, newValue) {
- if (scope.columnCollection) {
- scope.columns.length = 0;
- for (var i = 0, l = scope.columnCollection.length; i < l; i++) {
-
- ctrl.insertColumn(scope.columnCollection[i]);
- }
- } else {
- //or guess data Structure
- if (scope.dataCollection && scope.dataCollection.length > 0) {
- templateObject = scope.dataCollection[0];
- angular.forEach(templateObject, function (value, key) {
- if (key[0] != '$') {
- ctrl.insertColumn({label: key, map: key});
- }
- });
- }
- }
- }, true);
-
- //if item are added or removed into the data model from outside the grid
- scope.$watch('dataCollection', function (oldValue, newValue) {
- if (oldValue !== newValue) {
- ctrl.sortBy();//it will trigger the refresh... some hack ?
- }
- });
-
- }
- };
- }])
- //just to be able to select the row
- .directive('smartTableDataRow', function () {
-
- return {
- require: '^smartTable',
- restrict: 'C',
- link: function (scope, element, attr, ctrl) {
-
- element.bind('click', function () {
- scope.$apply(function () {
- ctrl.toggleSelection(scope.dataRow);
- })
- });
- }
- };
- })
- //header cell with sorting functionality or put a checkbox if this column is a selection column
- .directive('smartTableHeaderCell',function () {
- return {
- restrict: 'C',
- require: '^smartTable',
- link: function (scope, element, attr, ctrl) {
- element.bind('click', function () {
- scope.$apply(function () {
- ctrl.sortBy(scope.column);
- });
- })
- }
- };
- }).directive('smartTableSelectAll', function () {
- return {
- restrict: 'C',
- require: '^smartTable',
- link: function (scope, element, attr, ctrl) {
- element.bind('click', function (event) {
- ctrl.toggleSelectionAll(element[0].checked === true);
- })
- }
- };
- })
- //credit to Valentyn shybanov : http://stackoverflow.com/questions/14544741/angularjs-directive-to-stoppropagation
- .directive('stopEvent', function () {
- return {
- restrict: 'A',
- link: function (scope, element, attr) {
- element.bind(attr.stopEvent, function (e) {
- e.stopPropagation();
- });
- }
- }
- })
- //the global filter
- .directive('smartTableGlobalSearch', ['templateUrlList', function (templateList) {
- return {
- restrict: 'C',
- require: '^smartTable',
- scope: {
- columnSpan: '@'
- },
- templateUrl: templateList.smartTableGlobalSearch,
- replace: false,
- link: function (scope, element, attr, ctrl) {
-
- scope.searchValue = '';
-
- scope.$watch('searchValue', function (value) {
- //todo perf improvement only filter on blur ?
- ctrl.search(value);
- });
- }
- }
- }])
- //a customisable cell (see templateUrl) and editable
- //TODO check with the ng-include strategy
- .directive('smartTableDataCell', ['$filter', '$http', '$templateCache', '$compile', '$parse', function (filter, http, templateCache, compile, parse) {
- return {
- restrict: 'C',
- link: function (scope, element) {
- var
- column = scope.column,
- row = scope.dataRow,
- format = filter('format'),
- getter = parse(column.map),
- childScope;
-
- //can be useful for child directives
- scope.formatedValue = format(getter(row), column.formatFunction, column.formatParameter);
-
- function defaultContent() {
- //clear content
- if (column.isEditable) {
- element.html('
');
- compile(element.contents())(scope);
- } else {
- element.text(scope.formatedValue);
- }
- }
-
- scope.$watch('column.cellTemplateUrl', function (value) {
-
- if (value) {
- //we have to load the template (and cache it) : a kind of ngInclude
- http.get(value, {cache: templateCache}).success(function (response) {
-
- //create a scope
- childScope = scope.$new();
- //compile the element with its new content and new scope
- element.html(response);
- compile(element.contents())(childScope);
- }).error(defaultContent);
-
- } else {
- defaultContent();
- }
- });
- }
- };
- }])
- //directive that allows type to be bound in input
- .directive('inputType', function () {
- return {
- restrict: 'A',
- priority: 1,
- link: function (scope, ielement, iattr) {
- //force the type to be set before inputDirective is called
- var type = scope.$eval(iattr.type);
- iattr.$set('type', type);
- }
- };
- })
- //an editable content in the context of a cell (see row, column)
- .directive('editableCell', ['templateUrlList', '$parse', function (templateList, parse) {
- return {
- restrict: 'EA',
- require: '^smartTable',
- templateUrl: templateList.editableCell,
- scope: {
- row: '=',
- column: '=',
- type: '='
- },
- replace: true,
- link: function (scope, element, attrs, ctrl) {
- var form = angular.element(element.children()[1]),
- input = angular.element(form.children()[0]),
- getter = parse(scope.column.map);
-
- //init values
- scope.isEditMode = false;
- scope.value = getter(scope.row);
-
-
- scope.submit = function () {
- //update model if valid
- if (scope.myForm.$valid === true) {
- ctrl.updateDataRow(scope.row, scope.column.map, scope.value);
- ctrl.sortBy();//it will trigger the refresh... (ie it will sort, filter, etc with the new value)
- }
- scope.toggleEditMode();
- };
-
- scope.toggleEditMode = function () {
- scope.value = getter(scope.row);
- scope.isEditMode = scope.isEditMode !== true;
- };
-
- scope.$watch('isEditMode', function (newValue, oldValue) {
- if (newValue) {
- input[0].select();
- input[0].focus();
- }
- });
-
- input.bind('blur', function () {
- scope.$apply(function () {
- scope.submit();
- });
- });
- }
- };
- }]);
-})(angular);
-
-/* Filters */
-(function (angular) {
- "use strict";
- angular.module('smartTable.filters', []).
- constant('DefaultFilters', ['currency', 'date', 'json', 'lowercase', 'number', 'uppercase']).
- filter('format', ['$filter', 'DefaultFilters', function (filter, defaultfilters) {
- return function (value, formatFunction, filterParameter) {
-
- var returnFunction;
-
- if (formatFunction && angular.isFunction(formatFunction)) {
- returnFunction = formatFunction;
- } else {
- returnFunction = defaultfilters.indexOf(formatFunction) !== -1 ? filter(formatFunction) : function (value) {
- return value;
- };
- }
- return returnFunction(value, filterParameter);
- };
- }]);
-})(angular);
-
-
-/*table module */
-
-(function (angular) {
- "use strict";
- angular.module('smartTable.table', ['smartTable.column', 'smartTable.utilities', 'smartTable.directives', 'smartTable.filters', 'ui.bootstrap.pagination.smartTable'])
- .constant('DefaultTableConfiguration', {
- selectionMode: 'none',
- isGlobalSearchActivated: false,
- displaySelectionCheckbox: false,
- isPaginationEnabled: true,
- itemsByPage: 10,
- maxSize: 5,
-
- //just to remind available option
- sortAlgorithm: '',
- filterAlgorithm: ''
- })
- .controller('TableCtrl', ['$scope', 'Column', '$filter', '$parse', 'ArrayUtility', 'DefaultTableConfiguration', function (scope, Column, filter, parse, arrayUtility, defaultConfig) {
-
- scope.columns = [];
- scope.dataCollection = scope.dataCollection || [];
- scope.displayedCollection = []; //init empty array so that if pagination is enabled, it does not spoil performances
- scope.numberOfPages = calculateNumberOfPages(scope.dataCollection);
- scope.currentPage = 1;
- scope.holder = {isAllSelected: false};
-
- var predicate = {},
- lastColumnSort;
-
- function isAllSelected() {
- var i,
- l = scope.displayedCollection.length;
- for (i = 0; i < l; i++) {
- if (scope.displayedCollection[i].isSelected !== true) {
- return false;
- }
- }
- return true;
- }
-
- function calculateNumberOfPages(array) {
-
- if (!angular.isArray(array)) {
- return 1;
- }
- if (array.length === 0 || scope.itemsByPage < 1) {
- return 1;
- }
- return Math.ceil(array.length / scope.itemsByPage);
- }
-
- function sortDataRow(array, column) {
- var sortAlgo = (scope.sortAlgorithm && angular.isFunction(scope.sortAlgorithm)) === true ? scope.sortAlgorithm : filter('orderBy');
- if (column) {
- return arrayUtility.sort(array, sortAlgo, column.sortPredicate, column.reverse);
- } else {
- return array;
- }
- }
-
- function selectDataRow(array, selectionMode, index, select) {
-
- var dataRow, oldValue;
-
- if ((!angular.isArray(array)) || (selectionMode !== 'multiple' && selectionMode !== 'single')) {
- return;
- }
-
- if (index >= 0 && index < array.length) {
- dataRow = array[index];
- if (selectionMode === 'single') {
- //unselect all the others
- for (var i = 0, l = array.length; i < l; i++) {
- oldValue = array[i].isSelected;
- array[i].isSelected = false;
- if (oldValue === true) {
- scope.$emit('selectionChange', {item: array[i]});
- }
- }
- }
- dataRow.isSelected = select;
- scope.holder.isAllSelected = isAllSelected();
- scope.$emit('selectionChange', {item: dataRow});
- }
- }
-
- /**
- * set the config (config parameters will be available through scope
- * @param config
- */
- this.setGlobalConfig = function (config) {
- angular.extend(scope, defaultConfig, config);
- };
-
- /**
- * change the current page displayed
- * @param page
- */
- this.changePage = function (page) {
- var oldPage = scope.currentPage;
- if (angular.isNumber(page.page)) {
- scope.currentPage = page.page;
- scope.displayedCollection = this.pipe(scope.dataCollection);
- scope.holder.isAllSelected = isAllSelected();
- scope.$emit('changePage', {oldValue: oldPage, newValue: scope.currentPage});
- }
- };
-
- /**
- * set column as the column used to sort the data (if it is already the case, it will change the reverse value)
- * @method sortBy
- * @param column
- */
- this.sortBy = function (column) {
- var index = scope.columns.indexOf(column);
- if (index !== -1) {
- if (column.isSortable === true) {
- // reset the last column used
- if (lastColumnSort && lastColumnSort !== column) {
- lastColumnSort.reverse = 'none';
- }
-
- column.sortPredicate = column.sortPredicate || column.map;
- column.reverse = column.reverse !== true;
- lastColumnSort = column;
- }
- }
-
- scope.displayedCollection = this.pipe(scope.dataCollection);
- };
-
- /**
- * set the filter predicate used for searching
- * @param input
- * @param column
- */
- this.search = function (input, column) {
-
- //update column and global predicate
- if (column && scope.columns.indexOf(column) !== -1) {
- predicate.$ = '';
- column.filterPredicate = input;
- } else {
- for (var j = 0, l = scope.columns.length; j < l; j++) {
- scope.columns[j].filterPredicate = '';
- }
- predicate.$ = input;
- }
-
- for (var j = 0, l = scope.columns.length; j < l; j++) {
- predicate[scope.columns[j].map] = scope.columns[j].filterPredicate;
- }
- scope.displayedCollection = this.pipe(scope.dataCollection);
-
- };
-
- /**
- * combine sort, search and limitTo operations on an array,
- * @param array
- * @returns Array, an array result of the operations on input array
- */
- this.pipe = function (array) {
- var filterAlgo = (scope.filterAlgorithm && angular.isFunction(scope.filterAlgorithm)) === true ? scope.filterAlgorithm : filter('filter'),
- output;
- //filter and sort are commutative
- output = sortDataRow(arrayUtility.filter(array, filterAlgo, predicate), lastColumnSort);
- scope.numberOfPages = calculateNumberOfPages(output);
- return scope.isPaginationEnabled ? arrayUtility.fromTo(output, (scope.currentPage - 1) * scope.itemsByPage, scope.itemsByPage) : output;
- };
-
- /*////////////
- Column API
- ///////////*/
-
-
- /**
- * insert a new column in scope.collection at index or push at the end if no index
- * @param columnConfig column configuration used to instantiate the new Column
- * @param index where to insert the column (at the end if not specified)
- */
- this.insertColumn = function (columnConfig, index) {
- var column = new Column(columnConfig);
- arrayUtility.insertAt(scope.columns, index, column);
- };
-
- /**
- * remove the column at columnIndex from scope.columns
- * @param columnIndex index of the column to be removed
- */
- this.removeColumn = function (columnIndex) {
- arrayUtility.removeAt(scope.columns, columnIndex);
- };
-
- /**
- * move column located at oldIndex to the newIndex in scope.columns
- * @param oldIndex index of the column before it is moved
- * @param newIndex index of the column after the column is moved
- */
- this.moveColumn = function (oldIndex, newIndex) {
- arrayUtility.moveAt(scope.columns, oldIndex, newIndex);
- };
-
-
- /*///////////
- ROW API
- */
-
- /**
- * select or unselect the item of the displayedCollection with the selection mode set in the scope
- * @param dataRow
- */
- this.toggleSelection = function (dataRow) {
- var index = scope.dataCollection.indexOf(dataRow);
- if (index !== -1) {
- selectDataRow(scope.dataCollection, scope.selectionMode, index, dataRow.isSelected !== true);
- }
- };
-
- /**
- * select/unselect all the currently displayed rows
- * @param value if true select, else unselect
- */
- this.toggleSelectionAll = function (value) {
- var i = 0,
- l = scope.displayedCollection.length;
-
- if (scope.selectionMode !== 'multiple') {
- return;
- }
- for (; i < l; i++) {
- selectDataRow(scope.displayedCollection, scope.selectionMode, i, value === true);
- }
- };
-
- /**
- * remove the item at index rowIndex from the displayed collection
- * @param rowIndex
- * @returns {*} item just removed or undefined
- */
- this.removeDataRow = function (rowIndex) {
- var toRemove = arrayUtility.removeAt(scope.displayedCollection, rowIndex);
- arrayUtility.removeAt(scope.dataCollection, scope.dataCollection.indexOf(toRemove));
- };
-
- /**
- * move an item from oldIndex to newIndex in displayedCollection
- * @param oldIndex
- * @param newIndex
- */
- this.moveDataRow = function (oldIndex, newIndex) {
- arrayUtility.moveAt(scope.displayedCollection, oldIndex, newIndex);
- };
-
- /**
- * update the model, it can be a non existing yet property
- * @param dataRow the dataRow to update
- * @param propertyName the property on the dataRow ojbect to update
- * @param newValue the value to set
- */
- this.updateDataRow = function (dataRow, propertyName, newValue) {
- var index = scope.displayedCollection.indexOf(dataRow),
- getter = parse(propertyName),
- setter = getter.assign,
- oldValue;
- if (index !== -1) {
- oldValue = getter(scope.displayedCollection[index]);
- if (oldValue !== newValue) {
- setter(scope.displayedCollection[index], newValue);
- scope.$emit('updateDataRow', {item: scope.displayedCollection[index]});
- }
- }
- };
-
-
- }]);
-
-})(angular);
-
-
-
-angular.module('smartTable.templates', ['partials/defaultCell.html', 'partials/defaultHeader.html', 'partials/editableCell.html', 'partials/globalSearchCell.html', 'partials/pagination.html', 'partials/selectAllCheckbox.html', 'partials/selectionCheckbox.html', 'partials/smartTable.html']);
-
-angular.module("partials/defaultCell.html", []).run(["$templateCache", function($templateCache) {
- $templateCache.put("partials/defaultCell.html",
- "{{formatedValue}}");
-}]);
-
-angular.module("partials/defaultHeader.html", []).run(["$templateCache", function($templateCache) {
- $templateCache.put("partials/defaultHeader.html",
- "");
-}]);
-
-angular.module("partials/editableCell.html", []).run(["$templateCache", function($templateCache) {
- $templateCache.put("partials/editableCell.html",
- "\n" +
- " {{value | format:column.formatFunction:column.formatParameter}} \n" +
- "\n" +
- " \n" +
- "
");
-}]);
-
-angular.module("partials/globalSearchCell.html", []).run(["$templateCache", function($templateCache) {
- $templateCache.put("partials/globalSearchCell.html",
- "Search : \n" +
- " ");
-}]);
-
-angular.module("partials/pagination.html", []).run(["$templateCache", function($templateCache) {
- $templateCache.put("partials/pagination.html",
- " ");
-}]);
-
-angular.module("partials/selectAllCheckbox.html", []).run(["$templateCache", function($templateCache) {
- $templateCache.put("partials/selectAllCheckbox.html",
- " ");
-}]);
-
-angular.module("partials/selectionCheckbox.html", []).run(["$templateCache", function($templateCache) {
- $templateCache.put("partials/selectionCheckbox.html",
- " ");
-}]);
-
-angular.module("partials/smartTable.html", []).run(["$templateCache", function($templateCache) {
- $templateCache.put("partials/smartTable.html",
- "\n" +
- " \n" +
- " \n" +
- " \n" +
- " \n" +
- " \n" +
- " \n" +
- " \n" +
- " \n" +
- " \n" +
- " \n" +
- " \n" +
- " \n" +
- " \n" +
- " \n" +
- " \n" +
- "
\n" +
- "\n" +
- "\n" +
- "");
-}]);
-
-(function (angular) {
- "use strict";
- angular.module('smartTable.templateUrlList', [])
- .constant('templateUrlList', {
- smartTable: 'partials/smartTable.html',
- smartTableGlobalSearch: 'partials/globalSearchCell.html',
- editableCell: 'partials/editableCell.html',
- selectionCheckbox: 'partials/selectionCheckbox.html',
- selectAllCheckbox: 'partials/selectAllCheckbox.html',
- defaultHeader: 'partials/defaultHeader.html',
- pagination: 'partials/pagination.html'
- });
-})(angular);
-
-
-(function (angular) {
- "use strict";
- angular.module('smartTable.utilities', [])
-
- .factory('ArrayUtility', function () {
-
- /**
- * remove the item at index from arrayRef and return the removed item
- * @param arrayRef
- * @param index
- * @returns {*}
- */
- var removeAt = function (arrayRef, index) {
- if (index >= 0 && index < arrayRef.length) {
- return arrayRef.splice(index, 1)[0];
- }
- },
-
- /**
- * insert item in arrayRef at index or a the end if index is wrong
- * @param arrayRef
- * @param index
- * @param item
- */
- insertAt = function (arrayRef, index, item) {
- if (index >= 0 && index < arrayRef.length) {
- arrayRef.splice(index, 0, item);
- } else {
- arrayRef.push(item);
- }
- },
-
- /**
- * move the item at oldIndex to newIndex in arrayRef
- * @param arrayRef
- * @param oldIndex
- * @param newIndex
- */
- moveAt = function (arrayRef, oldIndex, newIndex) {
- var elementToMove;
- if (oldIndex >= 0 && oldIndex < arrayRef.length && newIndex >= 0 && newIndex < arrayRef.length) {
- elementToMove = arrayRef.splice(oldIndex, 1)[0];
- arrayRef.splice(newIndex, 0, elementToMove);
- }
- },
-
- /**
- * sort arrayRef according to sortAlgorithm following predicate and reverse
- * @param arrayRef
- * @param sortAlgorithm
- * @param predicate
- * @param reverse
- * @returns {*}
- */
- sort = function (arrayRef, sortAlgorithm, predicate, reverse) {
-
- if (!sortAlgorithm || !angular.isFunction(sortAlgorithm)) {
- return arrayRef;
- } else {
- return sortAlgorithm(arrayRef, predicate, reverse === true);//excpet if reverse is true it will take it as false
- }
- },
-
- /**
- * filter arrayRef according with filterAlgorithm and predicate
- * @param arrayRef
- * @param filterAlgorithm
- * @param predicate
- * @returns {*}
- */
- filter = function (arrayRef, filterAlgorithm, predicate) {
- if (!filterAlgorithm || !angular.isFunction(filterAlgorithm)) {
- return arrayRef;
- } else {
- return filterAlgorithm(arrayRef, predicate);
- }
- },
-
- /**
- * return an array, part of array ref starting at min and the size of length
- * @param arrayRef
- * @param min
- * @param length
- * @returns {*}
- */
- fromTo = function (arrayRef, min, length) {
-
- var out = [],
- limit,
- start;
-
- if (!angular.isArray(arrayRef)) {
- return arrayRef;
- }
-
- start = Math.max(min, 0);
- start = Math.min(start, (arrayRef.length - 1) > 0 ? arrayRef.length - 1 : 0);
-
- length = Math.max(0, length);
- limit = Math.min(start + length, arrayRef.length);
-
- for (var i = start; i < limit; i++) {
- out.push(arrayRef[i]);
- }
- return out;
- };
-
-
- return {
- removeAt: removeAt,
- insertAt: insertAt,
- moveAt: moveAt,
- sort: sort,
- filter: filter,
- fromTo: fromTo
- };
- });
-})(angular);
-
-
-
-(function (angular) {
- angular.module('ui.bootstrap.pagination.smartTable', ['smartTable.templateUrlList'])
-
- .constant('paginationConfig', {
- boundaryLinks: false,
- directionLinks: true,
- firstText: 'First',
- previousText: '<',
- nextText: '>',
- lastText: 'Last'
- })
-
- .directive('paginationSmartTable', ['paginationConfig', 'templateUrlList', function (paginationConfig, templateUrlList) {
- return {
- restrict: 'EA',
- require: '^smartTable',
- scope: {
- numPages: '=',
- currentPage: '=',
- maxSize: '='
- },
- templateUrl: templateUrlList.pagination,
- replace: true,
- link: function (scope, element, attrs, ctrl) {
-
- // Setup configuration parameters
- var boundaryLinks = angular.isDefined(attrs.boundaryLinks) ? scope.$eval(attrs.boundaryLinks) : paginationConfig.boundaryLinks;
- var directionLinks = angular.isDefined(attrs.directionLinks) ? scope.$eval(attrs.directionLinks) : paginationConfig.directionLinks;
- var firstText = angular.isDefined(attrs.firstText) ? attrs.firstText : paginationConfig.firstText;
- var previousText = angular.isDefined(attrs.previousText) ? attrs.previousText : paginationConfig.previousText;
- var nextText = angular.isDefined(attrs.nextText) ? attrs.nextText : paginationConfig.nextText;
- var lastText = angular.isDefined(attrs.lastText) ? attrs.lastText : paginationConfig.lastText;
-
- // Create page object used in template
- function makePage(number, text, isActive, isDisabled) {
- return {
- number: number,
- text: text,
- active: isActive,
- disabled: isDisabled
- };
- }
-
- scope.$watch('numPages + currentPage + maxSize', function () {
- scope.pages = [];
-
- // Default page limits
- var startPage = 1, endPage = scope.numPages;
-
- // recompute if maxSize
- if (scope.maxSize && scope.maxSize < scope.numPages) {
- startPage = Math.max(scope.currentPage - Math.floor(scope.maxSize / 2), 1);
- endPage = startPage + scope.maxSize - 1;
-
- // Adjust if limit is exceeded
- if (endPage > scope.numPages) {
- endPage = scope.numPages;
- startPage = endPage - scope.maxSize + 1;
- }
- }
-
- // Add page number links
- for (var number = startPage; number <= endPage; number++) {
- var page = makePage(number, number, scope.isActive(number), false);
- scope.pages.push(page);
- }
-
- // Add previous & next links
- if (directionLinks) {
- var previousPage = makePage(scope.currentPage - 1, previousText, false, scope.noPrevious());
- scope.pages.unshift(previousPage);
-
- var nextPage = makePage(scope.currentPage + 1, nextText, false, scope.noNext());
- scope.pages.push(nextPage);
- }
-
- // Add first & last links
- if (boundaryLinks) {
- var firstPage = makePage(1, firstText, false, scope.noPrevious());
- scope.pages.unshift(firstPage);
-
- var lastPage = makePage(scope.numPages, lastText, false, scope.noNext());
- scope.pages.push(lastPage);
- }
-
-
- if (scope.currentPage > scope.numPages) {
- scope.selectPage(scope.numPages);
- }
- });
- scope.noPrevious = function () {
- return scope.currentPage === 1;
- };
- scope.noNext = function () {
- return scope.currentPage === scope.numPages;
- };
- scope.isActive = function (page) {
- return scope.currentPage === page;
- };
-
- scope.selectPage = function (page) {
- if (!scope.isActive(page) && page > 0 && page <= scope.numPages) {
- scope.currentPage = page;
- ctrl.changePage({ page: page });
- }
- };
- }
- };
- }]);
-})(angular);
-
diff --git a/rd_ui/app/scripts/ui-bootstrap-tpls-0.5.0.min.js b/rd_ui/app/scripts/ui-bootstrap-tpls-0.5.0.min.js
deleted file mode 100644
index 9d3d10e0d..000000000
--- a/rd_ui/app/scripts/ui-bootstrap-tpls-0.5.0.min.js
+++ /dev/null
@@ -1,2 +0,0 @@
-angular.module("ui.bootstrap",["ui.bootstrap.tpls","ui.bootstrap.transition","ui.bootstrap.collapse","ui.bootstrap.accordion","ui.bootstrap.alert","ui.bootstrap.buttons","ui.bootstrap.carousel","ui.bootstrap.position","ui.bootstrap.datepicker","ui.bootstrap.dialog","ui.bootstrap.dropdownToggle","ui.bootstrap.modal","ui.bootstrap.pagination","ui.bootstrap.tooltip","ui.bootstrap.popover","ui.bootstrap.progressbar","ui.bootstrap.rating","ui.bootstrap.tabs","ui.bootstrap.timepicker","ui.bootstrap.typeahead"]),angular.module("ui.bootstrap.tpls",["template/accordion/accordion-group.html","template/accordion/accordion.html","template/alert/alert.html","template/carousel/carousel.html","template/carousel/slide.html","template/datepicker/datepicker.html","template/datepicker/popup.html","template/dialog/message.html","template/pagination/pager.html","template/pagination/pagination.html","template/tooltip/tooltip-html-unsafe-popup.html","template/tooltip/tooltip-popup.html","template/popover/popover.html","template/progressbar/bar.html","template/progressbar/progress.html","template/rating/rating.html","template/tabs/tab.html","template/tabs/tabset-titles.html","template/tabs/tabset.html","template/timepicker/timepicker.html","template/typeahead/typeahead-match.html","template/typeahead/typeahead-popup.html"]),angular.module("ui.bootstrap.transition",[]).factory("$transition",["$q","$timeout","$rootScope",function(e,t,n){function a(e){for(var t in e)if(void 0!==o.style[t])return e[t]}var i=function(a,o,r){r=r||{};var l=e.defer(),s=i[r.animation?"animationEndEventName":"transitionEndEventName"],c=function(){n.$apply(function(){a.unbind(s,c),l.resolve(a)})};return s&&a.bind(s,c),t(function(){angular.isString(o)?a.addClass(o):angular.isFunction(o)?o(a):angular.isObject(o)&&a.css(o),s||l.resolve(a)}),l.promise.cancel=function(){s&&a.unbind(s,c),l.reject("Transition cancelled")},l.promise},o=document.createElement("trans"),r={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd",transition:"transitionend"},l={WebkitTransition:"webkitAnimationEnd",MozTransition:"animationend",OTransition:"oAnimationEnd",transition:"animationend"};return i.transitionEndEventName=a(r),i.animationEndEventName=a(l),i}]),angular.module("ui.bootstrap.collapse",["ui.bootstrap.transition"]).directive("collapse",["$transition",function(e){var t=function(e,t,n){t.removeClass("collapse"),t.css({height:n}),t[0].offsetWidth,t.addClass("collapse")};return{link:function(n,a,i){var o,r=!0;n.$watch(function(){return a[0].scrollHeight},function(){0!==a[0].scrollHeight&&(o||(r?t(n,a,a[0].scrollHeight+"px"):t(n,a,"auto")))}),n.$watch(i.collapse,function(e){e?u():c()});var l,s=function(t){return l&&l.cancel(),l=e(a,t),l.then(function(){l=void 0},function(){l=void 0}),l},c=function(){r?(r=!1,o||t(n,a,"auto")):s({height:a[0].scrollHeight+"px"}).then(function(){o||t(n,a,"auto")}),o=!1},u=function(){o=!0,r?(r=!1,t(n,a,0)):(t(n,a,a[0].scrollHeight+"px"),s({height:"0"}))}}}}]),angular.module("ui.bootstrap.accordion",["ui.bootstrap.collapse"]).constant("accordionConfig",{closeOthers:!0}).controller("AccordionController",["$scope","$attrs","accordionConfig",function(e,t,n){this.groups=[],this.closeOthers=function(a){var i=angular.isDefined(t.closeOthers)?e.$eval(t.closeOthers):n.closeOthers;i&&angular.forEach(this.groups,function(e){e!==a&&(e.isOpen=!1)})},this.addGroup=function(e){var t=this;this.groups.push(e),e.$on("$destroy",function(){t.removeGroup(e)})},this.removeGroup=function(e){var t=this.groups.indexOf(e);-1!==t&&this.groups.splice(this.groups.indexOf(e),1)}}]).directive("accordion",function(){return{restrict:"EA",controller:"AccordionController",transclude:!0,replace:!1,templateUrl:"template/accordion/accordion.html"}}).directive("accordionGroup",["$parse","$transition","$timeout",function(e){return{require:"^accordion",restrict:"EA",transclude:!0,replace:!0,templateUrl:"template/accordion/accordion-group.html",scope:{heading:"@"},controller:["$scope",function(){this.setHeading=function(e){this.heading=e}}],link:function(t,n,a,i){var o,r;i.addGroup(t),t.isOpen=!1,a.isOpen&&(o=e(a.isOpen),r=o.assign,t.$watch(function(){return o(t.$parent)},function(e){t.isOpen=e}),t.isOpen=o?o(t.$parent):!1),t.$watch("isOpen",function(e){e&&i.closeOthers(t),r&&r(t.$parent,e)})}}}]).directive("accordionHeading",function(){return{restrict:"EA",transclude:!0,template:"",replace:!0,require:"^accordionGroup",compile:function(e,t,n){return function(e,t,a,i){i.setHeading(n(e,function(){}))}}}}).directive("accordionTransclude",function(){return{require:"^accordionGroup",link:function(e,t,n,a){e.$watch(function(){return a[n.accordionTransclude]},function(e){e&&(t.html(""),t.append(e))})}}}),angular.module("ui.bootstrap.alert",[]).directive("alert",function(){return{restrict:"EA",templateUrl:"template/alert/alert.html",transclude:!0,replace:!0,scope:{type:"=",close:"&"},link:function(e,t,n){e.closeable="close"in n}}}),angular.module("ui.bootstrap.buttons",[]).constant("buttonConfig",{activeClass:"active",toggleEvent:"click"}).directive("btnRadio",["buttonConfig",function(e){var t=e.activeClass||"active",n=e.toggleEvent||"click";return{require:"ngModel",link:function(e,a,i,o){o.$render=function(){a.toggleClass(t,angular.equals(o.$modelValue,e.$eval(i.btnRadio)))},a.bind(n,function(){a.hasClass(t)||e.$apply(function(){o.$setViewValue(e.$eval(i.btnRadio)),o.$render()})})}}}]).directive("btnCheckbox",["buttonConfig",function(e){var t=e.activeClass||"active",n=e.toggleEvent||"click";return{require:"ngModel",link:function(e,a,i,o){function r(){var t=e.$eval(i.btnCheckboxTrue);return angular.isDefined(t)?t:!0}function l(){var t=e.$eval(i.btnCheckboxFalse);return angular.isDefined(t)?t:!1}o.$render=function(){a.toggleClass(t,angular.equals(o.$modelValue,r()))},a.bind(n,function(){e.$apply(function(){o.$setViewValue(a.hasClass(t)?l():r()),o.$render()})})}}}]),angular.module("ui.bootstrap.carousel",["ui.bootstrap.transition"]).controller("CarouselController",["$scope","$timeout","$transition","$q",function(e,t,n){function a(){function n(){o?(e.next(),a()):e.pause()}i&&t.cancel(i);var r=+e.interval;!isNaN(r)&&r>=0&&(i=t(n,r))}var i,o,r=this,l=r.slides=[],s=-1;r.currentSlide=null,r.select=function(i,o){function c(){r.currentSlide&&angular.isString(o)&&!e.noTransition&&i.$element?(i.$element.addClass(o),i.$element[0].offsetWidth=i.$element[0].offsetWidth,angular.forEach(l,function(e){angular.extend(e,{direction:"",entering:!1,leaving:!1,active:!1})}),angular.extend(i,{direction:o,active:!0,entering:!0}),angular.extend(r.currentSlide||{},{direction:o,leaving:!0}),e.$currentTransition=n(i.$element,{}),function(t,n){e.$currentTransition.then(function(){u(t,n)},function(){u(t,n)})}(i,r.currentSlide)):u(i,r.currentSlide),r.currentSlide=i,s=p,a()}function u(t,n){angular.extend(t,{direction:"",active:!0,leaving:!1,entering:!1}),angular.extend(n||{},{direction:"",active:!1,leaving:!1,entering:!1}),e.$currentTransition=null}var p=l.indexOf(i);void 0===o&&(o=p>s?"next":"prev"),i&&i!==r.currentSlide&&(e.$currentTransition?(e.$currentTransition.cancel(),t(c)):c())},r.indexOfSlide=function(e){return l.indexOf(e)},e.next=function(){var t=(s+1)%l.length;return e.$currentTransition?void 0:r.select(l[t],"next")},e.prev=function(){var t=0>s-1?l.length-1:s-1;return e.$currentTransition?void 0:r.select(l[t],"prev")},e.select=function(e){r.select(e)},e.isActive=function(e){return r.currentSlide===e},e.slides=function(){return l},e.$watch("interval",a),e.play=function(){o||(o=!0,a())},e.pause=function(){e.noPause||(o=!1,i&&t.cancel(i))},r.addSlide=function(t,n){t.$element=n,l.push(t),1===l.length||t.active?(r.select(l[l.length-1]),1==l.length&&e.play()):t.active=!1},r.removeSlide=function(e){var t=l.indexOf(e);l.splice(t,1),l.length>0&&e.active?t>=l.length?r.select(l[t-1]):r.select(l[t]):s>t&&s--}}]).directive("carousel",[function(){return{restrict:"EA",transclude:!0,replace:!0,controller:"CarouselController",require:"carousel",templateUrl:"template/carousel/carousel.html",scope:{interval:"=",noTransition:"=",noPause:"="}}}]).directive("slide",["$parse",function(e){return{require:"^carousel",restrict:"EA",transclude:!0,replace:!0,templateUrl:"template/carousel/slide.html",scope:{},link:function(t,n,a,i){if(a.active){var o=e(a.active),r=o.assign,l=t.active=o(t.$parent);t.$watch(function(){var e=o(t.$parent);return e!==t.active&&(e!==l?l=t.active=e:r(t.$parent,e=l=t.active)),e})}i.addSlide(t,n),t.$on("$destroy",function(){i.removeSlide(t)}),t.$watch("active",function(e){e&&i.select(t)})}}}]),angular.module("ui.bootstrap.position",[]).factory("$position",["$document","$window",function(e,t){function n(e,n){return e.currentStyle?e.currentStyle[n]:t.getComputedStyle?t.getComputedStyle(e)[n]:e.style[n]}function a(e){return"static"===(n(e,"position")||"static")}var i,o;e.bind("mousemove",function(e){i=e.pageX,o=e.pageY});var r=function(t){for(var n=e[0],i=t.offsetParent||n;i&&i!==n&&a(i);)i=i.offsetParent;return i||n};return{position:function(t){var n=this.offset(t),a={top:0,left:0},i=r(t[0]);return i!=e[0]&&(a=this.offset(angular.element(i)),a.top+=i.clientTop-i.scrollTop,a.left+=i.clientLeft-i.scrollLeft),{width:t.prop("offsetWidth"),height:t.prop("offsetHeight"),top:n.top-a.top,left:n.left-a.left}},offset:function(n){var a=n[0].getBoundingClientRect();return{width:n.prop("offsetWidth"),height:n.prop("offsetHeight"),top:a.top+(t.pageYOffset||e[0].body.scrollTop),left:a.left+(t.pageXOffset||e[0].body.scrollLeft)}},mouse:function(){return{x:i,y:o}}}}]),angular.module("ui.bootstrap.datepicker",["ui.bootstrap.position"]).constant("datepickerConfig",{dayFormat:"dd",monthFormat:"MMMM",yearFormat:"yyyy",dayHeaderFormat:"EEE",dayTitleFormat:"MMMM yyyy",monthTitleFormat:"yyyy",showWeeks:!0,startingDay:0,yearRange:20,minDate:null,maxDate:null}).controller("DatepickerController",["$scope","$attrs","dateFilter","datepickerConfig",function(e,t,n,a){function i(t,n){return angular.isDefined(t)?e.$parent.$eval(t):n}function o(e,t){return new Date(e,t,0).getDate()}function r(e,t){for(var n=Array(t),a=e,i=0;t>i;)n[i++]=new Date(a),a.setDate(a.getDate()+1);return n}function l(e,t,a,i){return{date:e,label:n(e,t),selected:!!a,secondary:!!i}}var s={day:i(t.dayFormat,a.dayFormat),month:i(t.monthFormat,a.monthFormat),year:i(t.yearFormat,a.yearFormat),dayHeader:i(t.dayHeaderFormat,a.dayHeaderFormat),dayTitle:i(t.dayTitleFormat,a.dayTitleFormat),monthTitle:i(t.monthTitleFormat,a.monthTitleFormat)},c=i(t.startingDay,a.startingDay),u=i(t.yearRange,a.yearRange);this.minDate=a.minDate?new Date(a.minDate):null,this.maxDate=a.maxDate?new Date(a.maxDate):null,this.modes=[{name:"day",getVisibleDates:function(e,t){var a=e.getFullYear(),i=e.getMonth(),u=new Date(a,i,1),p=c-u.getDay(),d=p>0?7-p:-p,m=new Date(u),g=0;d>0&&(m.setDate(-d+1),g+=d),g+=o(a,i+1),g+=(7-g%7)%7;for(var f=r(m,g),h=Array(7),v=0;g>v;v++){var b=new Date(f[v]);f[v]=l(b,s.day,t&&t.getDate()===b.getDate()&&t.getMonth()===b.getMonth()&&t.getFullYear()===b.getFullYear(),b.getMonth()!==i)}for(var $=0;7>$;$++)h[$]=n(f[$].date,s.dayHeader);return{objects:f,title:n(e,s.dayTitle),labels:h}},compare:function(e,t){return new Date(e.getFullYear(),e.getMonth(),e.getDate())-new Date(t.getFullYear(),t.getMonth(),t.getDate())},split:7,step:{months:1}},{name:"month",getVisibleDates:function(e,t){for(var a=Array(12),i=e.getFullYear(),o=0;12>o;o++){var r=new Date(i,o,1);a[o]=l(r,s.month,t&&t.getMonth()===o&&t.getFullYear()===i)}return{objects:a,title:n(e,s.monthTitle)}},compare:function(e,t){return new Date(e.getFullYear(),e.getMonth())-new Date(t.getFullYear(),t.getMonth())},split:3,step:{years:1}},{name:"year",getVisibleDates:function(e,t){for(var n=Array(u),a=e.getFullYear(),i=parseInt((a-1)/u,10)*u+1,o=0;u>o;o++){var r=new Date(i+o,0,1);n[o]=l(r,s.year,t&&t.getFullYear()===r.getFullYear())}return{objects:n,title:[n[0].label,n[u-1].label].join(" - ")}},compare:function(e,t){return e.getFullYear()-t.getFullYear()},split:5,step:{years:u}}],this.isDisabled=function(t,n){var a=this.modes[n||0];return this.minDate&&0>a.compare(t,this.minDate)||this.maxDate&&a.compare(t,this.maxDate)>0||e.dateDisabled&&e.dateDisabled({date:t,mode:a.name})}}]).directive("datepicker",["dateFilter","$parse","datepickerConfig","$log",function(e,t,n,a){return{restrict:"EA",replace:!0,templateUrl:"template/datepicker/datepicker.html",scope:{dateDisabled:"&"},require:["datepicker","?^ngModel"],controller:"DatepickerController",link:function(e,i,o,r){function l(){e.showWeekNumbers=0===g&&h}function s(e,t){for(var n=[];e.length>0;)n.push(e.splice(0,t));return n}function c(t){var n=null,i=!0;m.$modelValue&&(n=new Date(m.$modelValue),isNaN(n)?(i=!1,a.error('Datepicker directive: "ng-model" value must be a Date object, a number of milliseconds since 01.01.1970 or a string representing an RFC2822 or ISO 8601 date.')):t&&(f=n)),m.$setValidity("date",i);var o=d.modes[g],r=o.getVisibleDates(f,n);angular.forEach(r.objects,function(e){e.disabled=d.isDisabled(e.date,g)}),m.$setValidity("date-disabled",!n||!d.isDisabled(n)),e.rows=s(r.objects,o.split),e.labels=r.labels||[],e.title=r.title}function u(e){g=e,l(),c()}function p(e){var t=new Date(e);t.setDate(t.getDate()+4-(t.getDay()||7));var n=t.getTime();return t.setMonth(0),t.setDate(1),Math.floor(Math.round((n-t)/864e5)/7)+1}var d=r[0],m=r[1];if(m){var g=0,f=new Date,h=n.showWeeks;o.showWeeks?e.$parent.$watch(t(o.showWeeks),function(e){h=!!e,l()}):l(),o.min&&e.$parent.$watch(t(o.min),function(e){d.minDate=e?new Date(e):null,c()}),o.max&&e.$parent.$watch(t(o.max),function(e){d.maxDate=e?new Date(e):null,c()}),m.$render=function(){c(!0)},e.select=function(e){if(0===g){var t=new Date(m.$modelValue);t.setFullYear(e.getFullYear(),e.getMonth(),e.getDate()),m.$setViewValue(t),c(!0)}else f=e,u(g-1)},e.move=function(e){var t=d.modes[g].step;f.setMonth(f.getMonth()+e*(t.months||0)),f.setFullYear(f.getFullYear()+e*(t.years||0)),c()},e.toggleMode=function(){u((g+1)%d.modes.length)},e.getWeekNumber=function(t){return 0===g&&e.showWeekNumbers&&7===t.length?p(t[0].date):null}}}}}]).constant("datepickerPopupConfig",{dateFormat:"yyyy-MM-dd",closeOnDateSelection:!0}).directive("datepickerPopup",["$compile","$parse","$document","$position","dateFilter","datepickerPopupConfig",function(e,t,n,a,i,o){return{restrict:"EA",require:"ngModel",link:function(r,l,s,c){function u(e){return e?i(e,h):null}function p(e){if(e){var t=new Date(e);if(!isNaN(t))return t}return e}function d(e){$?$(r,!!e):v.isOpen=!!e}function m(e,n,a){e&&(r.$watch(t(e),function(e){v[n]=e}),D.attr(a||n,n))}function g(){v.position=a.position(l),v.position.top=v.position.top+l.prop("offsetHeight")}var f=angular.isDefined(s.closeOnDateSelection)?v.$eval(s.closeOnDateSelection):o.closeOnDateSelection,h=s.datepickerPopup||o.dateFormat,v=r.$new();r.$on("$destroy",function(){v.$destroy()}),c.$formatters.push(u),c.$parsers.push(p);var b,$;s.open&&(b=t(s.open),$=b.assign,r.$watch(b,function(e){v.isOpen=!!e})),v.isOpen=b?b(r):!1;var y=function(e){v.isOpen&&e.target!==l[0]&&v.$apply(function(){d(!1)})},w=function(){v.$apply(function(){d(!0)})},k=angular.element(" ");k.attr({"ng-model":"date","ng-change":"dateSelection()"});var D=k.find("datepicker");s.datepickerOptions&&D.attr(angular.extend({},r.$eval(s.datepickerOptions)));var x=t(s.ngModel).assign;v.dateSelection=function(){x(r,v.date),f&&d(!1)},v.$watch(function(){return c.$modelValue},function(e){if(angular.isString(e)){var t=p(e);if(e&&!t)throw x(r,null),Error(e+" cannot be parsed to a date object.");e=t}v.date=e,g()}),m(s.min,"min"),m(s.max,"max"),s.showWeeks?m(s.showWeeks,"showWeeks","show-weeks"):(v.showWeeks=!0,D.attr("show-weeks","showWeeks")),s.dateDisabled&&D.attr("date-disabled",s.dateDisabled),v.$watch("isOpen",function(e){e?(g(),n.bind("click",y),l.unbind("focus",w),l.focus()):(n.unbind("click",y),l.bind("focus",w)),$&&$(r,e)}),v.today=function(){x(r,new Date)},v.clear=function(){x(r,null)},l.after(e(k)(v))}}}]).directive("datepickerPopupWrap",[function(){return{restrict:"E",replace:!0,transclude:!0,templateUrl:"template/datepicker/popup.html",link:function(e,t){t.bind("click",function(e){e.preventDefault(),e.stopPropagation()})}}}]);var dialogModule=angular.module("ui.bootstrap.dialog",["ui.bootstrap.transition"]);dialogModule.controller("MessageBoxController",["$scope","dialog","model",function(e,t,n){e.title=n.title,e.message=n.message,e.buttons=n.buttons,e.close=function(e){t.close(e)}}]),dialogModule.provider("$dialog",function(){var e={backdrop:!0,dialogClass:"modal",backdropClass:"modal-backdrop",transitionClass:"fade",triggerClass:"in",resolve:{},backdropFade:!1,dialogFade:!1,keyboard:!0,backdropClick:!0},t={},n={value:0};this.options=function(e){t=e},this.$get=["$http","$document","$compile","$rootScope","$controller","$templateCache","$q","$transition","$injector",function(a,i,o,r,l,s,c,u,p){function d(e){var t=angular.element("");return t.addClass(e),t}function m(n){var a=this,i=this.options=angular.extend({},e,t,n);this._open=!1,this.backdropEl=d(i.backdropClass),i.backdropFade&&(this.backdropEl.addClass(i.transitionClass),this.backdropEl.removeClass(i.triggerClass)),this.modalEl=d(i.dialogClass),i.dialogFade&&(this.modalEl.addClass(i.transitionClass),this.modalEl.removeClass(i.triggerClass)),this.handledEscapeKey=function(e){27===e.which&&(a.close(),e.preventDefault(),a.$scope.$apply())},this.handleBackDropClick=function(e){a.close(),e.preventDefault(),a.$scope.$apply()}}var g=i.find("body");return m.prototype.isOpen=function(){return this._open},m.prototype.open=function(e,t){var n=this,a=this.options;if(e&&(a.templateUrl=e),t&&(a.controller=t),!a.template&&!a.templateUrl)throw Error("Dialog.open expected template or templateUrl, neither found. Use options or open method to specify them.");return this._loadResolves().then(function(e){var t=e.$scope=n.$scope=e.$scope?e.$scope:r.$new();if(n.modalEl.html(e.$template),n.options.controller){var a=l(n.options.controller,e);n.modalEl.children().data("ngControllerController",a)}o(n.modalEl)(t),n._addElementsToDom(),setTimeout(function(){n.options.dialogFade&&n.modalEl.addClass(n.options.triggerClass),n.options.backdropFade&&n.backdropEl.addClass(n.options.triggerClass)}),n._bindEvents()}),this.deferred=c.defer(),this.deferred.promise},m.prototype.close=function(e){function t(e){e.removeClass(a.options.triggerClass)}function n(){a._open&&a._onCloseComplete(e)}var a=this,i=this._getFadingElements();if(i.length>0)for(var o=i.length-1;o>=0;o--)u(i[o],t).then(n);else this._onCloseComplete(e)},m.prototype._getFadingElements=function(){var e=[];return this.options.dialogFade&&e.push(this.modalEl),this.options.backdropFade&&e.push(this.backdropEl),e},m.prototype._bindEvents=function(){this.options.keyboard&&g.bind("keydown",this.handledEscapeKey),this.options.backdrop&&this.options.backdropClick&&this.backdropEl.bind("click",this.handleBackDropClick)},m.prototype._unbindEvents=function(){this.options.keyboard&&g.unbind("keydown",this.handledEscapeKey),this.options.backdrop&&this.options.backdropClick&&this.backdropEl.unbind("click",this.handleBackDropClick)},m.prototype._onCloseComplete=function(e){this._removeElementsFromDom(),this._unbindEvents(),this.deferred.resolve(e)},m.prototype._addElementsToDom=function(){g.append(this.modalEl),this.options.backdrop&&(0===n.value&&g.append(this.backdropEl),n.value++),this._open=!0},m.prototype._removeElementsFromDom=function(){this.modalEl.remove(),this.options.backdrop&&(n.value--,0===n.value&&this.backdropEl.remove()),this._open=!1},m.prototype._loadResolves=function(){var e,t=[],n=[],i=this;return this.options.template?e=c.when(this.options.template):this.options.templateUrl&&(e=a.get(this.options.templateUrl,{cache:s}).then(function(e){return e.data})),angular.forEach(this.options.resolve||[],function(e,a){n.push(a),t.push(angular.isString(e)?p.get(e):p.invoke(e))}),n.push("$template"),t.push(e),c.all(t).then(function(e){var t={};return angular.forEach(e,function(e,a){t[n[a]]=e}),t.dialog=i,t})},{dialog:function(e){return new m(e)},messageBox:function(e,t,n){return new m({templateUrl:"template/dialog/message.html",controller:"MessageBoxController",resolve:{model:function(){return{title:e,message:t,buttons:n}}}})}}}]}),angular.module("ui.bootstrap.dropdownToggle",[]).directive("dropdownToggle",["$document","$location",function(e){var t=null,n=angular.noop;return{restrict:"CA",link:function(a,i){a.$watch("$location.path",function(){n()}),i.parent().bind("click",function(){n()}),i.bind("click",function(a){var o=i===t;a.preventDefault(),a.stopPropagation(),t&&n(),o||(i.parent().addClass("open"),t=i,n=function(a){a&&(a.preventDefault(),a.stopPropagation()),e.unbind("click",n),i.parent().removeClass("open"),n=angular.noop,t=null},e.bind("click",n))})}}}]),angular.module("ui.bootstrap.modal",["ui.bootstrap.dialog"]).directive("modal",["$parse","$dialog",function(e,t){return{restrict:"EA",terminal:!0,link:function(n,a,i){var o,r=angular.extend({},n.$eval(i.uiOptions||i.bsOptions||i.options)),l=i.modal||i.show;r=angular.extend(r,{template:a.html(),resolve:{$scope:function(){return n}}});var s=t.dialog(r);a.remove(),o=i.close?function(){e(i.close)(n)}:function(){angular.isFunction(e(l).assign)&&e(l).assign(n,!1)},n.$watch(l,function(e){e?s.open().then(function(){o()}):s.isOpen()&&s.close()})}}}]),angular.module("ui.bootstrap.pagination",[]).controller("PaginationController",["$scope","$interpolate",function(e,t){this.currentPage=1,this.noPrevious=function(){return 1===this.currentPage},this.noNext=function(){return this.currentPage===e.numPages},this.isActive=function(e){return this.currentPage===e},this.reset=function(){e.pages=[],this.currentPage=parseInt(e.currentPage,10),this.currentPage>e.numPages&&e.selectPage(e.numPages)};var n=this;e.selectPage=function(t){!n.isActive(t)&&t>0&&e.numPages>=t&&(e.currentPage=t,e.onSelectPage({page:t}))},this.getAttributeValue=function(n,a,i){return angular.isDefined(n)?i?t(n)(e.$parent):e.$parent.$eval(n):a}}]).constant("paginationConfig",{boundaryLinks:!1,directionLinks:!0,firstText:"First",previousText:"Previous",nextText:"Next",lastText:"Last",rotate:!0}).directive("pagination",["paginationConfig",function(e){return{restrict:"EA",scope:{numPages:"=",currentPage:"=",maxSize:"=",onSelectPage:"&"},controller:"PaginationController",templateUrl:"template/pagination/pagination.html",replace:!0,link:function(t,n,a,i){function o(e,t,n,a){return{number:e,text:t,active:n,disabled:a}}var r=i.getAttributeValue(a.boundaryLinks,e.boundaryLinks),l=i.getAttributeValue(a.directionLinks,e.directionLinks),s=i.getAttributeValue(a.firstText,e.firstText,!0),c=i.getAttributeValue(a.previousText,e.previousText,!0),u=i.getAttributeValue(a.nextText,e.nextText,!0),p=i.getAttributeValue(a.lastText,e.lastText,!0),d=i.getAttributeValue(a.rotate,e.rotate);t.$watch("numPages + currentPage + maxSize",function(){i.reset();var e=1,n=t.numPages,a=angular.isDefined(t.maxSize)&&t.maxSize
t.numPages&&(n=t.numPages,e=n-t.maxSize+1)):(e=(Math.ceil(i.currentPage/t.maxSize)-1)*t.maxSize+1,n=Math.min(e+t.maxSize-1,t.numPages)));for(var m=e;n>=m;m++){var g=o(m,m,i.isActive(m),!1);t.pages.push(g)}if(a&&!d){if(e>1){var f=o(e-1,"...",!1,!1);t.pages.unshift(f)}if(t.numPages>n){var h=o(n+1,"...",!1,!1);t.pages.push(h)}}if(l){var v=o(i.currentPage-1,c,!1,i.noPrevious());t.pages.unshift(v);var b=o(i.currentPage+1,u,!1,i.noNext());t.pages.push(b)}if(r){var $=o(1,s,!1,i.noPrevious());t.pages.unshift($);var y=o(t.numPages,p,!1,i.noNext());t.pages.push(y)}})}}}]).constant("pagerConfig",{previousText:"« Previous",nextText:"Next »",align:!0}).directive("pager",["pagerConfig",function(e){return{restrict:"EA",scope:{numPages:"=",currentPage:"=",onSelectPage:"&"},controller:"PaginationController",templateUrl:"template/pagination/pager.html",replace:!0,link:function(t,n,a,i){function o(e,t,n,a,i){return{number:e,text:t,disabled:n,previous:s&&a,next:s&&i}}var r=i.getAttributeValue(a.previousText,e.previousText,!0),l=i.getAttributeValue(a.nextText,e.nextText,!0),s=i.getAttributeValue(a.align,e.align);t.$watch("numPages + currentPage",function(){i.reset();var e=o(i.currentPage-1,r,i.noPrevious(),!0,!1);t.pages.unshift(e);var n=o(i.currentPage+1,l,i.noNext(),!1,!0);t.pages.push(n)})}}}]),angular.module("ui.bootstrap.tooltip",["ui.bootstrap.position"]).provider("$tooltip",function(){function e(e){var t=/[A-Z]/g,n="-";return e.replace(t,function(e,t){return(t?n:"")+e.toLowerCase()})}var t={placement:"top",animation:!0,popupDelay:0},n={mouseenter:"mouseleave",click:"click",focus:"blur"},a={};this.options=function(e){angular.extend(a,e)},this.setTriggers=function(e){angular.extend(n,e)},this.$get=["$window","$compile","$timeout","$parse","$document","$position","$interpolate",function(i,o,r,l,s,c,u){return function(i,p,d){function m(e){var t=e||g.trigger||d,a=n[t]||t;return{show:t,hide:a}}var g=angular.extend({},t,a),f=e(i),h=u.startSymbol(),v=u.endSymbol(),b="<"+f+"-popup "+'title="'+h+"tt_title"+v+'" '+'content="'+h+"tt_content"+v+'" '+'placement="'+h+"tt_placement"+v+'" '+'animation="tt_animation()" '+'is-open="tt_isOpen"'+">"+""+f+"-popup>";return{restrict:"EA",scope:!0,link:function(e,t,n){function a(){e.tt_isOpen?d():u()}function u(){e.tt_popupDelay?$=r(f,e.tt_popupDelay):e.$apply(f)}function d(){e.$apply(function(){h()})}function f(){var n,a,i,o;if(e.tt_content){switch(v&&r.cancel(v),w.css({top:0,left:0,display:"block"}),k?(y=y||s.find("body"),y.append(w)):t.after(w),n=k?c.offset(t):c.position(t),a=w.prop("offsetWidth"),i=w.prop("offsetHeight"),e.tt_placement){case"mouse":var l=c.mouse();o={top:l.y,left:l.x};break;case"right":o={top:n.top+n.height/2-i/2,left:n.left+n.width};break;case"bottom":o={top:n.top+n.height,left:n.left+n.width/2-a/2};break;case"left":o={top:n.top+n.height/2-i/2,left:n.left-a};break;default:o={top:n.top-i,left:n.left+n.width/2-a/2}}o.top+="px",o.left+="px",w.css(o),e.tt_isOpen=!0}}function h(){e.tt_isOpen=!1,r.cancel($),angular.isDefined(e.tt_animation)&&e.tt_animation()?v=r(function(){w.remove()},500):w.remove()}var v,$,y,w=o(b)(e),k=angular.isDefined(g.appendToBody)?g.appendToBody:!1,D=m(void 0),x=!1;e.tt_isOpen=!1,n.$observe(i,function(t){e.tt_content=t}),n.$observe(p+"Title",function(t){e.tt_title=t}),n.$observe(p+"Placement",function(t){e.tt_placement=angular.isDefined(t)?t:g.placement}),n.$observe(p+"Animation",function(t){e.tt_animation=angular.isDefined(t)?l(t):function(){return g.animation}}),n.$observe(p+"PopupDelay",function(t){var n=parseInt(t,10);e.tt_popupDelay=isNaN(n)?g.popupDelay:n}),n.$observe(p+"Trigger",function(e){x&&(t.unbind(D.show,u),t.unbind(D.hide,d)),D=m(e),D.show===D.hide?t.bind(D.show,a):(t.bind(D.show,u),t.bind(D.hide,d)),x=!0}),n.$observe(p+"AppendToBody",function(t){k=angular.isDefined(t)?l(t)(e):k}),k&&e.$on("$locationChangeSuccess",function(){e.tt_isOpen&&h()}),e.$on("$destroy",function(){e.tt_isOpen?h():w.remove()})}}}}]}).directive("tooltipPopup",function(){return{restrict:"E",replace:!0,scope:{content:"@",placement:"@",animation:"&",isOpen:"&"},templateUrl:"template/tooltip/tooltip-popup.html"}}).directive("tooltip",["$tooltip",function(e){return e("tooltip","tooltip","mouseenter")}]).directive("tooltipHtmlUnsafePopup",function(){return{restrict:"E",replace:!0,scope:{content:"@",placement:"@",animation:"&",isOpen:"&"},templateUrl:"template/tooltip/tooltip-html-unsafe-popup.html"}}).directive("tooltipHtmlUnsafe",["$tooltip",function(e){return e("tooltipHtmlUnsafe","tooltip","mouseenter")}]),angular.module("ui.bootstrap.popover",["ui.bootstrap.tooltip"]).directive("popoverPopup",function(){return{restrict:"EA",replace:!0,scope:{title:"@",content:"@",placement:"@",animation:"&",isOpen:"&"},templateUrl:"template/popover/popover.html"}}).directive("popover",["$compile","$timeout","$parse","$window","$tooltip",function(e,t,n,a,i){return i("popover","popover","click")}]),angular.module("ui.bootstrap.progressbar",["ui.bootstrap.transition"]).constant("progressConfig",{animate:!0,autoType:!1,stackedTypes:["success","info","warning","danger"]}).controller("ProgressBarController",["$scope","$attrs","progressConfig",function(e,t,n){function a(e){return r[e]}var i=angular.isDefined(t.animate)?e.$eval(t.animate):n.animate,o=angular.isDefined(t.autoType)?e.$eval(t.autoType):n.autoType,r=angular.isDefined(t.stackedTypes)?e.$eval("["+t.stackedTypes+"]"):n.stackedTypes;this.makeBar=function(e,t,n){var r=angular.isObject(e)?e.value:e||0,l=angular.isObject(t)?t.value:t||0,s=angular.isObject(e)&&angular.isDefined(e.type)?e.type:o?a(n||0):null;return{from:l,to:r,type:s,animate:i}},this.addBar=function(t){e.bars.push(t),e.totalPercent+=t.to},this.clearBars=function(){e.bars=[],e.totalPercent=0},this.clearBars()}]).directive("progress",function(){return{restrict:"EA",replace:!0,controller:"ProgressBarController",scope:{value:"=percent",onFull:"&",onEmpty:"&"},templateUrl:"template/progressbar/progress.html",link:function(e,t,n,a){e.$watch("value",function(e,t){if(a.clearBars(),angular.isArray(e))for(var n=0,i=e.length;i>n;n++)a.addBar(a.makeBar(e[n],t[n],n));else a.addBar(a.makeBar(e,t))},!0),e.$watch("totalPercent",function(t){t>=100?e.onFull():0>=t&&e.onEmpty()},!0)}}}).directive("progressbar",["$transition",function(e){return{restrict:"EA",replace:!0,scope:{width:"=",old:"=",type:"=",animate:"="},templateUrl:"template/progressbar/bar.html",link:function(t,n){t.$watch("width",function(a){t.animate?(n.css("width",t.old+"%"),e(n,{width:a+"%"})):n.css("width",a+"%")})}}}]),angular.module("ui.bootstrap.rating",[]).constant("ratingConfig",{max:5}).directive("rating",["ratingConfig","$parse",function(e,t){return{restrict:"EA",scope:{value:"=",onHover:"&",onLeave:"&"},templateUrl:"template/rating/rating.html",replace:!0,link:function(n,a,i){var o=angular.isDefined(i.max)?n.$parent.$eval(i.max):e.max;n.range=[];for(var r=1;o>=r;r++)n.range.push(r);n.rate=function(e){n.readonly||(n.value=e)},n.enter=function(e){n.readonly||(n.val=e),n.onHover({value:e})},n.reset=function(){n.val=angular.copy(n.value),n.onLeave()},n.reset(),n.$watch("value",function(e){n.val=e}),n.readonly=!1,i.readonly&&n.$parent.$watch(t(i.readonly),function(e){n.readonly=!!e})}}}]),angular.module("ui.bootstrap.tabs",[]).directive("tabs",function(){return function(){throw Error("The `tabs` directive is deprecated, please migrate to `tabset`. Instructions can be found at http://github.com/angular-ui/bootstrap/tree/master/CHANGELOG.md")}}).controller("TabsetController",["$scope","$element",function(e){var t=this,n=t.tabs=e.tabs=[];t.select=function(e){angular.forEach(n,function(e){e.active=!1}),e.active=!0},t.addTab=function(e){n.push(e),(1===n.length||e.active)&&t.select(e)},t.removeTab=function(e){var a=n.indexOf(e);if(e.active&&n.length>1){var i=a==n.length-1?a-1:a+1;t.select(n[i])}n.splice(a,1)}}]).directive("tabset",function(){return{restrict:"EA",transclude:!0,replace:!0,require:"^tabset",scope:{},controller:"TabsetController",templateUrl:"template/tabs/tabset.html",compile:function(e,t,n){return function(e,t,a,i){e.vertical=angular.isDefined(a.vertical)?e.$eval(a.vertical):!1,e.type=angular.isDefined(a.type)?e.$parent.$eval(a.type):"tabs",e.direction=angular.isDefined(a.direction)?e.$parent.$eval(a.direction):"top",e.tabsAbove="below"!=e.direction,i.$scope=e,i.$transcludeFn=n}}}}).directive("tab",["$parse","$http","$templateCache","$compile",function(e){return{require:"^tabset",restrict:"EA",replace:!0,templateUrl:"template/tabs/tab.html",transclude:!0,scope:{heading:"@",onSelect:"&select",onDeselect:"&deselect"},controller:function(){},compile:function(t,n,a){return function(t,n,i,o){var r,l;i.active?(r=e(i.active),l=r.assign,t.$parent.$watch(r,function(e){t.active=!!e}),t.active=r(t.$parent)):l=r=angular.noop,t.$watch("active",function(e){l(t.$parent,e),e?(o.select(t),t.onSelect()):t.onDeselect()}),t.disabled=!1,i.disabled&&t.$parent.$watch(e(i.disabled),function(e){t.disabled=!!e
-}),t.select=function(){t.disabled||(t.active=!0)},o.addTab(t),t.$on("$destroy",function(){o.removeTab(t)}),t.active&&l(t.$parent,!0),t.$transcludeFn=a}}}}]).directive("tabHeadingTransclude",[function(){return{restrict:"A",require:"^tab",link:function(e,t){e.$watch("headingElement",function(e){e&&(t.html(""),t.append(e))})}}}]).directive("tabContentTransclude",["$compile","$parse",function(){function e(e){return e.tagName&&(e.hasAttribute("tab-heading")||e.hasAttribute("data-tab-heading")||"tab-heading"===e.tagName.toLowerCase()||"data-tab-heading"===e.tagName.toLowerCase())}return{restrict:"A",require:"^tabset",link:function(t,n,a){var i=t.$eval(a.tabContentTransclude);i.$transcludeFn(i.$parent,function(t){angular.forEach(t,function(t){e(t)?i.headingElement=t:n.append(t)})})}}}]).directive("tabsetTitles",function(){return{restrict:"A",require:"^tabset",templateUrl:"template/tabs/tabset-titles.html",replace:!0,link:function(e,t,n,a){e.$eval(n.tabsetTitles)?a.$transcludeFn(a.$scope.$parent,function(e){t.append(e)}):t.remove()}}}),angular.module("ui.bootstrap.timepicker",[]).filter("pad",function(){return function(e){return angular.isDefined(e)&&2>(""+e).length&&(e="0"+e),e}}).constant("timepickerConfig",{hourStep:1,minuteStep:1,showMeridian:!0,meridians:["AM","PM"],readonlyInput:!1,mousewheel:!0}).directive("timepicker",["padFilter","$parse","timepickerConfig",function(e,t,n){return{restrict:"EA",require:"ngModel",replace:!0,templateUrl:"template/timepicker/timepicker.html",scope:{model:"=ngModel"},link:function(a,i,o){function r(){var e=parseInt(a.hours,10),t=a.showMeridian?e>0&&13>e:e>=0&&24>e;return t?(a.showMeridian&&(12===e&&(e=0),a.meridian===u[1]&&(e+=12)),e):void 0}function l(){var t=c.getHours();a.showMeridian&&(t=0===t||12===t?12:t%12),a.hours="h"===b?t:e(t),a.validHours=!0;var n=c.getMinutes();a.minutes="m"===b?n:e(n),a.validMinutes=!0,a.meridian=a.showMeridian?12>c.getHours()?u[0]:u[1]:"",b=!1}function s(e){var t=new Date(c.getTime()+6e4*e);c.setHours(t.getHours()),c.setMinutes(t.getMinutes()),a.model=new Date(c)}var c=new Date,u=n.meridians,p=n.hourStep;o.hourStep&&a.$parent.$watch(t(o.hourStep),function(e){p=parseInt(e,10)});var d=n.minuteStep;o.minuteStep&&a.$parent.$watch(t(o.minuteStep),function(e){d=parseInt(e,10)}),a.showMeridian=n.showMeridian,o.showMeridian&&a.$parent.$watch(t(o.showMeridian),function(e){if(a.showMeridian=!!e,a.model)l();else{var t=new Date(c),n=r();angular.isDefined(n)&&t.setHours(n),a.model=new Date(t)}});var m=i.find("input"),g=m.eq(0),f=m.eq(1),h=angular.isDefined(o.mousewheel)?a.$eval(o.mousewheel):n.mousewheel;if(h){var v=function(e){e.originalEvent&&(e=e.originalEvent);var t=e.wheelDelta?e.wheelDelta:-e.deltaY;return e.detail||t>0};g.bind("mousewheel wheel",function(e){a.$apply(v(e)?a.incrementHours():a.decrementHours()),e.preventDefault()}),f.bind("mousewheel wheel",function(e){a.$apply(v(e)?a.incrementMinutes():a.decrementMinutes()),e.preventDefault()})}var b=!1;a.readonlyInput=angular.isDefined(o.readonlyInput)?a.$eval(o.readonlyInput):n.readonlyInput,a.readonlyInput?(a.updateHours=angular.noop,a.updateMinutes=angular.noop):(a.updateHours=function(){var e=r();angular.isDefined(e)?(b="h",null===a.model&&(a.model=new Date(c)),a.model.setHours(e)):(a.model=null,a.validHours=!1)},g.bind("blur",function(){a.validHours&&10>a.hours&&a.$apply(function(){a.hours=e(a.hours)})}),a.updateMinutes=function(){var e=parseInt(a.minutes,10);e>=0&&60>e?(b="m",null===a.model&&(a.model=new Date(c)),a.model.setMinutes(e)):(a.model=null,a.validMinutes=!1)},f.bind("blur",function(){a.validMinutes&&10>a.minutes&&a.$apply(function(){a.minutes=e(a.minutes)})})),a.$watch(function(){return+a.model},function(e){!isNaN(e)&&e>0&&(c=new Date(e),l())}),a.incrementHours=function(){s(60*p)},a.decrementHours=function(){s(60*-p)},a.incrementMinutes=function(){s(d)},a.decrementMinutes=function(){s(-d)},a.toggleMeridian=function(){s(720*(12>c.getHours()?1:-1))}}}}]),angular.module("ui.bootstrap.typeahead",["ui.bootstrap.position"]).factory("typeaheadParser",["$parse",function(e){var t=/^\s*(.*?)(?:\s+as\s+(.*?))?\s+for\s+(?:([\$\w][\$\w\d]*))\s+in\s+(.*)$/;return{parse:function(n){var a=n.match(t);if(!a)throw Error("Expected typeahead specification in form of '_modelValue_ (as _label_)? for _item_ in _collection_' but got '"+n+"'.");return{itemName:a[3],source:e(a[4]),viewMapper:e(a[2]||a[1]),modelMapper:e(a[1])}}}}]).directive("typeahead",["$compile","$parse","$q","$timeout","$document","$position","typeaheadParser",function(e,t,n,a,i,o,r){var l=[9,13,27,38,40];return{require:"ngModel",link:function(s,c,u,p){var d=s.$eval(u.typeaheadMinLength)||1,m=s.$eval(u.typeaheadWaitMs)||0,g=s.$eval(u.typeaheadEditable)!==!1,f=t(u.typeaheadLoading).assign||angular.noop,h=t(u.typeaheadOnSelect),v=u.typeaheadInputFormatter?t(u.typeaheadInputFormatter):void 0,b=t(u.ngModel).assign,$=r.parse(u.typeahead),y=angular.element(" ");y.attr({matches:"matches",active:"activeIdx",select:"select(activeIdx)",query:"query",position:"position"}),angular.isDefined(u.typeaheadTemplateUrl)&&y.attr("template-url",u.typeaheadTemplateUrl);var w=s.$new();s.$on("$destroy",function(){w.$destroy()});var k=function(){w.matches=[],w.activeIdx=-1},D=function(e){var t={$viewValue:e};f(s,!0),n.when($.source(w,t)).then(function(n){if(e===p.$viewValue){if(n.length>0){w.activeIdx=0,w.matches.length=0;for(var a=0;n.length>a;a++)t[$.itemName]=n[a],w.matches.push({label:$.viewMapper(w,t),model:n[a]});w.query=e,w.position=o.position(c),w.position.top=w.position.top+c.prop("offsetHeight")}else k();f(s,!1)}},function(){k(),f(s,!1)})};k(),w.query=void 0;var x;p.$parsers.push(function(e){return k(),e&&e.length>=d&&(m>0?(x&&a.cancel(x),x=a(function(){D(e)},m)):D(e)),g?e:void 0}),p.$formatters.push(function(e){var t,n,a={};return v?(a.$model=e,v(s,a)):(a[$.itemName]=e,t=$.viewMapper(s,a),n=$.viewMapper(s,{}),t!==n?t:e)}),w.select=function(e){var t,n,a={};a[$.itemName]=n=w.matches[e].model,t=$.modelMapper(s,a),b(s,t),h(s,{$item:n,$model:t,$label:$.viewMapper(s,a)}),k(),c[0].focus()},c.bind("keydown",function(e){0!==w.matches.length&&-1!==l.indexOf(e.which)&&(e.preventDefault(),40===e.which?(w.activeIdx=(w.activeIdx+1)%w.matches.length,w.$digest()):38===e.which?(w.activeIdx=(w.activeIdx?w.activeIdx:w.matches.length)-1,w.$digest()):13===e.which||9===e.which?w.$apply(function(){w.select(w.activeIdx)}):27===e.which&&(e.stopPropagation(),k(),w.$digest()))}),i.bind("click",function(){k(),w.$digest()}),c.after(e(y)(w))}}}]).directive("typeaheadPopup",function(){return{restrict:"E",scope:{matches:"=",query:"=",active:"=",position:"=",select:"&"},replace:!0,templateUrl:"template/typeahead/typeahead-popup.html",link:function(e,t,n){e.templateUrl=n.templateUrl,e.isOpen=function(){return e.matches.length>0},e.isActive=function(t){return e.active==t},e.selectActive=function(t){e.active=t},e.selectMatch=function(t){e.select({activeIdx:t})}}}}).directive("typeaheadMatch",["$http","$templateCache","$compile","$parse",function(e,t,n,a){return{restrict:"E",scope:{index:"=",match:"=",query:"="},link:function(i,o,r){var l=a(r.templateUrl)(i.$parent)||"template/typeahead/typeahead-match.html";e.get(l,{cache:t}).success(function(e){o.replaceWith(n(e.trim())(i))})}}}]).filter("typeaheadHighlight",function(){function e(e){return e.replace(/([.?*+^$[\]\\(){}|-])/g,"\\$1")}return function(t,n){return n?t.replace(RegExp(e(n),"gi"),"$& "):n}}),angular.module("template/accordion/accordion-group.html",[]).run(["$templateCache",function(e){e.put("template/accordion/accordion-group.html",'')}]),angular.module("template/accordion/accordion.html",[]).run(["$templateCache",function(e){e.put("template/accordion/accordion.html",'
')}]),angular.module("template/alert/alert.html",[]).run(["$templateCache",function(e){e.put("template/alert/alert.html","\n")}]),angular.module("template/carousel/carousel.html",[]).run(["$templateCache",function(e){e.put("template/carousel/carousel.html",'\n')}]),angular.module("template/carousel/slide.html",[]).run(["$templateCache",function(e){e.put("template/carousel/slide.html","
\n")}]),angular.module("template/datepicker/datepicker.html",[]).run(["$templateCache",function(e){e.put("template/datepicker/datepicker.html",'\n \n \n \n {{title}} \n \n \n \n # \n {{label}} \n \n \n \n \n {{ getWeekNumber(row) }} \n \n {{dt.label}} \n \n \n \n
\n')}]),angular.module("template/datepicker/popup.html",[]).run(["$templateCache",function(e){e.put("template/datepicker/popup.html",'')}]),angular.module("template/dialog/message.html",[]).run(["$templateCache",function(e){e.put("template/dialog/message.html",'\n\n\n')}]),angular.module("template/modal/backdrop.html",[]).run(["$templateCache",function(e){e.put("template/modal/backdrop.html",'
')}]),angular.module("template/modal/window.html",[]).run(["$templateCache",function(e){e.put("template/modal/window.html",'
')}]),angular.module("template/pagination/pager.html",[]).run(["$templateCache",function(e){e.put("template/pagination/pager.html",'\n')}]),angular.module("template/pagination/pagination.html",[]).run(["$templateCache",function(e){e.put("template/pagination/pagination.html",'\n')}]),angular.module("template/tooltip/tooltip-html-unsafe-popup.html",[]).run(["$templateCache",function(e){e.put("template/tooltip/tooltip-html-unsafe-popup.html",'\n')}]),angular.module("template/tooltip/tooltip-popup.html",[]).run(["$templateCache",function(e){e.put("template/tooltip/tooltip-popup.html",'\n')}]),angular.module("template/popover/popover.html",[]).run(["$templateCache",function(e){e.put("template/popover/popover.html",'\n')}]),angular.module("template/progressbar/bar.html",[]).run(["$templateCache",function(e){e.put("template/progressbar/bar.html",'
')}]),angular.module("template/progressbar/progress.html",[]).run(["$templateCache",function(e){e.put("template/progressbar/progress.html",'')}]),angular.module("template/rating/rating.html",[]).run(["$templateCache",function(e){e.put("template/rating/rating.html",'\n \n ')}]),angular.module("template/tabs/pane.html",[]).run(["$templateCache",function(e){e.put("template/tabs/pane.html",'
\n')}]),angular.module("template/tabs/tab.html",[]).run(["$templateCache",function(e){e.put("template/tabs/tab.html",'\n {{heading}} \n \n')}]),angular.module("template/tabs/tabs.html",[]).run(["$templateCache",function(e){e.put("template/tabs/tabs.html",'\n')}]),angular.module("template/tabs/tabset-titles.html",[]).run(["$templateCache",function(e){e.put("template/tabs/tabset-titles.html","\n")}]),angular.module("template/tabs/tabset.html",[]).run(["$templateCache",function(e){e.put("template/tabs/tabset.html",'\n\n')}]),angular.module("template/timepicker/timepicker.html",[]).run(["$templateCache",function(e){e.put("template/timepicker/timepicker.html",'')}]),angular.module("template/typeahead/typeahead-match.html",[]).run(["$templateCache",function(e){e.put("template/typeahead/typeahead-match.html",' ')}]),angular.module("template/typeahead/typeahead-popup.html",[]).run(["$templateCache",function(e){e.put("template/typeahead/typeahead-popup.html",'')}]),angular.module("template/typeahead/typeahead.html",[]).run(["$templateCache",function(e){e.put("template/typeahead/typeahead.html",'')}]);
\ No newline at end of file
diff --git a/rd_ui/app/styles/redash.css b/rd_ui/app/styles/redash.css
deleted file mode 100644
index 391370a52..000000000
--- a/rd_ui/app/styles/redash.css
+++ /dev/null
@@ -1,109 +0,0 @@
-body {
- padding-top: 70px;
-}
-
-a.navbar-brand {
- font-style: italic;
-}
-
-.graph {
- height: 300px;
-}
-
-.avatar {
- margin-top: 5px;
- margin-bottom: 5px;
-}
-
-.edit-in-place span {
- cursor: pointer;
-}
-
-.edit-in-place input {
- display: none;
-}
-
-.edit-in-place.active span {
- display: none;
-}
-
-.edit-in-place.active input {
- display: inline-block;
-}
-
-.delete-button {
- float: none !important;
-}
-
-.list-group-item.active button {
- color: white;
-}
-
-/* angular-growl */
-.growl {
- position: fixed;
- bottom: 10px;
- right: 10px;
- float: right;
- width: 250px;
-}
-
-.growl-item.ng-enter,
-.growl-item.ng-leave {
- -webkit-transition:0.5s linear all;
- -moz-transition:0.5s linear all;
- -o-transition:0.5s linear all;
- transition:0.5s linear all;
-}
-
-.growl-item.ng-enter,
-.growl-item.ng-leave.ng-leave-active {
- opacity:0;
-}
-.growl-item.ng-leave,
-.growl-item.ng-enter.ng-enter-active {
- opacity:1;
-
-}
-
-/* Gridster */
-
-.gridster ul {
- list-style-type: none;
-}
-
-li.widget {
- /*background-color:grey;*/
- border-width: 1px;
- border-style: solid;
- border-color: grey;
- opacity: 0.7;
-}
-
-li.widget:hover {
- opacity: 1.0 !important;
-
- -webkit-transition: opacity .6s;
- -moz-transition: opacity .6s;
- -o-transition: opacity .6s;
- -ms-transition: opacity .6s;
- transition: opacity .6s;
-}
-
-.gridster .preview-holder {
- border: none!important;
- border-radius: 0!important;
- background: rgba(0,0,0,0.5) !important;
-}
-
-/* CodeMirror */
-.CodeMirror {
- border: 1px solid #eee;
- height: auto;
- min-height: 300px;
- margin-bottom: 10px;
-}
-.CodeMirror-scroll {
- overflow-y: hidden;
- overflow-x: auto;
-}
\ No newline at end of file
diff --git a/rd_ui/app/views/admin_status.html b/rd_ui/app/views/admin_status.html
deleted file mode 100644
index f2ff63d22..000000000
--- a/rd_ui/app/views/admin_status.html
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
-
Status
-
-
-
-
- {{value}}
- {{name | toHuman}}
-
-
-
-
-
-
\ No newline at end of file
diff --git a/rd_ui/app/views/dashboard.html b/rd_ui/app/views/dashboard.html
deleted file mode 100644
index 30f2b4078..000000000
--- a/rd_ui/app/views/dashboard.html
+++ /dev/null
@@ -1,44 +0,0 @@
-
-
-
-
-
- {{dashboard.name}}
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/rd_ui/app/views/edit_dashboard.html b/rd_ui/app/views/edit_dashboard.html
deleted file mode 100644
index f776b0356..000000000
--- a/rd_ui/app/views/edit_dashboard.html
+++ /dev/null
@@ -1,33 +0,0 @@
-
\ No newline at end of file
diff --git a/rd_ui/app/views/grid_renderer.html b/rd_ui/app/views/grid_renderer.html
deleted file mode 100644
index 3524c8338..000000000
--- a/rd_ui/app/views/grid_renderer.html
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
- {{filter.friendlyName}}: {{filter.current}}
-
-
-
-
-
-
\ No newline at end of file
diff --git a/rd_ui/app/views/index.html b/rd_ui/app/views/index.html
deleted file mode 100644
index fc4f3d4e5..000000000
--- a/rd_ui/app/views/index.html
+++ /dev/null
@@ -1,19 +0,0 @@
-
\ No newline at end of file
diff --git a/rd_ui/app/views/new_widget_form.html b/rd_ui/app/views/new_widget_form.html
deleted file mode 100644
index 01455d4dd..000000000
--- a/rd_ui/app/views/new_widget_form.html
+++ /dev/null
@@ -1,28 +0,0 @@
-
\ No newline at end of file
diff --git a/rd_ui/app/views/queries.html b/rd_ui/app/views/queries.html
deleted file mode 100644
index 2ae893e42..000000000
--- a/rd_ui/app/views/queries.html
+++ /dev/null
@@ -1,31 +0,0 @@
-
-
-
-
-
- Name
- Runtime
- Created at
- Update Schedule
- Created By
-
-
-
-
- {{query.name}}
- {{query.runtime | durationHumanize}}
-
-
- Never
-
-
- Every {{query.ttl | durationHumanize}}
- Manual
-
- {{query.user}}
-
-
-
-
-
-
diff --git a/rd_ui/app/views/queryfiddle.html b/rd_ui/app/views/queryfiddle.html
deleted file mode 100644
index cd44030bc..000000000
--- a/rd_ui/app/views/queryfiddle.html
+++ /dev/null
@@ -1,61 +0,0 @@
-
-
-
-
-
Executing query...
-
Query in queue...
-
Error running query: {{queryResult.getError()}}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/rd_ui/bower.json b/rd_ui/bower.json
deleted file mode 100644
index 1b987f26f..000000000
--- a/rd_ui/bower.json
+++ /dev/null
@@ -1,25 +0,0 @@
-{
- "name": "rdUi",
- "version": "0.0.0",
- "dependencies": {
- "angular": "~1.0.8",
- "json3": "~3.2.4",
- "jquery": "~1.9.1",
- "bootstrap": "~3.0.0",
- "es5-shim": "~2.0.8",
- "angular-moment": "~0.2.0",
- "moment": "~2.1.0",
- "angular-ui-bootstrap": "~0.5.0",
- "angular-ui-codemirror": "~0.0.4",
- "highcharts": "~3.0.1",
- "underscore": "~1.5.1",
- "angular-resource": "1.0.7",
- "angular-growl": "~0.3.1",
- "pivottable": "git@github.com:arikfr/pivottable.git#master",
- "cornelius": "git@github.com:restorando/cornelius.git"
- },
- "devDependencies": {
- "angular-mocks": "~1.0.7",
- "angular-scenario": "~1.0.7"
- }
-}
diff --git a/rd_ui/karma-e2e.conf.js b/rd_ui/karma-e2e.conf.js
deleted file mode 100644
index 15c869e17..000000000
--- a/rd_ui/karma-e2e.conf.js
+++ /dev/null
@@ -1,58 +0,0 @@
-// Karma E2E configuration
-
-// base path, that will be used to resolve files and exclude
-basePath = '';
-
-// list of files / patterns to load in the browser
-files = [
- ANGULAR_SCENARIO,
- ANGULAR_SCENARIO_ADAPTER,
- 'test/e2e/**/*.js'
-];
-
-// list of files to exclude
-exclude = [];
-
-// test results reporter to use
-// possible values: dots || progress || growl
-reporters = ['progress'];
-
-// web server port
-port = 8080;
-
-// cli runner port
-runnerPort = 9100;
-
-// enable / disable colors in the output (reporters and logs)
-colors = true;
-
-// level of logging
-// possible values: LOG_DISABLE || LOG_ERROR || LOG_WARN || LOG_INFO || LOG_DEBUG
-logLevel = LOG_INFO;
-
-// enable / disable watching file and executing tests whenever any file changes
-autoWatch = false;
-
-// Start these browsers, currently available:
-// - Chrome
-// - ChromeCanary
-// - Firefox
-// - Opera
-// - Safari (only Mac)
-// - PhantomJS
-// - IE (only Windows)
-browsers = ['Chrome'];
-
-// If browser does not capture in given timeout [ms], kill it
-captureTimeout = 5000;
-
-// Continuous Integration mode
-// if true, it capture browsers, run tests and exit
-singleRun = false;
-
-// Uncomment the following lines if you are using grunt's server to run the tests
-// proxies = {
-// '/': 'http://localhost:9000/'
-// };
-// URL root prevent conflicts with the site root
-// urlRoot = '_karma_';
diff --git a/rd_ui/karma.conf.js b/rd_ui/karma.conf.js
deleted file mode 100644
index 2d6194bf8..000000000
--- a/rd_ui/karma.conf.js
+++ /dev/null
@@ -1,56 +0,0 @@
-// Karma configuration
-
-// base path, that will be used to resolve files and exclude
-basePath = '';
-
-// list of files / patterns to load in the browser
-files = [
- JASMINE,
- JASMINE_ADAPTER,
- 'app/bower_components/angular/angular.js',
- 'app/bower_components/angular-mocks/angular-mocks.js',
- 'app/scripts/*.js',
- 'app/scripts/**/*.js',
- 'test/mock/**/*.js',
- 'test/spec/**/*.js'
-];
-
-// list of files to exclude
-exclude = [];
-
-// test results reporter to use
-// possible values: dots || progress || growl
-reporters = ['progress'];
-
-// web server port
-port = 8080;
-
-// cli runner port
-runnerPort = 9100;
-
-// enable / disable colors in the output (reporters and logs)
-colors = true;
-
-// level of logging
-// possible values: LOG_DISABLE || LOG_ERROR || LOG_WARN || LOG_INFO || LOG_DEBUG
-logLevel = LOG_INFO;
-
-// enable / disable watching file and executing tests whenever any file changes
-autoWatch = false;
-
-// Start these browsers, currently available:
-// - Chrome
-// - ChromeCanary
-// - Firefox
-// - Opera
-// - Safari (only Mac)
-// - PhantomJS
-// - IE (only Windows)
-browsers = ['Chrome'];
-
-// If browser does not capture in given timeout [ms], kill it
-captureTimeout = 5000;
-
-// Continuous Integration mode
-// if true, it capture browsers, run tests and exit
-singleRun = false;
diff --git a/rd_ui/package.json b/rd_ui/package.json
deleted file mode 100644
index 33df7ac24..000000000
--- a/rd_ui/package.json
+++ /dev/null
@@ -1,39 +0,0 @@
-{
- "name": "rd-ui",
- "version": "0.0.0",
- "dependencies": {
- "grunt-karma": "~0.6.1"
- },
- "devDependencies": {
- "grunt": "~0.4.1",
- "grunt-contrib-copy": "~0.4.1",
- "grunt-contrib-concat": "~0.3.0",
- "grunt-contrib-coffee": "~0.7.0",
- "grunt-contrib-uglify": "~0.2.0",
- "grunt-contrib-compass": "~0.5.0",
- "grunt-contrib-jshint": "~0.6.0",
- "grunt-contrib-cssmin": "~0.6.0",
- "grunt-contrib-connect": "~0.3.0",
- "grunt-contrib-clean": "~0.5.0",
- "grunt-contrib-htmlmin": "~0.1.3",
- "grunt-contrib-imagemin": "~0.2.0",
- "grunt-contrib-watch": "~0.5.2",
- "grunt-autoprefixer": "~0.2.0",
- "grunt-usemin": "~0.1.11",
- "grunt-svgmin": "~0.2.0",
- "grunt-rev": "~0.1.0",
- "grunt-open": "~0.2.0",
- "grunt-concurrent": "~0.3.0",
- "load-grunt-tasks": "~0.1.0",
- "connect-livereload": "~0.2.0",
- "grunt-google-cdn": "~0.2.0",
- "grunt-ngmin": "~0.0.2",
- "time-grunt": "~0.1.0"
- },
- "engines": {
- "node": ">=0.8.0"
- },
- "scripts": {
- "test": "grunt test"
- }
-}
diff --git a/rd_ui/test/.jshintrc b/rd_ui/test/.jshintrc
deleted file mode 100644
index aa37e7a4d..000000000
--- a/rd_ui/test/.jshintrc
+++ /dev/null
@@ -1,35 +0,0 @@
-{
- "node": true,
- "browser": true,
- "esnext": true,
- "bitwise": true,
- "camelcase": true,
- "curly": true,
- "eqeqeq": true,
- "immed": true,
- "indent": 2,
- "latedef": true,
- "newcap": true,
- "noarg": true,
- "quotmark": "single",
- "regexp": true,
- "undef": true,
- "unused": true,
- "strict": true,
- "trailing": true,
- "smarttabs": true,
- "globals": {
- "after": false,
- "afterEach": false,
- "angular": false,
- "before": false,
- "beforeEach": false,
- "browser": false,
- "describe": false,
- "expect": false,
- "inject": false,
- "it": false,
- "spyOn": false
- }
-}
-
diff --git a/rd_ui/test/runner.html b/rd_ui/test/runner.html
deleted file mode 100644
index f4a00a12b..000000000
--- a/rd_ui/test/runner.html
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
- End2end Test Runner
-
-
-
-
-
-
\ No newline at end of file
diff --git a/viz-lib/.babelrc b/viz-lib/.babelrc
new file mode 100644
index 000000000..ad10c4591
--- /dev/null
+++ b/viz-lib/.babelrc
@@ -0,0 +1,20 @@
+{
+ "presets": ["@babel/preset-env", "@babel/preset-react", "@babel/preset-typescript"],
+ "plugins": [
+ "@babel/plugin-proposal-class-properties",
+ [
+ "module-resolver",
+ {
+ "root": ["./src"],
+ "alias": {
+ "@": "./src"
+ }
+ }
+ ]
+ ],
+ "env": {
+ "test": {
+ "plugins": ["istanbul"]
+ }
+ }
+}
diff --git a/viz-lib/.gitignore b/viz-lib/.gitignore
new file mode 100644
index 000000000..64fcced46
--- /dev/null
+++ b/viz-lib/.gitignore
@@ -0,0 +1,20 @@
+# dependencies
+node_modules
+
+# builds
+/build
+/dist
+/lib
+.rpt2_cache
+
+# misc
+.DS_Store
+.env
+.env.local
+.env.development.local
+.env.test.local
+.env.production.local
+
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
\ No newline at end of file
diff --git a/viz-lib/CHANGELOG.md b/viz-lib/CHANGELOG.md
new file mode 100644
index 000000000..e468b426f
--- /dev/null
+++ b/viz-lib/CHANGELOG.md
@@ -0,0 +1,5 @@
+# Change Log
+
+## v0.1.0 - 2020-05-05
+
+- Created the library from Redash codebase
diff --git a/viz-lib/README.md b/viz-lib/README.md
new file mode 100644
index 000000000..cae2f4964
--- /dev/null
+++ b/viz-lib/README.md
@@ -0,0 +1,186 @@
+# @redash/viz
+
+![Version](https://img.shields.io/npm/v/@redash/viz)
+
+`@redash/viz` is a library containing the visualizations used by [Redash](https://redash.io).
+
+## Installation
+
+Required libraries:
+
+- react (`>=16.8.0`)
+- react-dom (`>=16.8.0`)
+- antd (`>=4.0.0`)
+
+Using npm:
+
+```bash
+npm install @redash/viz
+```
+
+Using yarn:
+
+```bash
+yarn add @redash/viz
+```
+
+## Usage
+
+### Basic Usage
+
+You can check [our live example](https://codesandbox.io/s/redashviz-v9odv) or follow the code below:
+
+```jsx
+import React, { useState } from "react";
+import { Renderer, Editor } from "@redash/viz";
+
+const exampleData = {
+ columns: [
+ { type: null, name: "Country" },
+ { type: null, name: "Amount" },
+ ],
+ rows: [
+ { Amount: 37.620000000000005, Country: "Argentina" },
+ { Amount: 37.620000000000005, Country: "Australia" },
+ { Amount: 42.62, Country: "Austria" },
+ { Amount: 37.62, Country: "Belgium" },
+ { Amount: 190.09999999999997, Country: "Brazil" },
+ { Amount: 303.9599999999999, Country: "Canada" },
+ { Amount: 46.62, Country: "Chile" },
+ { Amount: 90.24000000000001, Country: "Czech Republic" },
+ { Amount: 37.620000000000005, Country: "Denmark" },
+ { Amount: 41.620000000000005, Country: "Finland" },
+ { Amount: 195.09999999999994, Country: "France" },
+ ],
+};
+
+function Example() {
+ const [options, setOptions] = useState({ countRows: true });
+
+ return (
+
+
+
+
+ );
+}
+```
+
+### Available Types
+
+- Chart: `CHART`
+- Cohort: `COHORT`
+- Counter: `COUNTER`
+- Details View: `DETAILS`
+- Funnel: `FUNNEL`
+- Map (Choropleth): `CHOROPLETH`
+- Map (Markers): `MAP`
+- Pivot Table: `PIVOT`
+- Sankey: `SANKEY`
+- Sunburst Sequence: `SUNBURST_SEQUENCE`
+- Table: `TABLE`
+- Word Cloud: `WORD_CLOUD`
+
+### Column Types
+
+Types used for the `columns` property in the `data` object. Currently used to determine the default column view for the Table Visualization. This field is not mandatory and can receive a `null` value.
+
+Example:
+
+```js
+const data = {
+ columns: [
+ { type: "string", name: "Country" },
+ { type: "float", name: "Amount" },
+ ],
+ rows: [],
+};
+```
+
+Available types:
+
+- `integer`
+- `float`
+- `boolean`
+- `string`
+- `datetime`
+- `date`
+
+### Customizable Settings
+
+| Option | Description | Type | Default |
+| -------------------------- | ----------------------------------------------------------------------------------------------- | -------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
+| dateFormat | Date Format | `string` | `"DD/MM/YYYY"` |
+| dateTimeFormat | DateTime Format | `string` | `"DD/MM/YYYY HH:mm"` |
+| integerFormat | Integer Format | `string` | `"0,0"` |
+| floatFormat | Float Format | `string` | `"0,0.00"` |
+| booleanValues | Boolean names | `Array [string, string]` (correspond to false and true values) | `["false", "true"]` |
+| tableCellMaxJSONSize | Max json size that will be parsed and rendered in a Table Cell | `integer` | `50000` |
+| allowCustomJSVisualization | Whether to allow the `Custom` chart type | `boolean` | `false` |
+| hidePlotlyModeBar | Whether to hide the Plotly Mode Bar on charts | `boolean` | `false` |
+| choroplethAvailableMaps | Configure the JSONs used for Choropleth maps (Note: Choropleth won't work without this setting) | `Object` (see example below) | `{}` |
+| HelpTriggerComponent | Component used to render helper links on the Editor | React component with `title` and `href` props | Renders a [tooltip with a link](https://github.com/getredash/redash/blob/fc246aafc445bdfc3ad2b82560141ef51f8753a9/viz-lib/src/visualizations/visualizationsSettings.js#L6-L33) |
+
+Example:
+
+```jsx
+import React from "react";
+import { Renderer, Editor, updateVisualizationsSettings } from "@redash/viz";
+
+import countriesDataUrl from "@redash/viz/lib/visualizations/choropleth/maps/countries.geo.json";
+import subdivJapanDataUrl from "@redash/viz/lib/visualizations/choropleth/maps/japan.prefectures.geo.json";
+
+function wrapComponentWithSettings(WrappedComponent) {
+ return function VisualizationComponent(props) {
+ updateVisualizationsSettings({
+ choroplethAvailableMaps: {
+ countries: {
+ name: "Countries",
+ url: countriesDataUrl,
+ },
+ subdiv_japan: {
+ name: "Japan/Prefectures",
+ url: subdivJapanDataUrl,
+ },
+ },
+ dateFormat: "YYYY/MM/DD",
+ booleanValues: ["False", "True"],
+ hidePlotlyModeBar: true,
+ });
+
+ return ;
+ };
+}
+
+export const ConfiguredRenderer = wrapComponentWithSettings(Renderer);
+export const ConfiguredEditor = wrapComponentWithSettings(Editor);
+```
+
+### Specific File Imports
+
+There is a transpiled only build aimed for specific file imports.
+
+**Note:** Currently requires Less.
+
+Usage:
+
+```jsx
+import React from "react";
+import JsonViewInteractive from "@redash/viz/lib/components/json-view-interactive/JsonViewInteractive";
+
+const example = { list: ["value1", "value2", "value3"], obj: { prop: "value" } };
+
+export default function App() {
+ return ;
+}
+```
+
+## License
+
+BSD-2-Clause.
diff --git a/viz-lib/__tests__/enzyme_setup.js b/viz-lib/__tests__/enzyme_setup.js
new file mode 100644
index 000000000..6f413a40b
--- /dev/null
+++ b/viz-lib/__tests__/enzyme_setup.js
@@ -0,0 +1,4 @@
+import { configure } from "enzyme";
+import Adapter from "enzyme-adapter-react-16";
+
+configure({ adapter: new Adapter() });
diff --git a/viz-lib/__tests__/mocks.js b/viz-lib/__tests__/mocks.js
new file mode 100644
index 000000000..6e87088c1
--- /dev/null
+++ b/viz-lib/__tests__/mocks.js
@@ -0,0 +1,19 @@
+import MockDate from "mockdate";
+
+const date = new Date("2000-01-01T02:00:00.000");
+
+MockDate.set(date);
+
+Object.defineProperty(window, "matchMedia", {
+ writable: true,
+ value: jest.fn().mockImplementation(query => ({
+ matches: false,
+ media: query,
+ onchange: null,
+ addListener: jest.fn(), // deprecated
+ removeListener: jest.fn(), // deprecated
+ addEventListener: jest.fn(),
+ removeEventListener: jest.fn(),
+ dispatchEvent: jest.fn(),
+ })),
+});
diff --git a/viz-lib/package.json b/viz-lib/package.json
new file mode 100644
index 000000000..b19754979
--- /dev/null
+++ b/viz-lib/package.json
@@ -0,0 +1,117 @@
+{
+ "name": "@redash/viz",
+ "version": "1.0.0",
+ "description": "Redash visualizations",
+ "main": "dist/redash-visualizations.js",
+ "scripts": {
+ "clean": "rm -rf lib dist",
+ "type-check": "tsc --noEmit",
+ "type-gen": "tsc --emitDeclarationOnly",
+ "build:babel:base": "babel src --out-dir lib --source-maps --ignore 'src/**/*.test.js' --copy-files --no-copy-ignored --extensions .ts,.tsx,.js,.jsx",
+ "build:babel": "yarn type-gen && yarn build:babel:base",
+ "build:webpack": "webpack",
+ "build": " NODE_ENV=production npm-run-all clean build:babel build:webpack",
+ "watch:babel": "yarn build:babel:base --watch",
+ "watch:webpack": "webpack --watch",
+ "watch": "npm-run-all --parallel watch:*",
+ "version": "yarn build",
+ "prettier": "prettier --write 'src/**/*.{ts,tsx}'",
+ "test": "jest",
+ "test:watch": "jest --watch"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/getredash/redash.git"
+ },
+ "author": "Redash",
+ "license": "BSD-2-Clause",
+ "peerDependencies": {
+ "antd": ">=4.0.0",
+ "@ant-design/icons": ">=4.0.0",
+ "react": ">=16.8.0",
+ "react-dom": ">=16.8.0"
+ },
+ "devDependencies": {
+ "@babel/cli": "^7.8.4",
+ "@babel/core": "^7.9.0",
+ "@babel/plugin-proposal-class-properties": "^7.8.3",
+ "@babel/preset-env": "^7.9.0",
+ "@babel/preset-react": "^7.9.4",
+ "@babel/preset-typescript": "^7.12.7",
+ "@types/chroma-js": "^2.1.2",
+ "@types/d3": "^6.2.0",
+ "@types/d3-cloud": "^1.2.3",
+ "@types/debug": "^4.1.5",
+ "@types/dompurify": "^2.0.4",
+ "@types/enzyme": "^3.10.8",
+ "@types/jest": "^26.0.18",
+ "@types/leaflet": "^1.5.19",
+ "@types/numeral": "0.0.28",
+ "@types/plotly.js": "^1.54.4",
+ "@types/react": "^17.0.0",
+ "@types/react-dom": "^17.0.0",
+ "@types/tinycolor2": "^1.4.2",
+ "babel-loader": "^8.1.0",
+ "babel-plugin-istanbul": "^6.0.0",
+ "babel-plugin-module-resolver": "^4.0.0",
+ "css-loader": "^3.5.2",
+ "enzyme": "^3.8.0",
+ "enzyme-adapter-react-16": "^1.7.1",
+ "enzyme-to-json": "^3.3.5",
+ "file-loader": "^6.0.0",
+ "jest": "^24.1.0",
+ "less": "^3.11.1",
+ "less-loader": "^5.0.0",
+ "less-plugin-autoprefix": "^2.0.0",
+ "npm-run-all": "^4.1.5",
+ "prettier": "^1.19.1",
+ "prop-types": "^15.7.2",
+ "style-loader": "^1.1.4",
+ "ts-migrate": "^0.1.10",
+ "typescript": "^4.1.2",
+ "webpack": "^4.42.1",
+ "webpack-cli": "^3.3.11"
+ },
+ "files": [
+ "dist",
+ "lib"
+ ],
+ "dependencies": {
+ "axios": "^0.19.2",
+ "beautifymarker": "^1.0.7",
+ "chroma-js": "^1.3.6",
+ "classnames": "^2.2.6",
+ "d3": "^3.5.17",
+ "d3-cloud": "^1.2.4",
+ "debug": "^3.1.0",
+ "dompurify": "^2.0.7",
+ "font-awesome": "^4.7.0",
+ "hoist-non-react-statics": "^3.3.0",
+ "leaflet": "^1.2.0",
+ "leaflet-fullscreen": "^1.0.2",
+ "leaflet.markercluster": "^1.1.0",
+ "lodash": "^4.17.10",
+ "moment": "^2.19.3",
+ "numeral": "^2.0.6",
+ "plotly.js": "1.52.3",
+ "react-pivottable": "^0.9.0",
+ "react-sortable-hoc": "^1.10.1",
+ "tinycolor2": "^1.4.1",
+ "use-debounce": "^3.4.1",
+ "use-media": "^1.4.0"
+ },
+ "jest": {
+ "rootDir": "./src",
+ "setupFiles": [
+ "../__tests__/enzyme_setup.js",
+ "../__tests__/mocks.js"
+ ],
+ "snapshotSerializers": [
+ "enzyme-to-json/serializer"
+ ],
+ "moduleNameMapper": {
+ "^@/(.*)": "/$1",
+ "\\.(css|less)$": "identity-obj-proxy"
+ }
+ }
+}
diff --git a/viz-lib/prettier.config.js b/viz-lib/prettier.config.js
new file mode 100644
index 000000000..059f7f83b
--- /dev/null
+++ b/viz-lib/prettier.config.js
@@ -0,0 +1,6 @@
+module.exports = {
+ printWidth: 120,
+ jsxBracketSameLine: true,
+ tabWidth: 2,
+ trailingComma: 'es5',
+};
diff --git a/viz-lib/src/components/ColorPicker/Input.tsx b/viz-lib/src/components/ColorPicker/Input.tsx
new file mode 100644
index 000000000..cfacffe3d
--- /dev/null
+++ b/viz-lib/src/components/ColorPicker/Input.tsx
@@ -0,0 +1,97 @@
+import { isNil, isArray, chunk, map, filter, toPairs } from "lodash";
+import React, { useState, useEffect } from "react";
+import tinycolor from "tinycolor2";
+import TextInput from "antd/lib/input";
+import Typography from "antd/lib/typography";
+import Swatch from "./Swatch";
+
+import "./input.less";
+
+function preparePresets(presetColors: any, presetColumns: any) {
+ presetColors = isArray(presetColors) ? map(presetColors, v => [null, v]) : toPairs(presetColors);
+ presetColors = map(presetColors, ([title, value]) => {
+ if (isNil(value)) {
+ return [title, null];
+ }
+ value = tinycolor(value);
+ if (value.isValid()) {
+ return [title, "#" + value.toHex().toUpperCase()];
+ }
+ return null;
+ });
+ return chunk(filter(presetColors), presetColumns);
+}
+
+function validateColor(value: any, callback: any, prefix = "#") {
+ if (isNil(value)) {
+ callback(null);
+ }
+ value = tinycolor(value);
+ if (value.isValid()) {
+ callback(prefix + value.toHex().toUpperCase());
+ }
+}
+
+type OwnProps = {
+ color?: string;
+ presetColors?:
+ | string[]
+ | {
+ [key: string]: string;
+ };
+ presetColumns?: number;
+ onChange?: (...args: any[]) => any;
+ onPressEnter?: (...args: any[]) => any;
+};
+
+type Props = OwnProps & typeof Input.defaultProps;
+
+export default function Input({ color, presetColors, presetColumns, onChange, onPressEnter }: Props) {
+ const [inputValue, setInputValue] = useState("");
+ const [isInputFocused, setIsInputFocused] = useState(false);
+
+ const presets = preparePresets(presetColors, presetColumns);
+
+ function handleInputChange(value: any) {
+ setInputValue(value);
+ validateColor(value, onChange);
+ }
+
+ useEffect(() => {
+ if (!isInputFocused) {
+ validateColor(color, setInputValue, "");
+ }
+ }, [color, isInputFocused]);
+
+ return (
+
+ {map(presets, (group, index) => (
+
+ {map(group, ([title, value]) => (
+ // @ts-expect-error ts-migrate(2322) FIXME: Type 'any' is not assignable to type 'never'.
+ validateColor(value, onChange)} />
+ ))}
+
+ ))}
+
+ #}
+ value={inputValue}
+ onChange={e => handleInputChange(e.target.value)}
+ onFocus={() => setIsInputFocused(true)}
+ onBlur={() => setIsInputFocused(false)}
+ onPressEnter={onPressEnter}
+ />
+
+
+ );
+}
+
+Input.defaultProps = {
+ color: "#FFFFFF",
+ presetColors: null,
+ presetColumns: 8,
+ onChange: () => {},
+ onPressEnter: () => {},
+};
diff --git a/viz-lib/src/components/ColorPicker/Label.tsx b/viz-lib/src/components/ColorPicker/Label.tsx
new file mode 100644
index 000000000..1235e3a7b
--- /dev/null
+++ b/viz-lib/src/components/ColorPicker/Label.tsx
@@ -0,0 +1,34 @@
+import React, { useMemo } from "react";
+import cx from "classnames";
+
+import { validateColor, getColorName } from "./utils";
+import "./label.less";
+
+type OwnProps = {
+ className?: string;
+ color?: string;
+ presetColors?:
+ | string[]
+ | {
+ [key: string]: string;
+ };
+};
+
+type Props = OwnProps & typeof Label.defaultProps;
+
+// @ts-expect-error ts-migrate(2700) FIXME: Rest types may only be created from object types.
+export default function Label({ className, color, presetColors, ...props }: Props) {
+ const name = useMemo(() => getColorName(validateColor(color), presetColors), [color, presetColors]);
+
+ return (
+
+ {name}
+
+ );
+}
+
+Label.defaultProps = {
+ className: null,
+ color: "#FFFFFF",
+ presetColors: null,
+};
diff --git a/viz-lib/src/components/ColorPicker/Swatch.tsx b/viz-lib/src/components/ColorPicker/Swatch.tsx
new file mode 100644
index 000000000..d60d9e4d8
--- /dev/null
+++ b/viz-lib/src/components/ColorPicker/Swatch.tsx
@@ -0,0 +1,45 @@
+import { isString } from "lodash";
+import React from "react";
+import cx from "classnames";
+import Tooltip from "antd/lib/tooltip";
+
+import "./swatch.less";
+
+type OwnProps = {
+ className?: string;
+ style?: any;
+ title?: string;
+ color?: string;
+ size?: number;
+};
+
+type Props = OwnProps & typeof Swatch.defaultProps;
+
+// @ts-expect-error ts-migrate(2700) FIXME: Rest types may only be created from object types.
+export default function Swatch({ className, color, title, size, style, ...props }: Props) {
+ const result = (
+
+ );
+
+ if (isString(title) && title !== "") {
+ return (
+
+ {result}
+
+ );
+ }
+ return result;
+}
+
+Swatch.defaultProps = {
+ className: null,
+ style: null,
+ title: null,
+ color: "transparent",
+ size: 12,
+};
diff --git a/viz-lib/src/components/ColorPicker/index.less b/viz-lib/src/components/ColorPicker/index.less
new file mode 100644
index 000000000..bd6857990
--- /dev/null
+++ b/viz-lib/src/components/ColorPicker/index.less
@@ -0,0 +1,44 @@
+.color-picker {
+ &.color-picker-with-actions {
+ &.ant-popover-placement-top,
+ &.ant-popover-placement-topLeft,
+ &.ant-popover-placement-topRight,
+ &.ant-popover-placement-leftBottom,
+ &.ant-popover-placement-rightBottom {
+ > .ant-popover-content > .ant-popover-arrow {
+ border-color: #fafafa; // same as card actions
+ }
+ }
+ }
+
+ &.ant-popover-placement-bottom,
+ &.ant-popover-placement-bottomLeft,
+ &.ant-popover-placement-bottomRight,
+ &.ant-popover-placement-leftTop,
+ &.ant-popover-placement-rightTop {
+ > .ant-popover-content > .ant-popover-arrow {
+ border-color: var(--color-picker-selected-color);
+ }
+ }
+
+ .ant-popover-inner-content {
+ padding: 0;
+ }
+
+ .ant-card-head {
+ text-align: center;
+ border-bottom-color: rgba(0, 0, 0, 0.1);
+ }
+
+ .ant-card-body {
+ padding: 10px;
+ }
+}
+
+.color-picker-trigger {
+ cursor: pointer;
+}
+
+.color-picker-wrapper {
+ white-space: nowrap;
+}
diff --git a/viz-lib/src/components/ColorPicker/index.tsx b/viz-lib/src/components/ColorPicker/index.tsx
new file mode 100644
index 000000000..03129db4b
--- /dev/null
+++ b/viz-lib/src/components/ColorPicker/index.tsx
@@ -0,0 +1,173 @@
+import { toString } from "lodash";
+import React, { useState, useEffect, useMemo } from "react";
+import cx from "classnames";
+import Popover from "antd/lib/popover";
+import Card from "antd/lib/card";
+import Tooltip from "antd/lib/tooltip";
+import chooseTextColorForBackground from "@/lib/chooseTextColorForBackground";
+
+import CloseOutlinedIcon from "@ant-design/icons/CloseOutlined";
+import CheckOutlinedIcon from "@ant-design/icons/CheckOutlined";
+
+import ColorInput from "./Input";
+import Swatch from "./Swatch";
+import Label from "./Label";
+import { validateColor } from "./utils";
+
+import "./index.less";
+
+type OwnProps = {
+ color?: string;
+ placement?:
+ | "top"
+ | "left"
+ | "right"
+ | "bottom"
+ | "topLeft"
+ | "topRight"
+ | "bottomLeft"
+ | "bottomRight"
+ | "leftTop"
+ | "leftBottom"
+ | "rightTop"
+ | "rightBottom";
+ presetColors?:
+ | string[]
+ | {
+ [key: string]: string;
+ };
+ presetColumns?: number;
+ interactive?: boolean;
+ triggerProps?: any;
+ children?: React.ReactNode;
+ addonBefore?: React.ReactNode;
+ addonAfter?: React.ReactNode;
+ onChange?: (...args: any[]) => any;
+};
+
+type Props = OwnProps & typeof ColorPicker.defaultProps;
+
+export default function ColorPicker({
+ color,
+ placement,
+ presetColors,
+ presetColumns,
+ interactive,
+ children,
+ onChange,
+ triggerProps,
+ addonBefore,
+ addonAfter,
+}: Props) {
+ const [visible, setVisible] = useState(false);
+ const validatedColor = useMemo(() => validateColor(color), [color]);
+ const [currentColor, setCurrentColor] = useState("");
+
+ function handleApply() {
+ setVisible(false);
+ if (!interactive) {
+ // @ts-expect-error ts-migrate(2349) FIXME: This expression is not callable.
+ onChange(currentColor);
+ }
+ }
+
+ function handleCancel() {
+ setVisible(false);
+ }
+
+ const actions = [];
+ if (!interactive) {
+ actions.push(
+
+
+
+ );
+ actions.push(
+
+
+
+ );
+ }
+
+ function handleInputChange(newColor: any) {
+ setCurrentColor(newColor);
+ if (interactive) {
+ // @ts-expect-error ts-migrate(2349) FIXME: This expression is not callable.
+ onChange(newColor);
+ }
+ }
+
+ useEffect(() => {
+ if (visible) {
+ // @ts-expect-error ts-migrate(2345) FIXME: Argument of type 'string | null' is not assignable... Remove this comment to see the full error message
+ setCurrentColor(validatedColor);
+ }
+ }, [validatedColor, visible]);
+
+ return (
+
+ {addonBefore}
+
+ void' is not assignable t... Remove this comment to see the full error message
+ onChange={handleInputChange}
+ // @ts-expect-error ts-migrate(2322) FIXME: Type '() => void' is not assignable to type 'never... Remove this comment to see the full error message
+ onPressEnter={handleApply}
+ />
+
+ }
+ trigger="click"
+ placement={placement}
+ visible={visible}
+ onVisibleChange={setVisible}>
+ {children || (
+
+ )}
+
+ {addonAfter}
+
+ );
+}
+
+ColorPicker.defaultProps = {
+ color: "#FFFFFF",
+ placement: "top",
+ presetColors: null,
+ presetColumns: 8,
+ interactive: false,
+ triggerProps: {},
+ children: null,
+ addonBefore: null,
+ addonAfter: null,
+ onChange: () => {},
+};
+
+ColorPicker.Input = ColorInput;
+ColorPicker.Swatch = Swatch;
+ColorPicker.Label = Label;
diff --git a/viz-lib/src/components/ColorPicker/input.less b/viz-lib/src/components/ColorPicker/input.less
new file mode 100644
index 000000000..56f9d7ec5
--- /dev/null
+++ b/viz-lib/src/components/ColorPicker/input.less
@@ -0,0 +1,19 @@
+.color-picker-input-swatches {
+ margin: 0 0 10px 0;
+ text-align: left;
+ white-space: nowrap;
+
+ .color-swatch {
+ cursor: pointer;
+ margin: 0 10px 0 0;
+
+ &:last-child {
+ margin-right: 0;
+ }
+ }
+}
+
+.color-picker-input {
+ text-align: left;
+ white-space: nowrap;
+}
diff --git a/viz-lib/src/components/ColorPicker/label.less b/viz-lib/src/components/ColorPicker/label.less
new file mode 100644
index 000000000..e8aa009f3
--- /dev/null
+++ b/viz-lib/src/components/ColorPicker/label.less
@@ -0,0 +1,7 @@
+.color-label {
+ vertical-align: middle;
+
+ .color-swatch + & {
+ margin-left: 7px;
+ }
+}
diff --git a/viz-lib/src/components/ColorPicker/swatch.less b/viz-lib/src/components/ColorPicker/swatch.less
new file mode 100644
index 000000000..4dea312c4
--- /dev/null
+++ b/viz-lib/src/components/ColorPicker/swatch.less
@@ -0,0 +1,30 @@
+.color-swatch {
+ display: inline-block;
+ box-sizing: border-box;
+ vertical-align: middle;
+ border-radius: 2px;
+ overflow: hidden;
+ width: 12px;
+
+ @cell-size: 12px;
+ @cell-color: rgba(0, 0, 0, 0.1);
+
+ background-color: transparent;
+ background-image:
+ linear-gradient(45deg, @cell-color 25%, transparent 25%),
+ linear-gradient(-45deg, @cell-color 25%, transparent 25%),
+ linear-gradient(45deg, transparent 75%, @cell-color 75%),
+ linear-gradient(-45deg, transparent 75%, @cell-color 75%);
+ background-size: @cell-size @cell-size;
+ background-position: 0 0, 0 @cell-size/2, @cell-size/2 -@cell-size/2, -@cell-size/2 0px;
+
+ &:before {
+ content: "";
+ display: block;
+ padding-top: ~"calc(100% - 2px)";
+ background-color: inherit;
+ border: 1px solid rgba(0, 0, 0, 0.1);
+ border-radius: 2px;
+ overflow: hidden;
+ }
+}
diff --git a/viz-lib/src/components/ColorPicker/utils.ts b/viz-lib/src/components/ColorPicker/utils.ts
new file mode 100644
index 000000000..4736e786a
--- /dev/null
+++ b/viz-lib/src/components/ColorPicker/utils.ts
@@ -0,0 +1,14 @@
+import { isArray, findKey } from "lodash";
+import tinycolor from "tinycolor2";
+
+export function validateColor(value: any, fallback = null) {
+ value = tinycolor(value);
+ return value.isValid() ? "#" + value.toHex().toUpperCase() : fallback;
+}
+
+export function getColorName(color: any, presetColors: any) {
+ if (isArray(presetColors)) {
+ return color;
+ }
+ return findKey(presetColors, v => validateColor(v) === color) || color;
+}
diff --git a/viz-lib/src/components/ErrorBoundary.tsx b/viz-lib/src/components/ErrorBoundary.tsx
new file mode 100644
index 000000000..3238fa113
--- /dev/null
+++ b/viz-lib/src/components/ErrorBoundary.tsx
@@ -0,0 +1,85 @@
+import { isFunction } from "lodash";
+import React from "react";
+import debug from "debug";
+import Alert from "antd/lib/alert";
+
+const logger = debug("redash:errors");
+
+export const ErrorBoundaryContext = React.createContext({
+ handleError: (error: any) => {
+ // Allow calling chain to roll up, and then throw the error in global context
+ setTimeout(() => {
+ throw error;
+ });
+ },
+ reset: () => {},
+});
+
+type OwnErrorMessageProps = {
+ children?: React.ReactNode;
+};
+
+type ErrorMessageProps = OwnErrorMessageProps & typeof ErrorMessage.defaultProps;
+
+export function ErrorMessage({ children }: ErrorMessageProps) {
+ return ;
+}
+
+ErrorMessage.defaultProps = {
+ children: "Something went wrong.",
+};
+
+type OwnErrorBoundaryProps = {
+ renderError?: (...args: any[]) => any;
+};
+
+type ErrorBoundaryState = any;
+
+type ErrorBoundaryProps = OwnErrorBoundaryProps & typeof ErrorBoundary.defaultProps;
+
+export default class ErrorBoundary extends React.Component {
+ static defaultProps = {
+ children: null,
+ renderError: null,
+ };
+
+ state = { error: null };
+
+ handleError = (error: any) => {
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'getDerivedStateFromError' does not exist... Remove this comment to see the full error message
+ this.setState(this.constructor.getDerivedStateFromError(error));
+ this.componentDidCatch(error, null);
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'handleException' does not exist on type ... Remove this comment to see the full error message
+ if (isFunction(window.handleException)) {
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'handleException' does not exist on type ... Remove this comment to see the full error message
+ window.handleException(error);
+ }
+ };
+
+ reset = () => {
+ this.setState({ error: null });
+ };
+
+ static getDerivedStateFromError(error: any) {
+ return { error };
+ }
+
+ componentDidCatch(error: any, errorInfo: any) {
+ logger(error, errorInfo);
+ }
+
+ render() {
+ const { renderError, children } = this.props;
+ const { error } = this.state;
+
+ if (error) {
+ if (isFunction(renderError)) {
+ // @ts-expect-error ts-migrate(2349) FIXME: This expression is not callable.
+ return renderError(error);
+ }
+ return ;
+ }
+
+ return {children} ;
+ }
+}
diff --git a/viz-lib/src/components/HtmlContent.tsx b/viz-lib/src/components/HtmlContent.tsx
new file mode 100644
index 000000000..b30f9ece3
--- /dev/null
+++ b/viz-lib/src/components/HtmlContent.tsx
@@ -0,0 +1,25 @@
+import React from "react";
+import PropTypes from "prop-types";
+import sanitize from "@/services/sanitize";
+
+const HtmlContent = React.memo(function HtmlContent({ children, ...props }) {
+ return (
+
+ );
+});
+
+// @ts-expect-error ts-migrate(2339) FIXME: Property 'propTypes' does not exist on type 'Named... Remove this comment to see the full error message
+HtmlContent.propTypes = {
+ children: PropTypes.string,
+};
+
+// @ts-expect-error ts-migrate(2339) FIXME: Property 'defaultProps' does not exist on type 'Na... Remove this comment to see the full error message
+HtmlContent.defaultProps = {
+ children: "",
+};
+
+export default HtmlContent;
diff --git a/viz-lib/src/components/TextAlignmentSelect/index.less b/viz-lib/src/components/TextAlignmentSelect/index.less
new file mode 100644
index 000000000..6cfcb76ac
--- /dev/null
+++ b/viz-lib/src/components/TextAlignmentSelect/index.less
@@ -0,0 +1,13 @@
+.ant-radio-group.text-alignment-select {
+ display: flex;
+ align-items: stretch;
+ justify-content: stretch;
+
+ .ant-radio-button-wrapper {
+ flex-grow: 1;
+ text-align: center;
+ // fit height
+ height: 35px;
+ line-height: 33px;
+ }
+}
diff --git a/viz-lib/src/components/TextAlignmentSelect/index.tsx b/viz-lib/src/components/TextAlignmentSelect/index.tsx
new file mode 100644
index 000000000..9d278f189
--- /dev/null
+++ b/viz-lib/src/components/TextAlignmentSelect/index.tsx
@@ -0,0 +1,47 @@
+import { pickBy, startsWith } from "lodash";
+import React from "react";
+import cx from "classnames";
+import Radio from "antd/lib/radio";
+import Tooltip from "antd/lib/tooltip";
+
+import AlignLeftOutlinedIcon from "@ant-design/icons/AlignLeftOutlined";
+import AlignCenterOutlinedIcon from "@ant-design/icons/AlignCenterOutlined";
+import AlignRightOutlinedIcon from "@ant-design/icons/AlignRightOutlined";
+
+import "./index.less";
+
+type OwnProps = {
+ className?: string;
+};
+
+type Props = OwnProps & typeof TextAlignmentSelect.defaultProps;
+
+// @ts-expect-error ts-migrate(2700) FIXME: Rest types may only be created from object types.
+export default function TextAlignmentSelect({ className, ...props }: Props) {
+ return (
+ // Antd RadioGroup does not use any custom attributes
+ startsWith(k, "data-"))}>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+}
+
+TextAlignmentSelect.defaultProps = {
+ className: null,
+};
diff --git a/viz-lib/src/components/json-view-interactive/JsonViewInteractive.tsx b/viz-lib/src/components/json-view-interactive/JsonViewInteractive.tsx
new file mode 100644
index 000000000..096d47e97
--- /dev/null
+++ b/viz-lib/src/components/json-view-interactive/JsonViewInteractive.tsx
@@ -0,0 +1,111 @@
+/* eslint-disable react/prop-types */
+
+import { isFinite, isString, isArray, isObject, keys, map } from "lodash";
+import React, { useState } from "react";
+import cx from "classnames";
+
+import "./json-view-interactive.less";
+
+function JsonBlock({ value, children, openingBrace, closingBrace, withKeys }: any) {
+ const [isExpanded, setIsExpanded] = useState(false);
+
+ const objectKeys = keys(value);
+ const count = objectKeys.length;
+
+ return (
+
+ {count > 0 && (
+ setIsExpanded(!isExpanded)}>
+
+
+ )}
+ {openingBrace}
+ {!isExpanded && count > 0 && (
+ setIsExpanded(true)}>
+ …
+
+ )}
+ {isExpanded && (
+
+ {map(objectKeys, (key, index) => {
+ const isFirst = index === 0;
+ const isLast = index === count - 1;
+ const comma = isLast ? null : , ;
+ return (
+
+ {withKeys && (
+
+
+ :
+
+
+ )}
+ {comma}
+
+ );
+ })}
+
+ )}
+ {closingBrace}
+ {children}
+ {!isExpanded && {" // " + count + " " + (count === 1 ? "item" : "items")} }
+
+ );
+}
+
+function JsonValue({ value, children }: any) {
+ if (value === null || value === false || value === true || isFinite(value)) {
+ return (
+
+ {"" + value}
+ {children}
+
+ );
+ }
+ if (isString(value)) {
+ return (
+
+ "
+ {value}
+ "
+ {children}
+
+ );
+ }
+ if (isArray(value)) {
+ return (
+
+ {children}
+
+ );
+ }
+ if (isObject(value)) {
+ return (
+
+ {children}
+
+ );
+ }
+ return null;
+}
+
+type OwnJsonViewInteractiveProps = {
+ value?: any;
+};
+
+type JsonViewInteractiveProps = OwnJsonViewInteractiveProps & typeof JsonViewInteractive.defaultProps;
+
+export default function JsonViewInteractive({ value }: JsonViewInteractiveProps) {
+ return (
+
+
+
+ );
+}
+
+JsonViewInteractive.defaultProps = {
+ // `null` will be rendered as "null" because it is a valid JSON value, so use `undefined` for no value
+ value: undefined,
+};
diff --git a/viz-lib/src/components/json-view-interactive/json-view-interactive.less b/viz-lib/src/components/json-view-interactive/json-view-interactive.less
new file mode 100644
index 000000000..fdffcb87a
--- /dev/null
+++ b/viz-lib/src/components/json-view-interactive/json-view-interactive.less
@@ -0,0 +1,112 @@
+@import "../../visualizations/variables";
+
+@jvi-gutter: 20px;
+@jvi-spacing: 2px;
+
+.jvi-root {
+ display: block;
+ font-family: @font-family-monospace;
+}
+
+.jvi-block {
+ display: block;
+ border-left: 1px dotted @table-border-color;
+ margin: 0 0 0 2px;
+}
+
+.jvi-item {
+ display: block;
+ position: relative;
+ padding: 0 0 0 @jvi-gutter;
+ white-space: nowrap;
+
+ .jvi-item {
+ margin: @jvi-spacing 0;
+ }
+
+ &.jvi-nested-last > span > .jvi-punctuation.jvi-comma {
+ display: none;
+ }
+}
+
+.jvi-toggle {
+ position: absolute;
+ left: 0;
+ top: 0;
+ width: @jvi-gutter;
+ height: @jvi-gutter;
+ line-height: @jvi-gutter;
+ text-align: center;
+ cursor: pointer;
+ z-index: 1;
+ color: @text-color;
+ opacity: 0.5;
+
+ &:hover {
+ opacity: 0.8;
+ }
+
+ i {
+ vertical-align: middle;
+ }
+
+ &.hidden {
+ display: none;
+ }
+}
+
+.jvi-punctuation {
+ color: @text-color;
+
+ &.jvi-string {
+ color: @green;
+ }
+
+ &.jvi-braces {
+ margin: 0 @jvi-spacing;
+ }
+
+ &.jvi-ellipsis {
+ padding: 0 @jvi-spacing;
+ cursor: pointer;
+
+ &:hover {
+ text-decoration: underline;
+ }
+ }
+
+ &.hidden {
+ display: none;
+ }
+}
+
+.jvi-value {
+ color: @green;
+
+ &.jvi-primitive {
+ color: @orange;
+ }
+
+ &.jvi-string {
+ white-space: normal;
+ }
+}
+
+.jvi-object-key {
+ .jvi-value,
+ .jvi-punctuation {
+ color: @blue;
+ }
+}
+
+.jvi-comment {
+ color: @text-muted;
+ font-family: @visualizations-font;
+ font-style: italic;
+ margin: 0 0 0 2 * @jvi-spacing;
+ opacity: 0.5;
+
+ &.hidden {
+ display: none;
+ }
+}
diff --git a/viz-lib/src/components/sortable/index.tsx b/viz-lib/src/components/sortable/index.tsx
new file mode 100644
index 000000000..2e329cec0
--- /dev/null
+++ b/viz-lib/src/components/sortable/index.tsx
@@ -0,0 +1,97 @@
+import { isFunction, wrap } from "lodash";
+import React, { useRef, useState } from "react";
+import cx from "classnames";
+// @ts-expect-error ts-migrate(2724) FIXME: Module '"../../../node_modules/react-sortable-hoc/... Remove this comment to see the full error message
+import { sortableContainer, sortableElement, sortableHandle } from "react-sortable-hoc";
+
+import "./style.less";
+
+export const DragHandle = sortableHandle(({ className, ...restProps }: any) => (
+
+));
+
+export const SortableContainerWrapper = sortableContainer(({ children }: any) => children);
+
+export const SortableElement = sortableElement(({ children }: any) => children);
+
+type OwnProps = {
+ disabled?: boolean;
+ containerComponent?: React.ReactElement;
+ containerProps?: any;
+ children?: React.ReactNode;
+};
+
+type Props = OwnProps & typeof SortableContainer.defaultProps;
+
+export function SortableContainer({ disabled, containerComponent, containerProps, children, ...wrapperProps }: Props) {
+ const containerRef = useRef();
+ const [isDragging, setIsDragging] = useState(false);
+
+ wrapperProps = { ...wrapperProps };
+ containerProps = { ...containerProps };
+
+ if (disabled) {
+ // Disabled state:
+ // - forbid drag'n'drop (and therefore no need to hook events
+ // - don't override anything on container element
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'shouldCancelStart' does not exist on typ... Remove this comment to see the full error message
+ wrapperProps.shouldCancelStart = () => true;
+ } else {
+ // Enabled state:
+
+ // - use container element as a default helper element
+ // @ts-expect-error
+ wrapperProps.helperContainer = wrap(wrapperProps.helperContainer, helperContainer =>
+ isFunction(helperContainer) ? helperContainer(containerRef.current) : containerRef.current
+ );
+
+ // - hook drag start/end events
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'updateBeforeSortStart' does not exist on... Remove this comment to see the full error message
+ wrapperProps.updateBeforeSortStart = wrap(wrapperProps.updateBeforeSortStart, (updateBeforeSortStart, ...args) => {
+ setIsDragging(true);
+ if (isFunction(updateBeforeSortStart)) {
+ updateBeforeSortStart(...args);
+ }
+ });
+ // @ts-expect-error
+ wrapperProps.onSortStart = wrap(wrapperProps.onSortStart, (onSortStart, ...args) => {
+ if (isFunction(onSortStart)) {
+ onSortStart(...args);
+ } else {
+ const event = args[1] as DragEvent;
+ event.preventDefault();
+ }
+ });
+
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'onSortEnd' does not exist on type '{}'.
+ wrapperProps.onSortEnd = wrap(wrapperProps.onSortEnd, (onSortEnd, ...args) => {
+ setIsDragging(false);
+ if (isFunction(onSortEnd)) {
+ onSortEnd(...args);
+ }
+ });
+
+ // - update container element: add classes and take a ref
+ containerProps.className = cx(
+ "sortable-container",
+ { "sortable-container-dragging": isDragging },
+ containerProps.className
+ );
+ containerProps.ref = containerRef;
+ }
+
+ const ContainerComponent = containerComponent;
+ return (
+
+ {/* @ts-expect-error ts-migrate(2604) FIXME: JSX element type 'ContainerComponent' does not hav... Remove this comment to see the full error message */}
+ {children}
+
+ );
+}
+
+SortableContainer.defaultProps = {
+ disabled: false,
+ containerComponent: "div",
+ containerProps: {},
+ children: null,
+};
diff --git a/viz-lib/src/components/sortable/style.less b/viz-lib/src/components/sortable/style.less
new file mode 100644
index 000000000..1277df8e9
--- /dev/null
+++ b/viz-lib/src/components/sortable/style.less
@@ -0,0 +1,30 @@
+.drag-handle {
+ vertical-align: bottom;
+ cursor: move;
+
+ display: inline-flex;
+ align-items: stretch;
+ justify-content: center;
+
+ &:before {
+ content: '';
+ display: block;
+ width: 6px;
+
+ background:
+ linear-gradient(90deg, transparent 0px, white 1px, white 2px) center,
+ linear-gradient(transparent 0px, white 1px, white 2px) center,
+ #111111;
+ background-size: 2px 2px;
+ }
+}
+
+.sortable-container {
+ transition: background-color 200ms ease-out;
+ transition-delay: 300ms; // short pause before returning to original bgcolor
+
+ &.sortable-container-dragging {
+ transition-delay: 0s;
+ background-color: #f6f8f9;
+ }
+}
diff --git a/viz-lib/src/components/visualizations/editor/ContextHelp.tsx b/viz-lib/src/components/visualizations/editor/ContextHelp.tsx
new file mode 100644
index 000000000..d523820e5
--- /dev/null
+++ b/viz-lib/src/components/visualizations/editor/ContextHelp.tsx
@@ -0,0 +1,57 @@
+import React from "react";
+import Popover from "antd/lib/popover";
+import QuestionCircleFilledIcon from "@ant-design/icons/QuestionCircleFilled";
+import { visualizationsSettings } from "@/visualizations/visualizationsSettings";
+
+import "./context-help.less";
+
+type OwnContextHelpProps = {
+ icon?: React.ReactNode;
+ children?: React.ReactNode;
+};
+
+type ContextHelpProps = OwnContextHelpProps & typeof ContextHelp.defaultProps;
+
+export default function ContextHelp({ icon, children, ...props }: ContextHelpProps) {
+ return (
+
+ {icon || ContextHelp.defaultIcon}
+
+ );
+}
+
+ContextHelp.defaultProps = {
+ icon: null,
+ children: null,
+};
+
+ContextHelp.defaultIcon = ;
+
+function NumberFormatSpecs() {
+ const { HelpTriggerComponent } = visualizationsSettings;
+ return (
+
+ {ContextHelp.defaultIcon}
+
+ );
+}
+
+function DateTimeFormatSpecs() {
+ const { HelpTriggerComponent } = visualizationsSettings;
+ return (
+
+ {ContextHelp.defaultIcon}
+
+ );
+}
+
+ContextHelp.NumberFormatSpecs = NumberFormatSpecs;
+ContextHelp.DateTimeFormatSpecs = DateTimeFormatSpecs;
diff --git a/viz-lib/src/components/visualizations/editor/Section.less b/viz-lib/src/components/visualizations/editor/Section.less
new file mode 100644
index 000000000..7299a10ef
--- /dev/null
+++ b/viz-lib/src/components/visualizations/editor/Section.less
@@ -0,0 +1,8 @@
+.visualization-editor-section-title {
+ margin-top: 0px;
+ margin-bottom: 15px;
+}
+
+.visualization-editor-section {
+ margin-bottom: 15px;
+}
diff --git a/viz-lib/src/components/visualizations/editor/Section.tsx b/viz-lib/src/components/visualizations/editor/Section.tsx
new file mode 100644
index 000000000..56816741d
--- /dev/null
+++ b/viz-lib/src/components/visualizations/editor/Section.tsx
@@ -0,0 +1,52 @@
+import React from "react";
+import cx from "classnames";
+
+import "./Section.less";
+
+type OwnSectionTitleProps = {
+ className?: string;
+ children?: React.ReactNode;
+};
+
+type SectionTitleProps = OwnSectionTitleProps & typeof SectionTitle.defaultProps;
+
+// @ts-expect-error ts-migrate(2700) FIXME: Rest types may only be created from object types.
+function SectionTitle({ className, children, ...props }: SectionTitleProps) {
+ if (!children) {
+ return null;
+ }
+
+ return (
+
+ {children}
+
+ );
+}
+
+SectionTitle.defaultProps = {
+ className: null,
+ children: null,
+};
+
+type OwnSectionProps = {
+ className?: string;
+ children?: React.ReactNode;
+};
+
+type SectionProps = OwnSectionProps & typeof Section.defaultProps;
+
+// @ts-expect-error ts-migrate(2700) FIXME: Rest types may only be created from object types.
+export default function Section({ className, children, ...props }: SectionProps) {
+ return (
+
+ {children}
+
+ );
+}
+
+Section.defaultProps = {
+ className: null,
+ children: null,
+};
+
+Section.Title = SectionTitle;
diff --git a/viz-lib/src/components/visualizations/editor/Switch.less b/viz-lib/src/components/visualizations/editor/Switch.less
new file mode 100644
index 000000000..fa8376574
--- /dev/null
+++ b/viz-lib/src/components/visualizations/editor/Switch.less
@@ -0,0 +1,8 @@
+.switch-with-label {
+ display: flex;
+ align-items: center;
+
+ .switch-text {
+ margin-left: 10px;
+ }
+}
diff --git a/viz-lib/src/components/visualizations/editor/Switch.tsx b/viz-lib/src/components/visualizations/editor/Switch.tsx
new file mode 100644
index 000000000..7ba6003c3
--- /dev/null
+++ b/viz-lib/src/components/visualizations/editor/Switch.tsx
@@ -0,0 +1,44 @@
+import React, { useMemo } from "react";
+import AntSwitch from "antd/lib/switch";
+import Typography from "antd/lib/typography";
+
+import "./Switch.less";
+
+type OwnProps = {
+ id?: string;
+ disabled?: boolean;
+ children?: React.ReactNode;
+};
+
+type Props = OwnProps & typeof Switch.defaultProps;
+
+// @ts-expect-error ts-migrate(2700) FIXME: Rest types may only be created from object types.
+export default function Switch({ id, children, disabled, ...props }: Props) {
+ const fallbackId = useMemo(
+ () =>
+ `visualization-editor-control-${Math.random()
+ .toString(36)
+ .substr(2, 10)}`,
+ []
+ );
+ id = id || fallbackId;
+
+ if (children) {
+ return (
+
+
+
+ {children}
+
+
+ );
+ }
+
+ return ;
+}
+
+Switch.defaultProps = {
+ id: null,
+ disabled: false,
+ children: null,
+};
diff --git a/viz-lib/src/components/visualizations/editor/TextArea.less b/viz-lib/src/components/visualizations/editor/TextArea.less
new file mode 100644
index 000000000..79bce33b5
--- /dev/null
+++ b/viz-lib/src/components/visualizations/editor/TextArea.less
@@ -0,0 +1,3 @@
+.visualization-editor-text-area {
+ resize: vertical;
+}
diff --git a/viz-lib/src/components/visualizations/editor/TextArea.tsx b/viz-lib/src/components/visualizations/editor/TextArea.tsx
new file mode 100644
index 000000000..842df3814
--- /dev/null
+++ b/viz-lib/src/components/visualizations/editor/TextArea.tsx
@@ -0,0 +1,12 @@
+import React from "react";
+import cx from "classnames";
+import AntInput from "antd/lib/input";
+import withControlLabel from "./withControlLabel";
+
+import "./TextArea.less";
+
+function TextArea({ className, ...otherProps }: any) {
+ return ;
+}
+
+export default withControlLabel(TextArea);
diff --git a/viz-lib/src/components/visualizations/editor/context-help.less b/viz-lib/src/components/visualizations/editor/context-help.less
new file mode 100644
index 000000000..fc00e8fe8
--- /dev/null
+++ b/viz-lib/src/components/visualizations/editor/context-help.less
@@ -0,0 +1,17 @@
+a.visualization-editor-context-help {
+ &,
+ .ant-typography & {
+ font: inherit;
+ color: inherit;
+
+ &:hover,
+ &:active {
+ color: #0a6ebd;
+ }
+ }
+}
+
+.context-help-default-icon {
+ margin-left: 5px;
+ margin-right: 5px;
+}
diff --git a/viz-lib/src/components/visualizations/editor/control-label.less b/viz-lib/src/components/visualizations/editor/control-label.less
new file mode 100644
index 000000000..6ea8c80e8
--- /dev/null
+++ b/viz-lib/src/components/visualizations/editor/control-label.less
@@ -0,0 +1,11 @@
+.visualization-editor-control-label {
+ &.visualization-editor-control-label-horizontal {
+ label {
+ margin-bottom: 0;
+ }
+ }
+}
+
+.visualization-editor-input {
+ width: 100% !important;
+}
diff --git a/viz-lib/src/components/visualizations/editor/createTabbedEditor.tsx b/viz-lib/src/components/visualizations/editor/createTabbedEditor.tsx
new file mode 100644
index 000000000..842045514
--- /dev/null
+++ b/viz-lib/src/components/visualizations/editor/createTabbedEditor.tsx
@@ -0,0 +1,57 @@
+import { isFunction, map, filter, extend, merge } from "lodash";
+import React from "react";
+import Tabs from "antd/lib/tabs";
+import { EditorPropTypes } from "@/visualizations/prop-types";
+
+export const UpdateOptionsStrategy = {
+ replace: (existingOptions: any, newOptions: any) => merge({}, newOptions),
+ shallowMerge: (existingOptions: any, newOptions: any) => extend({}, existingOptions, newOptions),
+ deepMerge: (existingOptions: any, newOptions: any) => merge({}, existingOptions, newOptions),
+};
+
+/*
+(ts-migrate) TODO: Migrate the remaining prop types
+...EditorPropTypes
+*/
+type OwnProps = {
+ tabs?: {
+ key: string;
+ title: string | ((...args: any[]) => any);
+ isAvailable?: (...args: any[]) => any;
+ component: (...args: any[]) => any;
+ }[];
+};
+
+type Props = OwnProps & typeof TabbedEditor.defaultProps;
+
+// @ts-expect-error ts-migrate(2339) FIXME: Property 'options' does not exist on type 'Props'.
+export function TabbedEditor({ tabs, options, data, onOptionsChange, ...restProps }: Props) {
+ const optionsChanged = (newOptions: any, updateStrategy = UpdateOptionsStrategy.deepMerge) => {
+ onOptionsChange(updateStrategy(options, newOptions));
+ };
+
+ // @ts-expect-error ts-migrate(2322) FIXME: Type '(number | ((() => string) & (() => string)) ... Remove this comment to see the full error message
+ tabs = filter(tabs, tab => (isFunction(tab.isAvailable) ? tab.isAvailable(options, data) : true));
+
+ return (
+
+ {map(tabs, ({ key, title, component: Component }) => (
+ {isFunction(title) ? title(options) : title}}>
+
+
+ ))}
+
+ );
+}
+
+TabbedEditor.defaultProps = {
+ tabs: [],
+};
+
+export default function createTabbedEditor(tabs: any) {
+ return function TabbedEditorWrapper(props: any) {
+ return ;
+ };
+}
diff --git a/viz-lib/src/components/visualizations/editor/index.ts b/viz-lib/src/components/visualizations/editor/index.ts
new file mode 100644
index 000000000..27c505759
--- /dev/null
+++ b/viz-lib/src/components/visualizations/editor/index.ts
@@ -0,0 +1,21 @@
+import AntSelect from "antd/lib/select";
+import AntInput from "antd/lib/input";
+import AntInputNumber from "antd/lib/input-number";
+import Checkbox from "antd/lib/checkbox";
+
+import RedashColorPicker from "@/components/ColorPicker";
+import RedashTextAlignmentSelect from "@/components/TextAlignmentSelect";
+
+import withControlLabel, { ControlLabel } from "./withControlLabel";
+import createTabbedEditor from "./createTabbedEditor";
+import Section from "./Section";
+import Switch from "./Switch";
+import TextArea from "./TextArea";
+import ContextHelp from "./ContextHelp";
+
+export { Section, ControlLabel, Checkbox, Switch, TextArea, ContextHelp, withControlLabel, createTabbedEditor };
+export const Select = withControlLabel(AntSelect);
+export const Input = withControlLabel(AntInput);
+export const InputNumber = withControlLabel(AntInputNumber);
+export const ColorPicker = withControlLabel(RedashColorPicker);
+export const TextAlignmentSelect = withControlLabel(RedashTextAlignmentSelect);
diff --git a/viz-lib/src/components/visualizations/editor/withControlLabel.tsx b/viz-lib/src/components/visualizations/editor/withControlLabel.tsx
new file mode 100644
index 000000000..133a9ad04
--- /dev/null
+++ b/viz-lib/src/components/visualizations/editor/withControlLabel.tsx
@@ -0,0 +1,91 @@
+import React, { useMemo } from "react";
+import cx from "classnames";
+import hoistNonReactStatics from "hoist-non-react-statics";
+import * as Grid from "antd/lib/grid";
+import Typography from "antd/lib/typography";
+
+import "./control-label.less";
+
+type OwnProps = {
+ layout?: "vertical" | "horizontal";
+ label?: React.ReactNode;
+ labelProps?: any;
+ disabled?: boolean;
+ children?: React.ReactNode;
+};
+
+type Props = OwnProps & typeof ControlLabel.defaultProps;
+
+export function ControlLabel({ layout, label, labelProps, disabled, children }: Props) {
+ if (layout === "vertical" && label) {
+ return (
+
+
+ {label}
+
+ {children}
+
+ );
+ }
+
+ if (layout === "horizontal" && label) {
+ return (
+
+
+
+ {label}
+
+
+ {children}
+
+ );
+ }
+
+ return children;
+}
+
+ControlLabel.defaultProps = {
+ layout: "vertical",
+ label: null,
+ disabled: false,
+ children: null,
+};
+
+export default function withControlLabel(WrappedControl: any) {
+ // eslint-disable-next-line react/prop-types
+ function ControlWrapper({ className, id, layout, label, labelProps, disabled, ...props }: any) {
+ const fallbackId = useMemo(
+ () =>
+ `visualization-editor-control-${Math.random()
+ .toString(36)
+ .substr(2, 10)}`,
+ []
+ );
+ labelProps = {
+ ...labelProps,
+ htmlFor: id || fallbackId,
+ };
+
+ return (
+
+ {/* @ts-expect-error ts-migrate(2322) FIXME: Type 'Element' is not assignable to type 'null | u... Remove this comment to see the full error message */}
+
+
+ );
+ }
+
+ // Copy static methods from `WrappedComponent`
+ hoistNonReactStatics(ControlWrapper, WrappedControl);
+
+ return ControlWrapper;
+}
diff --git a/viz-lib/src/index.ts b/viz-lib/src/index.ts
new file mode 100644
index 000000000..f75ca6d8b
--- /dev/null
+++ b/viz-lib/src/index.ts
@@ -0,0 +1,8 @@
+export * from "./visualizations";
+export * from "./visualizations/visualizationsSettings";
+export { VisualizationType } from "./visualizations/prop-types";
+export {
+ default as registeredVisualizations,
+ getDefaultVisualization,
+ newVisualization,
+} from "./visualizations/registeredVisualizations";
diff --git a/viz-lib/src/lib/chooseTextColorForBackground.ts b/viz-lib/src/lib/chooseTextColorForBackground.ts
new file mode 100644
index 000000000..94e35e647
--- /dev/null
+++ b/viz-lib/src/lib/chooseTextColorForBackground.ts
@@ -0,0 +1,11 @@
+import { maxBy } from "lodash";
+import chroma from "chroma-js";
+
+export default function chooseTextColorForBackground(backgroundColor: any, textColors = ["#ffffff", "#333333"]) {
+ try {
+ backgroundColor = chroma(backgroundColor);
+ return maxBy(textColors, color => chroma.contrast(backgroundColor, color));
+ } catch (e) {
+ return null;
+ }
+}
diff --git a/viz-lib/src/lib/hooks/useMemoWithDeepCompare.ts b/viz-lib/src/lib/hooks/useMemoWithDeepCompare.ts
new file mode 100644
index 000000000..a42adfe17
--- /dev/null
+++ b/viz-lib/src/lib/hooks/useMemoWithDeepCompare.ts
@@ -0,0 +1,12 @@
+import { isEqual } from "lodash";
+import { useMemo, useRef } from "react";
+
+export default function useMemoWithDeepCompare(create: any, inputs: any) {
+ const valueRef = useRef();
+ const value = useMemo(create, inputs);
+ if (!isEqual(value, valueRef.current)) {
+ // @ts-expect-error ts-migrate(2322) FIXME: Type 'unknown' is not assignable to type 'undefine... Remove this comment to see the full error message
+ valueRef.current = value;
+ }
+ return valueRef.current;
+}
diff --git a/viz-lib/src/lib/referenceCountingCache.ts b/viz-lib/src/lib/referenceCountingCache.ts
new file mode 100644
index 000000000..778acff2e
--- /dev/null
+++ b/viz-lib/src/lib/referenceCountingCache.ts
@@ -0,0 +1,46 @@
+import { each, debounce } from "lodash";
+
+export default function createReferenceCountingCache({ cleanupDelay = 2000 } = {}) {
+ const items = {};
+
+ const cleanup = debounce(() => {
+ each(items, (item, key) => {
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'refCount' does not exist on type 'never'... Remove this comment to see the full error message
+ if (item.refCount <= 0) {
+ // @ts-expect-error ts-migrate(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message
+ delete items[key];
+ }
+ });
+ }, cleanupDelay);
+
+ function get(key: any, getter: any) {
+ // @ts-expect-error ts-migrate(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message
+ if (!items[key]) {
+ // @ts-expect-error ts-migrate(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message
+ items[key] = {
+ value: getter(),
+ refCount: 0,
+ };
+ }
+ // @ts-expect-error ts-migrate(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message
+ const item = items[key];
+ item.refCount += 1;
+ return item.value;
+ }
+
+ function release(key: any) {
+ // @ts-expect-error ts-migrate(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message
+ if (items[key]) {
+ // @ts-expect-error ts-migrate(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message
+ const item = items[key];
+ if (item.refCount > 0) {
+ item.refCount -= 1;
+ if (item.refCount <= 0) {
+ cleanup();
+ }
+ }
+ }
+ }
+
+ return { get, release };
+}
diff --git a/viz-lib/src/lib/utils.ts b/viz-lib/src/lib/utils.ts
new file mode 100644
index 000000000..ffca8731a
--- /dev/null
+++ b/viz-lib/src/lib/utils.ts
@@ -0,0 +1,43 @@
+import moment from "moment";
+import { visualizationsSettings } from "@/visualizations/visualizationsSettings";
+
+function formatDateTime(value: any) {
+ if (!value) {
+ return "";
+ }
+
+ const parsed = moment(value);
+ if (!parsed.isValid()) {
+ return "-";
+ }
+
+ return parsed.format(visualizationsSettings.dateTimeFormat);
+}
+
+function formatDate(value: any) {
+ if (!value) {
+ return "";
+ }
+
+ const parsed = moment(value);
+ if (!parsed.isValid()) {
+ return "-";
+ }
+
+ return parsed.format(visualizationsSettings.dateFormat);
+}
+
+export function formatColumnValue(value: any, columnType = null) {
+ if (moment.isMoment(value)) {
+ if (columnType === "date") {
+ return formatDate(value);
+ }
+ return formatDateTime(value);
+ }
+
+ if (typeof value === "boolean") {
+ return value.toString();
+ }
+
+ return value;
+}
diff --git a/viz-lib/src/lib/value-format.tsx b/viz-lib/src/lib/value-format.tsx
new file mode 100644
index 000000000..96693d2d3
--- /dev/null
+++ b/viz-lib/src/lib/value-format.tsx
@@ -0,0 +1,97 @@
+import React from "react";
+import ReactDOMServer from "react-dom/server";
+import moment from "moment/moment";
+import numeral from "numeral";
+import { isString, isArray, isUndefined, isFinite, isNil, toString } from "lodash";
+import { visualizationsSettings } from "@/visualizations/visualizationsSettings";
+
+numeral.options.scalePercentBy100 = false;
+
+// eslint-disable-next-line
+const urlPattern = /(^|[\s\n]| )((?:https?|ftp):\/\/[\-A-Z0-9+\u0026\u2019@#\/%?=()~_|!:,.;]*[\-A-Z0-9+\u0026@#\/%=~()_|])/gi;
+
+const hasOwnProperty = Object.prototype.hasOwnProperty;
+
+export function createTextFormatter(highlightLinks: any) {
+ if (highlightLinks) {
+ return (value: any) => {
+ if (isString(value)) {
+ const Link = visualizationsSettings.LinkComponent;
+ value = value.replace(urlPattern, (unused, prefix, href) => {
+ const link = ReactDOMServer.renderToStaticMarkup(
+
+ {href}
+
+ );
+ return prefix + link;
+ });
+ }
+ return toString(value);
+ };
+ }
+ return (value: any) => toString(value);
+}
+
+function toMoment(value: any) {
+ if (moment.isMoment(value)) {
+ return value;
+ }
+ if (isFinite(value)) {
+ return moment(value);
+ }
+ // same as default `moment(value)`, but avoid fallback to `new Date()`
+ return moment(toString(value), [moment.ISO_8601, moment.RFC_2822]);
+}
+
+export function createDateTimeFormatter(format: any) {
+ if (isString(format) && format !== "") {
+ return (value: any) => {
+ const wrapped = toMoment(value);
+ return wrapped.isValid() ? wrapped.format(format) : toString(value);
+ };
+ }
+ return (value: any) => toString(value);
+}
+
+export function createBooleanFormatter(values: any) {
+ if (isArray(values)) {
+ if (values.length >= 2) {
+ // Both `true` and `false` specified
+ return (value: any) => {
+ if (isNil(value)) {
+ return "";
+ }
+ return "" + values[value ? 1 : 0];
+ };
+ } else if (values.length === 1) {
+ // Only `true`
+ return (value: any) => (value ? values[0] : "");
+ }
+ }
+ return (value: any) => {
+ if (isNil(value)) {
+ return "";
+ }
+ return value ? "true" : "false";
+ };
+}
+
+export function createNumberFormatter(format: any) {
+ if (isString(format) && format !== "") {
+ const n = numeral(0); // cache `numeral` instance
+ return (value: any) => (value === null || value === "" ? "" : n.set(value).format(format));
+ }
+ return (value: any) => toString(value);
+}
+
+export function formatSimpleTemplate(str: any, data: any) {
+ if (!isString(str)) {
+ return "";
+ }
+ return str.replace(/{{\s*([^\s]+?)\s*}}/g, (match, prop) => {
+ if (hasOwnProperty.call(data, prop) && !isUndefined(data[prop])) {
+ return data[prop];
+ }
+ return match;
+ });
+}
diff --git a/viz-lib/src/services/resizeObserver.ts b/viz-lib/src/services/resizeObserver.ts
new file mode 100644
index 000000000..b1825e8b3
--- /dev/null
+++ b/viz-lib/src/services/resizeObserver.ts
@@ -0,0 +1,32 @@
+const items = new Map();
+
+function checkItems() {
+ if (items.size > 0) {
+ items.forEach((item, node) => {
+ const bounds = node.getBoundingClientRect();
+ // convert to int (because these numbers needed for comparisons), but preserve 1 decimal point
+ const width = Math.round(bounds.width * 10);
+ const height = Math.round(bounds.height * 10);
+
+ if (item.width !== width || item.height !== height) {
+ item.width = width;
+ item.height = height;
+ item.callback(node);
+ }
+ });
+
+ setTimeout(checkItems, 100);
+ }
+}
+
+export default function observe(node: any, callback: any) {
+ if (node && !items.has(node)) {
+ const shouldTrigger = items.size === 0;
+ items.set(node, { callback });
+ if (shouldTrigger) {
+ checkItems();
+ }
+ return () => items.delete(node);
+ }
+ return () => {};
+}
diff --git a/viz-lib/src/services/sanitize.ts b/viz-lib/src/services/sanitize.ts
new file mode 100644
index 000000000..47521ba40
--- /dev/null
+++ b/viz-lib/src/services/sanitize.ts
@@ -0,0 +1,23 @@
+import { isString } from "lodash";
+import DOMPurify from "dompurify";
+
+DOMPurify.setConfig({
+ ADD_ATTR: ["target"],
+});
+
+DOMPurify.addHook("afterSanitizeAttributes", function(node) {
+ // Fix elements with `target` attribute:
+ // - allow only `target="_blank"
+ // - add `rel="noopener noreferrer"` to prevent https://www.owasp.org/index.php/Reverse_Tabnabbing
+
+ const target = node.getAttribute("target");
+ if (isString(target) && target.toLowerCase() === "_blank") {
+ node.setAttribute("rel", "noopener noreferrer");
+ } else {
+ node.removeAttribute("target");
+ }
+});
+
+export { DOMPurify };
+
+export default DOMPurify.sanitize;
diff --git a/viz-lib/src/visualizations/ColorPalette.ts b/viz-lib/src/visualizations/ColorPalette.ts
new file mode 100644
index 000000000..3663a6821
--- /dev/null
+++ b/viz-lib/src/visualizations/ColorPalette.ts
@@ -0,0 +1,38 @@
+import { values } from "lodash";
+
+// The following colors will be used if you pick "Automatic" color
+export const BaseColors = {
+ Blue: "#356AFF",
+ Red: "#E92828",
+ Green: "#3BD973",
+ Purple: "#604FE9",
+ Cyan: "#50F5ED",
+ Orange: "#FB8D3D",
+ "Light Blue": "#799CFF",
+ Lilac: "#B554FF",
+ "Light Green": "#8CFFB4",
+ Brown: "#A55F2A",
+ Black: "#000000",
+ Gray: "#494949",
+ Pink: "#FF7DE3",
+ "Dark Blue": "#002FB4",
+};
+
+// Additional colors for the user to choose from
+export const AdditionalColors = {
+ "Indian Red": "#981717",
+ "Green 2": "#17BF51",
+ "Green 3": "#049235",
+ "Dark Turquoise": "#00B6EB",
+ "Dark Violet": "#A58AFF",
+ "Pink 2": "#C63FA9",
+};
+
+export const ColorPaletteArray = values(BaseColors);
+
+const ColorPalette = {
+ ...BaseColors,
+ ...AdditionalColors,
+};
+
+export default ColorPalette;
diff --git a/viz-lib/src/visualizations/Editor.tsx b/viz-lib/src/visualizations/Editor.tsx
new file mode 100644
index 000000000..a2efbc016
--- /dev/null
+++ b/viz-lib/src/visualizations/Editor.tsx
@@ -0,0 +1,19 @@
+import React, { useMemo } from "react";
+import { EditorPropTypes } from "@/visualizations/prop-types";
+import registeredVisualizations from "@/visualizations/registeredVisualizations";
+
+/*
+(ts-migrate) TODO: Migrate the remaining prop types
+...EditorPropTypes
+*/
+type Props = {
+ type: string;
+} & typeof EditorPropTypes;
+
+export default function Editor({ type, options: optionsProp, data, ...otherProps }: Props) {
+ // @ts-expect-error ts-migrate(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message
+ const { Editor, getOptions } = registeredVisualizations[type];
+ const options = useMemo(() => getOptions(optionsProp, data), [optionsProp, data]);
+
+ return ;
+}
diff --git a/viz-lib/src/visualizations/Renderer.tsx b/viz-lib/src/visualizations/Renderer.tsx
new file mode 100644
index 000000000..9591590d5
--- /dev/null
+++ b/viz-lib/src/visualizations/Renderer.tsx
@@ -0,0 +1,63 @@
+import { isEqual } from "lodash";
+import React, { useEffect, useRef } from "react";
+import ErrorBoundary, { ErrorMessage } from "@/components/ErrorBoundary";
+import { RendererPropTypes } from "@/visualizations/prop-types";
+import registeredVisualizations from "@/visualizations/registeredVisualizations";
+
+/*
+(ts-migrate) TODO: Migrate the remaining prop types
+...RendererPropTypes
+*/
+type Props = {
+ type: string;
+ addonBefore?: React.ReactNode;
+ addonAfter?: React.ReactNode;
+} & typeof RendererPropTypes;
+
+export default function Renderer({
+ type,
+ data,
+ options: optionsProp,
+ visualizationName,
+ addonBefore,
+ addonAfter,
+ ...otherProps
+}: Props) {
+ const lastOptions = useRef();
+ const errorHandlerRef = useRef();
+
+ // @ts-expect-error ts-migrate(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message
+ const { Renderer, getOptions } = registeredVisualizations[type];
+
+ // Avoid unnecessary updates (which may be expensive or cause issues with
+ // internal state of some visualizations like Table) - compare options deeply
+ // and use saved reference if nothing changed
+ // More details: https://github.com/getredash/redash/pull/3963#discussion_r306935810
+ let options = getOptions(optionsProp, data);
+ if (isEqual(lastOptions.current, options)) {
+ options = lastOptions.current;
+ }
+ lastOptions.current = options;
+
+ useEffect(() => {
+ if (errorHandlerRef.current) {
+ // @ts-expect-error ts-migrate(2532) FIXME: Object is possibly 'undefined'.
+ errorHandlerRef.current.reset();
+ }
+ }, [optionsProp, data]);
+
+ return (
+
+ {addonBefore}
+ {/* @ts-expect-error ts-migrate(2769) FIXME: No overload matches this call. */}
+
Error while rendering visualization. }>
+
+
+
+
+ {addonAfter}
+
+ );
+}
diff --git a/viz-lib/src/visualizations/box-plot/Editor.tsx b/viz-lib/src/visualizations/box-plot/Editor.tsx
new file mode 100644
index 000000000..e8a1c6858
--- /dev/null
+++ b/viz-lib/src/visualizations/box-plot/Editor.tsx
@@ -0,0 +1,41 @@
+import React from "react";
+import { Section, Input } from "@/components/visualizations/editor";
+import { EditorPropTypes } from "@/visualizations/prop-types";
+
+export default function Editor({ options, onOptionsChange }: any) {
+ const onXAxisLabelChanged = (xAxisLabel: any) => {
+ const newOptions = { ...options, xAxisLabel };
+ onOptionsChange(newOptions);
+ };
+
+ const onYAxisLabelChanged = (yAxisLabel: any) => {
+ const newOptions = { ...options, yAxisLabel };
+ onOptionsChange(newOptions);
+ };
+
+ return (
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+
+ );
+}
+
+Editor.propTypes = EditorPropTypes;
diff --git a/viz-lib/src/visualizations/box-plot/Renderer.tsx b/viz-lib/src/visualizations/box-plot/Renderer.tsx
new file mode 100644
index 000000000..4abc9ccff
--- /dev/null
+++ b/viz-lib/src/visualizations/box-plot/Renderer.tsx
@@ -0,0 +1,205 @@
+import { map, each } from "lodash";
+import d3 from "d3";
+import React, { useState, useEffect } from "react";
+import resizeObserver from "@/services/resizeObserver";
+import { RendererPropTypes } from "@/visualizations/prop-types";
+import box from "./d3box";
+import "./renderer.less";
+
+function calcIqr(k: any) {
+ return (d: any) => {
+ const q1 = d.quartiles[0];
+ const q3 = d.quartiles[2];
+ const iqr = (q3 - q1) * k;
+
+ let i = -1;
+ let j = d.length;
+
+ i += 1;
+ while (d[i] < q1 - iqr) {
+ i += 1;
+ }
+
+ j -= 1;
+ while (d[j] > q3 + iqr) {
+ j -= 1;
+ }
+
+ return [i, j];
+ };
+}
+
+function render(container: any, data: any, { xAxisLabel, yAxisLabel }: any) {
+ container = d3.select(container);
+
+ const containerBounds = container.node().getBoundingClientRect();
+ const containerWidth = Math.floor(containerBounds.width);
+ const containerHeight = Math.floor(containerBounds.height);
+
+ const margin = {
+ top: 10,
+ right: 50,
+ bottom: 40,
+ left: 50,
+ inner: 25,
+ };
+ const width = containerWidth - margin.right - margin.left;
+ const height = containerHeight - margin.top - margin.bottom;
+
+ let min = Infinity;
+ let max = -Infinity;
+ const mydata: any = [];
+ let value = 0;
+ let d = [];
+
+ const columns = map(data.columns, col => col.name);
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'scale' does not exist on type 'typeof im... Remove this comment to see the full error message
+ const xscale = d3.scale
+ .ordinal()
+ .domain(columns)
+ .rangeBands([0, containerWidth - margin.left - margin.right]);
+
+ let boxWidth;
+ if (columns.length > 1) {
+ boxWidth = Math.min(xscale(columns[1]), 120.0);
+ } else {
+ boxWidth = 120.0;
+ }
+ margin.inner = boxWidth / 3.0;
+
+ each(columns, (column, i) => {
+ d = mydata[i] = [];
+ each(data.rows, row => {
+ value = row[column];
+ d.push(value);
+ if (value > max) max = Math.ceil(value);
+ if (value < min) min = Math.floor(value);
+ });
+ });
+
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'scale' does not exist on type 'typeof im... Remove this comment to see the full error message
+ const yscale = d3.scale
+ .linear()
+ .domain([min * 0.99, max * 1.01])
+ .range([height, 0]);
+
+ const chart = box()
+ .whiskers(calcIqr(1.5))
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'width' does not exist on type '{ (g: any... Remove this comment to see the full error message
+ .width(boxWidth - 2 * margin.inner)
+ .height(height)
+ .domain([min * 0.99, max * 1.01]);
+ const xAxis = d3.svg
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'axis' does not exist on type '(url: stri... Remove this comment to see the full error message
+ .axis()
+ .scale(xscale)
+ .orient("bottom");
+
+ const yAxis = d3.svg
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'axis' does not exist on type '(url: stri... Remove this comment to see the full error message
+ .axis()
+ .scale(yscale)
+ .orient("left");
+
+ const xLines = d3.svg
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'axis' does not exist on type '(url: stri... Remove this comment to see the full error message
+ .axis()
+ .scale(xscale)
+ .tickSize(height)
+ .orient("bottom");
+
+ const yLines = d3.svg
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'axis' does not exist on type '(url: stri... Remove this comment to see the full error message
+ .axis()
+ .scale(yscale)
+ .tickSize(width)
+ .orient("right");
+
+ function barOffset(i: any) {
+ return xscale(columns[i]) + (xscale(columns[1]) - margin.inner) / 2.0;
+ }
+
+ container.selectAll("*").remove();
+
+ const svg = container
+ .append("svg")
+ .attr("width", containerWidth)
+ .attr("height", height + margin.bottom + margin.top);
+
+ const plot = svg
+ .append("g")
+ .attr("width", containerWidth - margin.left - margin.right)
+ .attr("transform", `translate(${margin.left},${margin.top})`);
+
+ svg
+ .append("text")
+ .attr("class", "box")
+ .attr("x", containerWidth / 2.0)
+ .attr("text-anchor", "middle")
+ .attr("y", height + margin.bottom)
+ .text(xAxisLabel);
+
+ svg
+ .append("text")
+ .attr("class", "box")
+ .attr("transform", `translate(10,${(height + margin.top + margin.bottom) / 2.0})rotate(-90)`)
+ .attr("text-anchor", "middle")
+ .text(yAxisLabel);
+
+ plot
+ .append("rect")
+ .attr("class", "grid-background")
+ .attr("width", width)
+ .attr("height", height);
+
+ plot
+ .append("g")
+ .attr("class", "grid")
+ .call(yLines);
+
+ plot
+ .append("g")
+ .attr("class", "grid")
+ .call(xLines);
+
+ plot
+ .append("g")
+ .attr("class", "x axis")
+ .attr("transform", `translate(0,${height})`)
+ .call(xAxis);
+
+ plot
+ .append("g")
+ .attr("class", "y axis")
+ .call(yAxis);
+
+ plot
+ .selectAll(".box")
+ .data(mydata)
+ .enter()
+ .append("g")
+ .attr("class", "box")
+ .attr("width", boxWidth)
+ .attr("height", height)
+ .attr("transform", (_: any, i: any) => `translate(${barOffset(i)},${0})`)
+ .call(chart);
+}
+
+export default function Renderer({ data, options }: any) {
+ const [container, setContainer] = useState(null);
+
+ useEffect(() => {
+ if (container) {
+ render(container, data, options);
+ const unwatch = resizeObserver(container, () => {
+ render(container, data, options);
+ });
+ return unwatch;
+ }
+ }, [container, data, options]);
+
+ // @ts-expect-error ts-migrate(2322) FIXME: Type 'Dispatch>' is not assig... Remove this comment to see the full error message
+ return
;
+}
+
+Renderer.propTypes = RendererPropTypes;
diff --git a/viz-lib/src/visualizations/box-plot/d3box.ts b/viz-lib/src/visualizations/box-plot/d3box.ts
new file mode 100644
index 000000000..c5f9eae5d
--- /dev/null
+++ b/viz-lib/src/visualizations/box-plot/d3box.ts
@@ -0,0 +1,340 @@
+/* eslint-disable */
+// Inspired by http://informationandvisualization.de/blog/box-plot
+function box() {
+ let width = 1,
+ height = 1,
+ duration = 0,
+ domain: any = null,
+ value = Number,
+ whiskers = boxWhiskers,
+ quartiles = boxQuartiles,
+ tickFormat: any = null;
+
+ // For each small multiple…
+ function box(g: any) {
+ g.each(function(d: any, i: any) {
+ d = d.map(value).sort(d3.ascending);
+ // @ts-expect-error ts-migrate(2683) FIXME: 'this' implicitly has type 'any' because it does n... Remove this comment to see the full error message
+ let g = d3.select(this),
+ n = d.length,
+ min = d[0],
+ max = d[n - 1];
+
+ // Compute quartiles. Must return exactly 3 elements.
+ const quartileData = (d.quartiles = quartiles(d));
+
+ // Compute whiskers. Must return exactly 2 elements, or null.
+ // @ts-expect-error ts-migrate(2683) FIXME: 'this' implicitly has type 'any' because it does n... Remove this comment to see the full error message
+ let whiskerIndices = whiskers && whiskers.call(this, d, i),
+ whiskerData = whiskerIndices && whiskerIndices.map(i => d[i]);
+
+ // Compute outliers. If no whiskers are specified, all data are "outliers".
+ // We compute the outliers as indices, so that we can join across transitions!
+ const outlierIndices = whiskerIndices
+ ? d3.range(0, whiskerIndices[0]).concat(d3.range(whiskerIndices[1] + 1, n))
+ : d3.range(n);
+
+ // Compute the new x-scale.
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'scale' does not exist on type 'typeof im... Remove this comment to see the full error message
+ const x1 = d3.scale
+ .linear()
+ // @ts-expect-error ts-migrate(2683) FIXME: 'this' implicitly has type 'any' because it does n... Remove this comment to see the full error message
+ .domain((domain && domain.call(this, d, i)) || [min, max])
+ .range([height, 0]);
+
+ // Retrieve the old x-scale, if this is an update.
+ const x0 =
+ // @ts-expect-error ts-migrate(2683) FIXME: 'this' implicitly has type 'any' because it does n... Remove this comment to see the full error message
+ this.__chart__ ||
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'scale' does not exist on type 'typeof im... Remove this comment to see the full error message
+ d3.scale
+ .linear()
+ .domain([0, Infinity])
+ .range(x1.range());
+
+ // Stash the new scale.
+ // @ts-expect-error ts-migrate(2683) FIXME: 'this' implicitly has type 'any' because it does n... Remove this comment to see the full error message
+ this.__chart__ = x1;
+
+ // Note: the box, median, and box tick elements are fixed in number,
+ // so we only have to handle enter and update. In contrast, the outliers
+ // and other elements are variable, so we need to exit them! Variable
+ // elements also fade in and out.
+
+ // Update center line: the vertical line spanning the whiskers.
+ const center = g.selectAll("line.center").data(whiskerData ? [whiskerData] : []);
+
+ center
+ .enter()
+ .insert("line", "rect")
+ .attr("class", "center")
+ .attr("x1", width / 2)
+ .attr("y1", d => x0(d[0]))
+ .attr("x2", width / 2)
+ .attr("y2", d => x0(d[1]))
+ .style("opacity", 1e-6)
+ .transition()
+ .duration(duration)
+ .style("opacity", 1)
+ .attr("y1", d => x1(d[0]))
+ .attr("y2", d => x1(d[1]));
+
+ center
+ .transition()
+ .duration(duration)
+ .style("opacity", 1)
+ .attr("y1", d => x1(d[0]))
+ .attr("y2", d => x1(d[1]));
+
+ center
+ .exit()
+ .transition()
+ .duration(duration)
+ .style("opacity", 1e-6)
+ // @ts-expect-error ts-migrate(2571) FIXME: Object is of type 'unknown'.
+ .attr("y1", d => x1(d[0]))
+ // @ts-expect-error ts-migrate(2571) FIXME: Object is of type 'unknown'.
+ .attr("y2", d => x1(d[1]))
+ .remove();
+
+ // Update innerquartile box.
+ const box = g.selectAll("rect.box").data([quartileData]);
+
+ box
+ .enter()
+ .append("rect")
+ .attr("class", "box")
+ .attr("x", 0)
+ .attr("y", d => x0(d[2]))
+ .attr("width", width)
+ .attr("height", d => x0(d[0]) - x0(d[2]))
+ .transition()
+ .duration(duration)
+ .attr("y", d => x1(d[2]))
+ .attr("height", d => x1(d[0]) - x1(d[2]));
+
+ box
+ .transition()
+ .duration(duration)
+ .attr("y", d => x1(d[2]))
+ .attr("height", d => x1(d[0]) - x1(d[2]));
+
+ box.exit().remove();
+
+ // Update median line.
+ const medianLine = g.selectAll("line.median").data([quartileData[1]]);
+
+ medianLine
+ .enter()
+ .append("line")
+ .attr("class", "median")
+ .attr("x1", 0)
+ .attr("y1", x0)
+ .attr("x2", width)
+ .attr("y2", x0)
+ .transition()
+ .duration(duration)
+ .attr("y1", x1)
+ .attr("y2", x1);
+
+ medianLine
+ .transition()
+ .duration(duration)
+ .attr("y1", x1)
+ .attr("y2", x1);
+
+ medianLine.exit().remove();
+
+ // Update whiskers.
+ const whisker = g.selectAll("line.whisker").data(whiskerData || []);
+
+ whisker
+ .enter()
+ .insert("line", "circle, text")
+ .attr("class", "whisker")
+ .attr("x1", 0)
+ .attr("y1", x0)
+ .attr("x2", width)
+ .attr("y2", x0)
+ .style("opacity", 1e-6)
+ .transition()
+ .duration(duration)
+ .attr("y1", x1)
+ .attr("y2", x1)
+ .style("opacity", 1);
+
+ whisker
+ .transition()
+ .duration(duration)
+ .attr("y1", x1)
+ .attr("y2", x1)
+ .style("opacity", 1);
+
+ whisker
+ .exit()
+ .transition()
+ .duration(duration)
+ .attr("y1", x1)
+ .attr("y2", x1)
+ .style("opacity", 1e-6)
+ .remove();
+
+ // Update outliers.
+ const outlier = g.selectAll("circle.outlier").data(outlierIndices, Number);
+
+ outlier
+ .enter()
+ .insert("circle", "text")
+ .attr("class", "outlier")
+ .attr("r", 5)
+ .attr("cx", width / 2)
+ .attr("cy", i => x0(d[i]))
+ .style("opacity", 1e-6)
+ .transition()
+ .duration(duration)
+ .attr("cy", i => x1(d[i]))
+ .style("opacity", 1);
+
+ outlier
+ .transition()
+ .duration(duration)
+ .attr("cy", i => x1(d[i]))
+ .style("opacity", 1);
+
+ outlier
+ .exit()
+ .transition()
+ .duration(duration)
+ // @ts-expect-error ts-migrate(2538) FIXME: Type 'unknown' cannot be used as an index type.
+ .attr("cy", i => x1(d[i]))
+ .style("opacity", 1e-6)
+ .remove();
+
+ // Compute the tick format.
+ const format = tickFormat || x1.tickFormat(8);
+
+ // Update box ticks.
+ const boxTick = g.selectAll("text.box").data(quartileData);
+
+ boxTick
+ .enter()
+ .append("text")
+ .attr("class", "box")
+ .attr("dy", ".3em")
+ .attr("dx", (d, i) => (i & 1 ? 6 : -6))
+ .attr("x", (d, i) => (i & 1 ? width : 0))
+ .attr("y", x0)
+ .attr("text-anchor", (d, i) => (i & 1 ? "start" : "end"))
+ .text(format)
+ .transition()
+ .duration(duration)
+ .attr("y", x1);
+
+ boxTick
+ .transition()
+ .duration(duration)
+ .text(format)
+ .attr("y", x1);
+
+ boxTick.exit().remove();
+
+ // Update whisker ticks. These are handled separately from the box
+ // ticks because they may or may not exist, and we want don't want
+ // to join box ticks pre-transition with whisker ticks post-.
+ const whiskerTick = g.selectAll("text.whisker").data(whiskerData || []);
+
+ whiskerTick
+ .enter()
+ .append("text")
+ .attr("class", "whisker")
+ .attr("dy", ".3em")
+ .attr("dx", 6)
+ .attr("x", width)
+ .attr("y", x0)
+ .text(format)
+ .style("opacity", 1e-6)
+ .transition()
+ .duration(duration)
+ .attr("y", x1)
+ .style("opacity", 1);
+
+ whiskerTick
+ .transition()
+ .duration(duration)
+ .text(format)
+ .attr("y", x1)
+ .style("opacity", 1);
+
+ whiskerTick
+ .exit()
+ .transition()
+ .duration(duration)
+ .attr("y", x1)
+ .style("opacity", 1e-6)
+ .remove();
+ });
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'flush' does not exist on type '(callback... Remove this comment to see the full error message
+ d3.timer.flush();
+ }
+
+ box.width = function(x: any) {
+ if (!arguments.length) return width;
+ width = x;
+ return box;
+ };
+
+ box.height = function(x: any) {
+ if (!arguments.length) return height;
+ height = x;
+ return box;
+ };
+
+ box.tickFormat = function(x: any) {
+ if (!arguments.length) return tickFormat;
+ tickFormat = x;
+ return box;
+ };
+
+ box.duration = function(x: any) {
+ if (!arguments.length) return duration;
+ duration = x;
+ return box;
+ };
+
+ box.domain = function(x: any) {
+ if (!arguments.length) return domain;
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'functor' does not exist on type 'typeof ... Remove this comment to see the full error message
+ domain = x == null ? x : d3.functor(x);
+ return box;
+ };
+
+ box.value = function(x: any) {
+ if (!arguments.length) return value;
+ value = x;
+ return box;
+ };
+
+ box.whiskers = function(x: any) {
+ if (!arguments.length) return whiskers;
+ whiskers = x;
+ return box;
+ };
+
+ box.quartiles = function(x: any) {
+ if (!arguments.length) return quartiles;
+ quartiles = x;
+ return box;
+ };
+
+ return box;
+}
+
+function boxWhiskers(d: any) {
+ return [0, d.length - 1];
+}
+
+function boxQuartiles(d: any) {
+ return [d3.quantile(d, 0.25), d3.quantile(d, 0.5), d3.quantile(d, 0.75)];
+}
+
+export default box;
diff --git a/viz-lib/src/visualizations/box-plot/index.ts b/viz-lib/src/visualizations/box-plot/index.ts
new file mode 100644
index 000000000..bbe30df7e
--- /dev/null
+++ b/viz-lib/src/visualizations/box-plot/index.ts
@@ -0,0 +1,16 @@
+import Renderer from "./Renderer";
+import Editor from "./Editor";
+
+export default {
+ type: "BOXPLOT",
+ name: "Boxplot (Deprecated)",
+ isDeprecated: true,
+ getOptions: (options: any) => ({
+ ...options,
+ }),
+ Renderer,
+ Editor,
+
+ defaultRows: 8,
+ minRows: 5,
+};
diff --git a/viz-lib/src/visualizations/box-plot/renderer.less b/viz-lib/src/visualizations/box-plot/renderer.less
new file mode 100644
index 000000000..385ca7b48
--- /dev/null
+++ b/viz-lib/src/visualizations/box-plot/renderer.less
@@ -0,0 +1,4 @@
+.box-plot-deprecated-visualization-container {
+ overflow: hidden;
+ height: 500px;
+}
diff --git a/viz-lib/src/visualizations/chart/Editor/AxisSettings.tsx b/viz-lib/src/visualizations/chart/Editor/AxisSettings.tsx
new file mode 100644
index 000000000..84c7de2b9
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/Editor/AxisSettings.tsx
@@ -0,0 +1,125 @@
+import { isString, isObject, isFinite, isNumber, merge } from "lodash";
+import React from "react";
+import { useDebouncedCallback } from "use-debounce";
+import * as Grid from "antd/lib/grid";
+import { Section, Select, Input, InputNumber } from "@/components/visualizations/editor";
+
+function toNumber(value: any) {
+ value = isNumber(value) ? value : parseFloat(value);
+ return isFinite(value) ? value : null;
+}
+
+type OwnProps = {
+ id: string;
+ options: {
+ type: string;
+ title?: {
+ text?: string;
+ };
+ rangeMin?: number;
+ rangeMax?: number;
+ };
+ features?: {
+ autoDetectType?: boolean;
+ range?: boolean;
+ };
+ onChange?: (...args: any[]) => any;
+};
+
+type Props = OwnProps & typeof AxisSettings.defaultProps;
+
+export default function AxisSettings({ id, options, features, onChange }: Props) {
+ function optionsChanged(newOptions: any) {
+ onChange(merge({}, options, newOptions));
+ }
+
+ const [handleNameChange] = useDebouncedCallback(text => {
+ const title = isString(text) && text !== "" ? { text } : null;
+ optionsChanged({ title });
+ }, 200);
+
+ const [handleMinMaxChange] = useDebouncedCallback(opts => optionsChanged(opts), 200);
+
+ return (
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ optionsChanged({ type })}>
+ {features.autoDetectType && (
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message
+
+ Auto Detect
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ )}
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ Datetime
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ Linear
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ Logarithmic
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ Category
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+
+
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+
+ {features.range && (
+ // @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message
+
+ {/* @ts-expect-error ts-migrate(2322) FIXME: Type '{ children: Element[]; gutter: number; type:... Remove this comment to see the full error message */}
+
+
+ handleMinMaxChange({ rangeMin: toNumber(value) })}
+ />
+
+
+ handleMinMaxChange({ rangeMax: toNumber(value) })}
+ />
+
+
+
+ )}
+
+ );
+}
+
+AxisSettings.defaultProps = {
+ features: {},
+ onChange: () => {},
+};
diff --git a/viz-lib/src/visualizations/chart/Editor/ChartTypeSelect.tsx b/viz-lib/src/visualizations/chart/Editor/ChartTypeSelect.tsx
new file mode 100644
index 000000000..e54f22964
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/Editor/ChartTypeSelect.tsx
@@ -0,0 +1,54 @@
+import { filter, includes, map } from "lodash";
+import React, { useMemo } from "react";
+import { Select } from "@/components/visualizations/editor";
+import { visualizationsSettings } from "@/visualizations/visualizationsSettings";
+
+const allChartTypes = [
+ { type: "line", name: "Line", icon: "line-chart" },
+ { type: "column", name: "Bar", icon: "bar-chart" },
+ { type: "area", name: "Area", icon: "area-chart" },
+ { type: "pie", name: "Pie", icon: "pie-chart" },
+ { type: "scatter", name: "Scatter", icon: "circle-o" },
+ { type: "bubble", name: "Bubble", icon: "circle-o" },
+ { type: "heatmap", name: "Heatmap", icon: "th" },
+ { type: "box", name: "Box", icon: "square-o" },
+];
+
+type OwnProps = {
+ hiddenChartTypes?: any[]; // TODO: PropTypes.oneOf(map(allChartTypes, "type"))
+};
+
+type Props = OwnProps & typeof ChartTypeSelect.defaultProps;
+
+export default function ChartTypeSelect({ hiddenChartTypes, ...props }: Props) {
+ const chartTypes = useMemo(() => {
+ const result = [...allChartTypes];
+
+ if (visualizationsSettings.allowCustomJSVisualizations) {
+ result.push({ type: "custom", name: "Custom", icon: "code" });
+ }
+
+ if (hiddenChartTypes.length > 0) {
+ return filter(result, ({ type }) => !includes(hiddenChartTypes, type));
+ }
+
+ return result;
+ }, []);
+
+ return (
+
+ {map(chartTypes, ({ type, name, icon }) => (
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message
+
+
+ {name}
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ ))}
+
+ );
+}
+
+ChartTypeSelect.defaultProps = {
+ hiddenChartTypes: [],
+};
diff --git a/viz-lib/src/visualizations/chart/Editor/ColorsSettings.test.tsx b/viz-lib/src/visualizations/chart/Editor/ColorsSettings.test.tsx
new file mode 100644
index 000000000..393ae1bf3
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/Editor/ColorsSettings.test.tsx
@@ -0,0 +1,124 @@
+import { after } from "lodash";
+import React from "react";
+import enzyme from "enzyme";
+
+import getOptions from "../getOptions";
+import ColorsSettings from "./ColorsSettings";
+
+function findByTestID(wrapper: any, testId: any) {
+ return wrapper.find(`[data-test="${testId}"]`);
+}
+
+function mount(options: any, done: any) {
+ options = getOptions(options);
+ return enzyme.mount(
+ {
+ expect(changedOptions).toMatchSnapshot();
+ done();
+ }}
+ />
+ );
+}
+
+describe("Visualizations -> Chart -> Editor -> Colors Settings", () => {
+ describe("for pie", () => {
+ test("Changes series color", done => {
+ const el = mount(
+ {
+ globalSeriesType: "pie",
+ columnMapping: { a: "x", b: "y" },
+ },
+ done
+ );
+
+ findByTestID(el, "Chart.Series.v.Color")
+ .find(".color-picker-trigger")
+ .last()
+ .simulate("click");
+ findByTestID(el, "ColorPicker")
+ .last()
+ .find("input")
+ .simulate("change", { target: { value: "red" } });
+ });
+ });
+
+ describe("for heatmap", () => {
+ test("Changes color scheme", done => {
+ const el = mount(
+ {
+ globalSeriesType: "heatmap",
+ columnMapping: { a: "x", b: "y" },
+ },
+ done
+ );
+
+ findByTestID(el, "Chart.Colors.Heatmap.ColorScheme")
+ .last()
+ .simulate("mouseDown");
+ findByTestID(el, "Chart.Colors.Heatmap.ColorScheme.Blues")
+ .last()
+ .simulate("click");
+ });
+
+ test("Sets custom color scheme", done => {
+ const el = mount(
+ {
+ globalSeriesType: "heatmap",
+ columnMapping: { a: "x", b: "y" },
+ colorScheme: "Custom...",
+ },
+ after(2, done)
+ ); // we will perform 2 actions, so call `done` after all of them completed
+
+ findByTestID(el, "Chart.Colors.Heatmap.MinColor")
+ .find(".color-picker-trigger")
+ .last()
+ .simulate("click");
+ findByTestID(el, "ColorPicker")
+ .last()
+ .find("input")
+ .simulate("change", { target: { value: "yellow" } });
+
+ findByTestID(el, "Chart.Colors.Heatmap.MaxColor")
+ .find(".color-picker-trigger")
+ .last()
+ .simulate("click");
+ findByTestID(el, "ColorPicker")
+ .last()
+ .find("input")
+ .simulate("change", { target: { value: "red" } });
+ });
+ });
+
+ describe("for all except of pie and heatmap", () => {
+ test("Changes series color", done => {
+ const el = mount(
+ {
+ globalSeriesType: "column",
+ columnMapping: { a: "x", b: "y" },
+ },
+ done
+ );
+
+ findByTestID(el, "Chart.Series.b.Color")
+ .find(".color-picker-trigger")
+ .last()
+ .simulate("click");
+
+ findByTestID(el, "ColorPicker")
+ .last()
+ .find("input")
+ .simulate("change", { target: { value: "red" } });
+ });
+ });
+});
diff --git a/viz-lib/src/visualizations/chart/Editor/ColorsSettings.tsx b/viz-lib/src/visualizations/chart/Editor/ColorsSettings.tsx
new file mode 100644
index 000000000..cf2acb66c
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/Editor/ColorsSettings.tsx
@@ -0,0 +1,19 @@
+import React from "react";
+import { EditorPropTypes } from "@/visualizations/prop-types";
+
+import PieColorsSettings from "./PieColorsSettings";
+import HeatmapColorsSettings from "./HeatmapColorsSettings";
+import DefaultColorsSettings from "./DefaultColorsSettings";
+
+const components = {
+ pie: PieColorsSettings,
+ heatmap: HeatmapColorsSettings,
+};
+
+export default function ColorsSettings({ options, ...props }: any) {
+ // @ts-expect-error ts-migrate(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message
+ const Component = components[options.globalSeriesType] || DefaultColorsSettings;
+ return ;
+}
+
+ColorsSettings.propTypes = EditorPropTypes;
diff --git a/viz-lib/src/visualizations/chart/Editor/ColumnMappingSelect.tsx b/viz-lib/src/visualizations/chart/Editor/ColumnMappingSelect.tsx
new file mode 100644
index 000000000..5094782c6
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/Editor/ColumnMappingSelect.tsx
@@ -0,0 +1,67 @@
+import { isString, map, uniq, flatten, filter, sortBy, keys } from "lodash";
+import React from "react";
+import { Section, Select } from "@/components/visualizations/editor";
+
+const MappingTypes = {
+ x: { label: "X Column" },
+ y: { label: "Y Columns", multiple: true },
+ series: { label: "Group by" },
+ yError: { label: "Errors column" },
+ size: { label: "Bubble Size Column" },
+ zVal: { label: "Color Column" },
+};
+
+const SwappedMappingTypes = {
+ ...MappingTypes,
+ x: { label: "Y Column" },
+ y: { label: "X Columns", multiple: true },
+};
+
+type OwnProps = {
+ value?: string | string[];
+ availableColumns?: string[];
+ type?: any; // TODO: PropTypes.oneOf(keys(MappingTypes))
+ onChange?: (...args: any[]) => any;
+};
+
+type Props = OwnProps & typeof ColumnMappingSelect.defaultProps;
+
+export default function ColumnMappingSelect({ value, availableColumns, type, onChange, areAxesSwapped }: Props) {
+ const options = sortBy(filter(uniq(flatten([availableColumns, value])), v => isString(v) && v !== ""));
+
+ // this swaps the ui, as the data will be swapped on render
+ const { label, multiple } = !areAxesSwapped ? MappingTypes[type] : SwappedMappingTypes[type];
+
+ return (
+ // @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message
+
+ onChange(column || null, type)}>
+ {map(options, c => (
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message
+
+ {c}
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ ))}
+
+
+ );
+}
+
+ColumnMappingSelect.defaultProps = {
+ value: null,
+ availableColumns: [],
+ type: null,
+ onChange: () => {},
+};
+
+ColumnMappingSelect.MappingTypes = MappingTypes;
diff --git a/viz-lib/src/visualizations/chart/Editor/CustomChartSettings.tsx b/viz-lib/src/visualizations/chart/Editor/CustomChartSettings.tsx
new file mode 100644
index 000000000..f1916b8ce
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/Editor/CustomChartSettings.tsx
@@ -0,0 +1,60 @@
+import { isNil, trimStart } from "lodash";
+import React from "react";
+import { Section, Switch, TextArea } from "@/components/visualizations/editor";
+import { EditorPropTypes } from "@/visualizations/prop-types";
+
+const defaultCustomCode = trimStart(`
+// Available variables are x, ys, element, and Plotly
+// Type console.log(x, ys); for more info about x and ys
+// To plot your graph call Plotly.plot(element, ...)
+// Plotly examples and docs: https://plot.ly/javascript/
+`);
+
+export default function CustomChartSettings({ options, onOptionsChange }: any) {
+ return (
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+ any' is not assi... Remove this comment to see the full error message
+ onChange={(enableConsoleLogs: any) => onOptionsChange({ enableConsoleLogs })}>
+ Show errors in the console
+
+
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+ any' is not assignable ... Remove this comment to see the full error message
+ onChange={(autoRedraw: any) => onOptionsChange({ autoRedraw })}>
+ Auto update graph
+
+
+
+ );
+}
+
+CustomChartSettings.propTypes = EditorPropTypes;
diff --git a/viz-lib/src/visualizations/chart/Editor/DataLabelsSettings.test.tsx b/viz-lib/src/visualizations/chart/Editor/DataLabelsSettings.test.tsx
new file mode 100644
index 000000000..bd2aed470
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/Editor/DataLabelsSettings.test.tsx
@@ -0,0 +1,97 @@
+import React from "react";
+import enzyme from "enzyme";
+
+import getOptions from "../getOptions";
+import DataLabelsSettings from "./DataLabelsSettings";
+
+function findByTestID(wrapper: any, testId: any) {
+ return wrapper.find(`[data-test="${testId}"]`);
+}
+
+function mount(options: any, done: any) {
+ options = getOptions(options);
+ return enzyme.mount(
+ {
+ expect(changedOptions).toMatchSnapshot();
+ done();
+ }}
+ />
+ );
+}
+
+describe("Visualizations -> Chart -> Editor -> Data Labels Settings", () => {
+ test("Sets Show Data Labels option", done => {
+ const el = mount(
+ {
+ globalSeriesType: "column",
+ showDataLabels: false,
+ },
+ done
+ );
+
+ findByTestID(el, "Chart.DataLabels.ShowDataLabels")
+ .last()
+ .find("input")
+ .simulate("change", { target: { checked: true } });
+ });
+
+ test("Changes number format", done => {
+ const el = mount(
+ {
+ globalSeriesType: "column",
+ numberFormat: "0[.]0000",
+ },
+ done
+ );
+
+ findByTestID(el, "Chart.DataLabels.NumberFormat")
+ .last()
+ .simulate("change", { target: { value: "0.00" } });
+ });
+
+ test("Changes percent values format", done => {
+ const el = mount(
+ {
+ globalSeriesType: "column",
+ percentFormat: "0[.]00%",
+ },
+ done
+ );
+
+ findByTestID(el, "Chart.DataLabels.PercentFormat")
+ .last()
+ .simulate("change", { target: { value: "0.0%" } });
+ });
+
+ test("Changes date/time format", done => {
+ const el = mount(
+ {
+ globalSeriesType: "column",
+ dateTimeFormat: "YYYY-MM-DD HH:mm:ss",
+ },
+ done
+ );
+
+ findByTestID(el, "Chart.DataLabels.DateTimeFormat")
+ .last()
+ .simulate("change", { target: { value: "YYYY MMM DD" } });
+ });
+
+ test("Changes data labels format", done => {
+ const el = mount(
+ {
+ globalSeriesType: "column",
+ textFormat: null,
+ },
+ done
+ );
+
+ findByTestID(el, "Chart.DataLabels.TextFormat")
+ .last()
+ .simulate("change", { target: { value: "{{ @@x }} :: {{ @@y }} / {{ @@yPercent }}" } });
+ });
+});
diff --git a/viz-lib/src/visualizations/chart/Editor/DataLabelsSettings.tsx b/viz-lib/src/visualizations/chart/Editor/DataLabelsSettings.tsx
new file mode 100644
index 000000000..11ba15aa1
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/Editor/DataLabelsSettings.tsx
@@ -0,0 +1,120 @@
+import { includes } from "lodash";
+import React from "react";
+import { useDebouncedCallback } from "use-debounce";
+import { Section, Input, Checkbox, ContextHelp } from "@/components/visualizations/editor";
+import { EditorPropTypes } from "@/visualizations/prop-types";
+
+export default function DataLabelsSettings({ options, onOptionsChange }: any) {
+ const isShowDataLabelsAvailable = includes(
+ ["line", "area", "column", "scatter", "pie", "heatmap"],
+ options.globalSeriesType
+ );
+
+ const [debouncedOnOptionsChange] = useDebouncedCallback(onOptionsChange, 200);
+
+ return (
+
+ {isShowDataLabelsAvailable && (
+ // @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message
+
+ onOptionsChange({ showDataLabels: event.target.checked })}>
+ Show Data Labels
+
+
+ )}
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ }
+ data-test="Chart.DataLabels.NumberFormat"
+ defaultValue={options.numberFormat}
+ onChange={(e: any) => debouncedOnOptionsChange({ numberFormat: e.target.value })}
+ />
+
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+
+ Data Labels
+ {/* @ts-expect-error ts-migrate(2746) FIXME: This JSX tag's 'children' prop expects a single ch... Remove this comment to see the full error message */}
+
+ Use special names to access additional properties:
+
+ {"{{ @@name }}"}
series name;
+
+
+ {"{{ @@x }}"}
x-value;
+
+
+ {"{{ @@y }}"}
y-value;
+
+
+ {"{{ @@yPercent }}"}
relative y-value;
+
+
+ {"{{ @@yError }}"}
y deviation;
+
+
+ {"{{ @@size }}"}
bubble size;
+
+
+ Also, all query result columns can be referenced
+
+ using
+ {"{{ column_name }}"}
syntax.
+
+
+
+ }
+ data-test="Chart.DataLabels.TextFormat"
+ placeholder="(auto)"
+ defaultValue={options.textFormat}
+ onChange={(e: any) => debouncedOnOptionsChange({ textFormat: e.target.value })}
+ />
+
+
+ );
+}
+
+DataLabelsSettings.propTypes = EditorPropTypes;
diff --git a/viz-lib/src/visualizations/chart/Editor/DefaultColorsSettings.tsx b/viz-lib/src/visualizations/chart/Editor/DefaultColorsSettings.tsx
new file mode 100644
index 000000000..01286325f
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/Editor/DefaultColorsSettings.tsx
@@ -0,0 +1,74 @@
+import { map } from "lodash";
+import React, { useMemo, useCallback } from "react";
+import Table from "antd/lib/table";
+import ColorPicker from "@/components/ColorPicker";
+import { EditorPropTypes } from "@/visualizations/prop-types";
+import ColorPalette from "@/visualizations/ColorPalette";
+import getChartData from "../getChartData";
+
+export default function DefaultColorsSettings({ options, data, onOptionsChange }: any) {
+ const colors = useMemo(
+ () => ({
+ Automatic: null,
+ ...ColorPalette,
+ }),
+ []
+ );
+
+ const series = useMemo(
+ () =>
+ map(getChartData(data.rows, options), ({ name }) => ({
+ key: name,
+ color: (options.seriesOptions[name] || {}).color || null,
+ })),
+ [options, data]
+ );
+
+ const updateSeriesOption = useCallback(
+ (key, prop, value) => {
+ onOptionsChange({
+ seriesOptions: {
+ [key]: {
+ [prop]: value,
+ },
+ },
+ });
+ },
+ [onOptionsChange]
+ );
+
+ const columns = [
+ {
+ title: "Series",
+ dataIndex: "key",
+ },
+ {
+ title: "Color",
+ dataIndex: "color",
+ width: "1%",
+ render: (unused: any, item: any) => (
+ void' is not assignable to t... Remove this comment to see the full error message
+ onChange={(value: any) => updateSeriesOption(item.key, "color", value)}
+ // @ts-expect-error ts-migrate(2322) FIXME: Type 'Element' is not assignable to type 'never'.
+ addonAfter={ }
+ />
+ ),
+ },
+ ];
+
+ // @ts-expect-error ts-migrate(2322) FIXME: Type 'boolean[]' is not assignable to type 'object... Remove this comment to see the full error message
+ return ;
+}
+
+DefaultColorsSettings.propTypes = EditorPropTypes;
diff --git a/viz-lib/src/visualizations/chart/Editor/GeneralSettings.test.tsx b/viz-lib/src/visualizations/chart/Editor/GeneralSettings.test.tsx
new file mode 100644
index 000000000..3563f7ab0
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/Editor/GeneralSettings.test.tsx
@@ -0,0 +1,215 @@
+import React from "react";
+import enzyme from "enzyme";
+
+import getOptions from "../getOptions";
+import GeneralSettings from "./GeneralSettings";
+
+function findByTestID(wrapper: any, testId: any) {
+ return wrapper.find(`[data-test="${testId}"]`);
+}
+
+function elementExists(wrapper: any, testId: any) {
+ return findByTestID(wrapper, testId).length > 0;
+}
+
+function mount(options: any, done: any) {
+ options = getOptions(options);
+ return enzyme.mount(
+ {
+ expect(changedOptions).toMatchSnapshot();
+ done();
+ }}
+ />
+ );
+}
+
+describe("Visualizations -> Chart -> Editor -> General Settings", () => {
+ test("Changes global series type", done => {
+ const el = mount(
+ {
+ globalSeriesType: "column",
+ showDataLabels: false,
+ seriesOptions: {
+ a: { type: "column" },
+ b: { type: "line" },
+ },
+ },
+ done
+ );
+
+ findByTestID(el, "Chart.GlobalSeriesType")
+ .last()
+ .simulate("mouseDown");
+ findByTestID(el, "Chart.ChartType.pie")
+ .last()
+ .simulate("click");
+ });
+
+ test("Pie: changes direction", done => {
+ const el = mount(
+ {
+ globalSeriesType: "pie",
+ direction: { type: "counterclockwise" },
+ },
+ done
+ );
+
+ findByTestID(el, "Chart.PieDirection")
+ .last()
+ .simulate("mouseDown");
+ findByTestID(el, "Chart.PieDirection.Clockwise")
+ .last()
+ .simulate("click");
+ });
+
+ test("Toggles legend", done => {
+ const el = mount(
+ {
+ globalSeriesType: "column",
+ legend: { enabled: true },
+ },
+ done
+ );
+
+ findByTestID(el, "Chart.LegendPlacement")
+ .last()
+ .simulate("mouseDown");
+ findByTestID(el, "Chart.LegendPlacement.HideLegend")
+ .last()
+ .simulate("click");
+ });
+
+ test("Box: toggles show points", done => {
+ const el = mount(
+ {
+ globalSeriesType: "box",
+ showpoints: false,
+ },
+ done
+ );
+
+ findByTestID(el, "Chart.ShowPoints")
+ .last()
+ .find("input")
+ .simulate("change", { target: { checked: true } });
+ });
+
+ test("Enables stacking", done => {
+ const el = mount(
+ {
+ globalSeriesType: "column",
+ series: {},
+ },
+ done
+ );
+
+ findByTestID(el, "Chart.Stacking")
+ .last()
+ .simulate("mouseDown");
+ findByTestID(el, "Chart.Stacking.Stack")
+ .last()
+ .simulate("click");
+ });
+
+ test("Toggles normalize values to percentage", done => {
+ const el = mount(
+ {
+ globalSeriesType: "column",
+ series: {},
+ },
+ done
+ );
+
+ findByTestID(el, "Chart.NormalizeValues")
+ .last()
+ .find("input")
+ .simulate("change", { target: { checked: true } });
+ });
+
+ test("Keep missing/null values", done => {
+ const el = mount(
+ {
+ globalSeriesType: "column",
+ missingValuesAsZero: true,
+ },
+ done
+ );
+
+ findByTestID(el, "Chart.MissingValues")
+ .last()
+ .simulate("mouseDown");
+ findByTestID(el, "Chart.MissingValues.Keep")
+ .last()
+ .simulate("click");
+ });
+
+ describe("Column mappings should be available", () => {
+ test("for bubble", () => {
+ // @ts-expect-error ts-migrate(2554) FIXME: Expected 2 arguments, but got 1.
+ const el = mount({
+ globalSeriesType: "column",
+ seriesOptions: {
+ a: { type: "column" },
+ b: { type: "bubble" },
+ c: { type: "heatmap" },
+ },
+ });
+
+ expect(elementExists(el, "Chart.ColumnMapping.x")).toBeTruthy();
+ expect(elementExists(el, "Chart.ColumnMapping.y")).toBeTruthy();
+ expect(elementExists(el, "Chart.ColumnMapping.size")).toBeTruthy();
+ });
+
+ test("for heatmap", () => {
+ // @ts-expect-error ts-migrate(2554) FIXME: Expected 2 arguments, but got 1.
+ const el = mount({
+ globalSeriesType: "heatmap",
+ seriesOptions: {
+ a: { type: "column" },
+ b: { type: "bubble" },
+ c: { type: "heatmap" },
+ },
+ });
+
+ expect(elementExists(el, "Chart.ColumnMapping.x")).toBeTruthy();
+ expect(elementExists(el, "Chart.ColumnMapping.y")).toBeTruthy();
+ expect(elementExists(el, "Chart.ColumnMapping.zVal")).toBeTruthy();
+ });
+
+ test("for all types except of bubble, heatmap and custom", () => {
+ // @ts-expect-error ts-migrate(2554) FIXME: Expected 2 arguments, but got 1.
+ const el = mount({
+ globalSeriesType: "column",
+ seriesOptions: {
+ a: { type: "column" },
+ b: { type: "bubble" },
+ c: { type: "heatmap" },
+ },
+ });
+
+ expect(elementExists(el, "Chart.ColumnMapping.x")).toBeTruthy();
+ expect(elementExists(el, "Chart.ColumnMapping.y")).toBeTruthy();
+ expect(elementExists(el, "Chart.ColumnMapping.series")).toBeTruthy();
+ expect(elementExists(el, "Chart.ColumnMapping.yError")).toBeTruthy();
+ });
+ });
+
+ test("Toggles horizontal bar chart", done => {
+ const el = mount(
+ {
+ globalSeriesType: "column",
+ series: {},
+ },
+ done
+ );
+
+ findByTestID(el, "Chart.SwappedAxes")
+ .last()
+ .find("input")
+ .simulate("change", { target: { checked: true } });
+ });
+});
diff --git a/viz-lib/src/visualizations/chart/Editor/GeneralSettings.tsx b/viz-lib/src/visualizations/chart/Editor/GeneralSettings.tsx
new file mode 100644
index 000000000..365e20c48
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/Editor/GeneralSettings.tsx
@@ -0,0 +1,346 @@
+import { isArray, map, mapValues, includes, some, each, difference, toNumber } from "lodash";
+import React, { useMemo } from "react";
+import { Section, Select, Checkbox, InputNumber } from "@/components/visualizations/editor";
+import { UpdateOptionsStrategy } from "@/components/visualizations/editor/createTabbedEditor";
+import { EditorPropTypes } from "@/visualizations/prop-types";
+
+import ChartTypeSelect from "./ChartTypeSelect";
+import ColumnMappingSelect from "./ColumnMappingSelect";
+
+function getAvailableColumnMappingTypes(options: any) {
+ const result = ["x", "y"];
+
+ if (!includes(["custom", "heatmap"], options.globalSeriesType)) {
+ result.push("series");
+ }
+
+ if (options.globalSeriesType === "bubble" || some(options.seriesOptions, { type: "bubble" })) {
+ result.push("size");
+ }
+
+ if (options.globalSeriesType === "heatmap") {
+ result.push("zVal");
+ }
+
+ if (!includes(["custom", "bubble", "heatmap"], options.globalSeriesType)) {
+ result.push("yError");
+ }
+
+ return result;
+}
+
+function getMappedColumns(options: any, availableColumns: any) {
+ const mappedColumns = {};
+ const availableTypes = getAvailableColumnMappingTypes(options);
+ each(availableTypes, type => {
+ // @ts-expect-error ts-migrate(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message
+ mappedColumns[type] = ColumnMappingSelect.MappingTypes[type].multiple ? [] : null;
+ });
+
+ availableColumns = map(availableColumns, c => c.name);
+ const usedColumns: any = [];
+
+ each(options.columnMapping, (type, column) => {
+ if (includes(availableColumns, column) && includes(availableTypes, type)) {
+ // @ts-expect-error ts-migrate(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message
+ const { multiple } = ColumnMappingSelect.MappingTypes[type];
+ if (multiple) {
+ // @ts-expect-error ts-migrate(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message
+ mappedColumns[type].push(column);
+ } else {
+ // @ts-expect-error ts-migrate(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message
+ mappedColumns[type] = column;
+ }
+ usedColumns.push(column);
+ }
+ });
+
+ return {
+ mappedColumns,
+ unusedColumns: difference(availableColumns, usedColumns),
+ };
+}
+
+function mappedColumnsToColumnMappings(mappedColumns: any) {
+ const result = {};
+ each(mappedColumns, (value, type) => {
+ if (isArray(value)) {
+ each(value, v => {
+ // @ts-expect-error ts-migrate(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message
+ result[v] = type;
+ });
+ } else {
+ if (value) {
+ // @ts-expect-error ts-migrate(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message
+ result[value] = type;
+ }
+ }
+ });
+ return result;
+}
+
+export default function GeneralSettings({ options, data, onOptionsChange }: any) {
+ const { mappedColumns, unusedColumns } = useMemo(() => getMappedColumns(options, data.columns), [
+ options,
+ data.columns,
+ ]);
+
+ function handleGlobalSeriesTypeChange(globalSeriesType: any) {
+ onOptionsChange({
+ globalSeriesType,
+ showDataLabels: globalSeriesType === "pie",
+ swappedAxes: false,
+ seriesOptions: mapValues(options.seriesOptions, series => ({
+ ...series,
+ type: globalSeriesType,
+ })),
+ });
+ }
+
+ function handleColumnMappingChange(column: any, type: any) {
+ const columnMapping = mappedColumnsToColumnMappings({
+ ...mappedColumns,
+ [type]: column,
+ });
+ onOptionsChange({ columnMapping }, UpdateOptionsStrategy.shallowMerge);
+ }
+
+ function handleLegendPlacementChange(value: any) {
+ if (value === "hidden") {
+ onOptionsChange({ legend: { enabled: false } });
+ } else {
+ onOptionsChange({ legend: { enabled: true, placement: value } });
+ }
+ }
+
+ function handleAxesSwapping() {
+ // moves any item in the right Y axis to the left one
+ const seriesOptions = mapValues(options.seriesOptions, series => ({
+ ...series,
+ yAxis: 0,
+ }));
+ onOptionsChange({ swappedAxes: !options.swappedAxes, seriesOptions });
+ }
+
+ return (
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+
+ {includes(["column", "line", "box"], options.globalSeriesType) && (
+ // @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message
+
+ )}
+
+ {map(mappedColumns, (value, type) => (
+ void' is not ass... Remove this comment to see the full error message
+ onChange={handleColumnMappingChange}
+ />
+ ))}
+
+ {includes(["bubble"], options.globalSeriesType) && (
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ onOptionsChange({ coefficient: toNumber(value) })}
+ />
+
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ onOptionsChange({ sizemode: mode })}>
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ Area
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ Diameter
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+
+
+
+ )}
+
+ {includes(["pie"], options.globalSeriesType) && (
+ // @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message
+
+ onOptionsChange({ direction: { type } })}>
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ Counterclockwise
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ Clockwise
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+
+
+ )}
+
+ {!includes(["custom", "heatmap"], options.globalSeriesType) && (
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ Hide legend
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ Right
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ Bottom
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+
+
+
+ {options.legend.enabled && (
+ // @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message
+
+ onOptionsChange({ legend: { traceorder } })}>
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ Normal
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ Reversed
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+
+
+ )}
+
+ )}
+
+ {includes(["box"], options.globalSeriesType) && (
+ // @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message
+
+ onOptionsChange({ showpoints: event.target.checked })}>
+ Show All Points
+
+
+ )}
+
+ {!includes(["custom", "heatmap"], options.globalSeriesType) && (
+ // @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message
+
+ onOptionsChange({ series: { stacking } })}>
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ Disabled
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ Stack
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+
+
+ )}
+
+ {includes(["line", "area", "column"], options.globalSeriesType) && (
+ // @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message
+
+ onOptionsChange({ series: { percentValues: event.target.checked } })}>
+ Normalize values to percentage
+
+
+ )}
+
+ {!includes(["custom", "heatmap", "bubble", "scatter"], options.globalSeriesType) && (
+ // @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message
+
+ onOptionsChange({ missingValuesAsZero: !!value })}>
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ Do not display in chart
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ Convert to 0 and display in chart
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+
+
+ )}
+
+ );
+}
+
+GeneralSettings.propTypes = EditorPropTypes;
diff --git a/viz-lib/src/visualizations/chart/Editor/HeatmapColorsSettings.tsx b/viz-lib/src/visualizations/chart/Editor/HeatmapColorsSettings.tsx
new file mode 100644
index 000000000..71d7609ea
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/Editor/HeatmapColorsSettings.tsx
@@ -0,0 +1,88 @@
+import { map } from "lodash";
+import React from "react";
+import { Section, Select, ColorPicker } from "@/components/visualizations/editor";
+import { EditorPropTypes } from "@/visualizations/prop-types";
+import ColorPalette from "@/visualizations/ColorPalette";
+
+const ColorSchemes = [
+ "Blackbody",
+ "Bluered",
+ "Blues",
+ "Earth",
+ "Electric",
+ "Greens",
+ "Greys",
+ "Hot",
+ "Jet",
+ "Picnic",
+ "Portland",
+ "Rainbow",
+ "RdBu",
+ "Reds",
+ "Viridis",
+ "YlGnBu",
+ "YlOrRd",
+ "Custom...",
+];
+
+export default function HeatmapColorsSettings({ options, onOptionsChange }: any) {
+ return (
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ onOptionsChange({ colorScheme: value || null })}>
+ {map(ColorSchemes, scheme => (
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message
+
+ {scheme}
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ ))}
+
+
+
+ {options.colorScheme === "Custom..." && (
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ onOptionsChange({ heatMinColor })}
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'Label' does not exist on type '({ classN... Remove this comment to see the full error message
+ addonAfter={ }
+ />
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ onOptionsChange({ heatMaxColor })}
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'Label' does not exist on type '({ classN... Remove this comment to see the full error message
+ addonAfter={ }
+ />
+
+
+ )}
+
+ );
+}
+
+HeatmapColorsSettings.propTypes = EditorPropTypes;
diff --git a/viz-lib/src/visualizations/chart/Editor/PieColorsSettings.tsx b/viz-lib/src/visualizations/chart/Editor/PieColorsSettings.tsx
new file mode 100644
index 000000000..678a735c9
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/Editor/PieColorsSettings.tsx
@@ -0,0 +1,84 @@
+import { each, map } from "lodash";
+import React, { useMemo, useCallback } from "react";
+import Table from "antd/lib/table";
+import ColorPicker from "@/components/ColorPicker";
+import { EditorPropTypes } from "@/visualizations/prop-types";
+import ColorPalette from "@/visualizations/ColorPalette";
+import getChartData from "../getChartData";
+
+function getUniqueValues(chartData: any) {
+ const uniqueValuesNames = new Set();
+ each(chartData, series => {
+ each(series.data, row => {
+ uniqueValuesNames.add(row.x);
+ });
+ });
+ return [...uniqueValuesNames];
+}
+
+export default function PieColorsSettings({ options, data, onOptionsChange }: any) {
+ const colors = useMemo(
+ () => ({
+ Automatic: null,
+ ...ColorPalette,
+ }),
+ []
+ );
+
+ const series = useMemo(
+ () =>
+ map(getUniqueValues(getChartData(data.rows, options)), value => ({
+ key: value,
+ // @ts-expect-error ts-migrate(2538) FIXME: Type 'unknown' cannot be used as an index type.
+ color: (options.valuesOptions[value] || {}).color || null,
+ })),
+ [options, data]
+ );
+
+ const updateValuesOption = useCallback(
+ (key, prop, value) => {
+ onOptionsChange({
+ valuesOptions: {
+ [key]: {
+ [prop]: value,
+ },
+ },
+ });
+ },
+ [onOptionsChange]
+ );
+
+ const columns = [
+ {
+ title: "Values",
+ dataIndex: "key",
+ },
+ {
+ title: "Color",
+ dataIndex: "color",
+ width: "1%",
+ render: (unused: any, item: any) => (
+ void' is not assignable to t... Remove this comment to see the full error message
+ onChange={(value: any) => updateValuesOption(item.key, "color", value)}
+ // @ts-expect-error ts-migrate(2322) FIXME: Type 'Element' is not assignable to type 'never'.
+ addonAfter={ }
+ />
+ ),
+ },
+ ];
+
+ return ;
+}
+
+PieColorsSettings.propTypes = EditorPropTypes;
diff --git a/viz-lib/src/visualizations/chart/Editor/SeriesSettings.test.tsx b/viz-lib/src/visualizations/chart/Editor/SeriesSettings.test.tsx
new file mode 100644
index 000000000..8ef7623f5
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/Editor/SeriesSettings.test.tsx
@@ -0,0 +1,81 @@
+import React from "react";
+import enzyme from "enzyme";
+
+import getOptions from "../getOptions";
+import SeriesSettings from "./SeriesSettings";
+
+function findByTestID(wrapper: any, testId: any) {
+ return wrapper.find(`[data-test="${testId}"]`);
+}
+
+function mount(options: any, done: any) {
+ options = getOptions(options);
+ return enzyme.mount(
+ {
+ expect(changedOptions).toMatchSnapshot();
+ done();
+ }}
+ />
+ );
+}
+
+describe("Visualizations -> Chart -> Editor -> Series Settings", () => {
+ test("Changes series type", done => {
+ const el = mount(
+ {
+ globalSeriesType: "column",
+ columnMapping: { a: "y" },
+ seriesOptions: {
+ a: { type: "column", label: "a", yAxis: 0 },
+ },
+ },
+ done
+ );
+
+ findByTestID(el, "Chart.Series.a.Type")
+ .last()
+ .simulate("mouseDown");
+ findByTestID(el, "Chart.ChartType.area")
+ .last()
+ .simulate("click");
+ });
+
+ test("Changes series label", done => {
+ const el = mount(
+ {
+ globalSeriesType: "column",
+ columnMapping: { a: "y" },
+ seriesOptions: {
+ a: { type: "column", label: "a", yAxis: 0 },
+ },
+ },
+ done
+ );
+
+ findByTestID(el, "Chart.Series.a.Label")
+ .last()
+ .simulate("change", { target: { value: "test" } });
+ });
+
+ test("Changes series axis", done => {
+ const el = mount(
+ {
+ globalSeriesType: "column",
+ columnMapping: { a: "y" },
+ seriesOptions: {
+ a: { type: "column", name: "a", yAxis: 0 },
+ },
+ },
+ done
+ );
+
+ findByTestID(el, "Chart.Series.a.UseRightAxis")
+ .last()
+ .find("input")
+ .simulate("change", { target: { checked: true } });
+ });
+});
diff --git a/viz-lib/src/visualizations/chart/Editor/SeriesSettings.tsx b/viz-lib/src/visualizations/chart/Editor/SeriesSettings.tsx
new file mode 100644
index 000000000..34a26a63c
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/Editor/SeriesSettings.tsx
@@ -0,0 +1,153 @@
+import { includes, map, extend, fromPairs } from "lodash";
+import React, { useMemo, useCallback } from "react";
+import { useDebouncedCallback } from "use-debounce";
+import Table from "antd/lib/table";
+import Input from "antd/lib/input";
+import Radio from "antd/lib/radio";
+// @ts-expect-error ts-migrate(2724) FIXME: Module '"../../../../node_modules/react-sortable-h... Remove this comment to see the full error message
+import { sortableElement } from "react-sortable-hoc";
+import { SortableContainer, DragHandle } from "@/components/sortable";
+import { EditorPropTypes } from "@/visualizations/prop-types";
+import ChartTypeSelect from "./ChartTypeSelect";
+import getChartData from "../getChartData";
+
+const SortableBodyRow = sortableElement((props: any) => );
+
+function getTableColumns(options: any, updateSeriesOption: any, debouncedUpdateSeriesOption: any) {
+ const result = [
+ {
+ title: "Order",
+ dataIndex: "zIndex",
+ render: (unused: any, item: any) => (
+
+
+ {item.zIndex + 1}
+
+ ),
+ },
+ {
+ title: "Label",
+ dataIndex: "name",
+ render: (unused: any, item: any) => (
+ debouncedUpdateSeriesOption(item.key, "name", event.target.value)}
+ />
+ ),
+ },
+ ];
+
+ if (!includes(["pie", "heatmap"], options.globalSeriesType)) {
+ if (!options.swappedAxes) {
+ result.push({
+ title: "Y Axis",
+ dataIndex: "yAxis",
+ render: (unused, item) => (
+ updateSeriesOption(item.key, "yAxis", event.target.value)}>
+
+ left
+
+
+ right
+
+
+ ),
+ });
+ }
+
+ result.push({
+ title: "Type",
+ dataIndex: "type",
+ render: (unused, item) => (
+ updateSeriesOption(item.key, "type", value)}
+ />
+ ),
+ });
+ }
+
+ return result;
+}
+
+export default function SeriesSettings({ options, data, onOptionsChange }: any) {
+ const series = useMemo(
+ () =>
+ map(
+ getChartData(data.rows, options), // returns sorted series
+ ({ name }, zIndex) =>
+ extend({ key: name, type: options.globalSeriesType }, options.seriesOptions[name], { zIndex })
+ ),
+ [options, data]
+ );
+
+ const handleSortEnd = useCallback(
+ ({ oldIndex, newIndex }) => {
+ const seriesOptions = [...series];
+ seriesOptions.splice(newIndex, 0, ...seriesOptions.splice(oldIndex, 1));
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'key' does not exist on type 'Boolean'.
+ onOptionsChange({ seriesOptions: fromPairs(map(seriesOptions, ({ key }, zIndex) => [key, { zIndex }])) });
+ },
+ [onOptionsChange, series]
+ );
+
+ const updateSeriesOption = useCallback(
+ (key, prop, value) => {
+ onOptionsChange({
+ seriesOptions: {
+ [key]: {
+ [prop]: value,
+ },
+ },
+ });
+ },
+ [onOptionsChange]
+ );
+ const [debouncedUpdateSeriesOption] = useDebouncedCallback(updateSeriesOption, 200);
+
+ const columns = useMemo(() => getTableColumns(options, updateSeriesOption, debouncedUpdateSeriesOption), [
+ options,
+ updateSeriesOption,
+ debouncedUpdateSeriesOption,
+ ]);
+
+ return (
+ container.querySelector("tbody")}
+ onSortEnd={handleSortEnd}
+ containerProps={{
+ className: "chart-editor-series",
+ }}>
+ {/* @ts-expect-error ts-migrate(2322) FIXME: Type 'Element' is not assignable to type 'null | u... Remove this comment to see the full error message */}
+ { index: any; }' is not as... Remove this comment to see the full error message
+ onRow={item => ({ index: item.zIndex })}
+ pagination={false}
+ />
+
+ );
+}
+
+SeriesSettings.propTypes = EditorPropTypes;
diff --git a/viz-lib/src/visualizations/chart/Editor/XAxisSettings.test.tsx b/viz-lib/src/visualizations/chart/Editor/XAxisSettings.test.tsx
new file mode 100644
index 000000000..5f310dc38
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/Editor/XAxisSettings.test.tsx
@@ -0,0 +1,99 @@
+import React from "react";
+import enzyme from "enzyme";
+
+import getOptions from "../getOptions";
+import XAxisSettings from "./XAxisSettings";
+
+function findByTestID(wrapper: any, testId: any) {
+ return wrapper.find(`[data-test="${testId}"]`);
+}
+
+function mount(options: any, done: any) {
+ options = getOptions(options);
+ return enzyme.mount(
+ {
+ expect(changedOptions).toMatchSnapshot();
+ done();
+ }}
+ />
+ );
+}
+
+describe("Visualizations -> Chart -> Editor -> X-Axis Settings", () => {
+ test("Changes axis type", done => {
+ const el = mount(
+ {
+ globalSeriesType: "column",
+ xAxis: { type: "-", labels: { enabled: true } },
+ },
+ done
+ );
+
+ findByTestID(el, "Chart.XAxis.Type")
+ .last()
+ .simulate("mouseDown");
+ findByTestID(el, "Chart.XAxis.Type.Linear")
+ .last()
+ .simulate("click");
+ });
+
+ test("Changes axis name", done => {
+ const el = mount(
+ {
+ globalSeriesType: "column",
+ xAxis: { type: "-", labels: { enabled: true } },
+ },
+ done
+ );
+
+ findByTestID(el, "Chart.XAxis.Name")
+ .last()
+ .simulate("change", { target: { value: "test" } });
+ });
+
+ test("Sets Show Labels option", done => {
+ const el = mount(
+ {
+ globalSeriesType: "column",
+ xAxis: { type: "-", labels: { enabled: false } },
+ },
+ done
+ );
+
+ findByTestID(el, "Chart.XAxis.ShowLabels")
+ .last()
+ .simulate("click");
+ });
+
+ test("Sets Sort X Values option", done => {
+ const el = mount(
+ {
+ globalSeriesType: "column",
+ sortX: false,
+ },
+ done
+ );
+
+ findByTestID(el, "Chart.XAxis.Sort")
+ .last()
+ .simulate("click");
+ });
+
+ test("Sets Reverse X Values option", done => {
+ const el = mount(
+ {
+ globalSeriesType: "column",
+ reverseX: false,
+ },
+ done
+ );
+
+ findByTestID(el, "Chart.XAxis.Reverse")
+ .last()
+ .simulate("click");
+ });
+});
diff --git a/viz-lib/src/visualizations/chart/Editor/XAxisSettings.tsx b/viz-lib/src/visualizations/chart/Editor/XAxisSettings.tsx
new file mode 100644
index 000000000..7aefc330a
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/Editor/XAxisSettings.tsx
@@ -0,0 +1,63 @@
+import React from "react";
+import { Section, Switch } from "@/components/visualizations/editor";
+import { EditorPropTypes } from "@/visualizations/prop-types";
+
+import AxisSettings from "./AxisSettings";
+
+export default function XAxisSettings({ options, onOptionsChange }: any) {
+ return (
+
+ any' is not assignable to ty... Remove this comment to see the full error message
+ onChange={(xAxis: any) => onOptionsChange({ xAxis })}
+ />
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+ any' is not assignable to ty... Remove this comment to see the full error message
+ onChange={(sortX: any) => onOptionsChange({ sortX })}>
+ Sort Values
+
+
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+ any' is not assignable to... Remove this comment to see the full error message
+ onChange={(reverseX: any) => onOptionsChange({ reverseX })}>
+ Reverse Order
+
+
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+ any' is not assignable to ... Remove this comment to see the full error message
+ onChange={(enabled: any) => onOptionsChange({ xAxis: { labels: { enabled } } })}>
+ Show Labels
+
+
+
+ );
+}
+
+XAxisSettings.propTypes = EditorPropTypes;
diff --git a/viz-lib/src/visualizations/chart/Editor/YAxisSettings.test.tsx b/viz-lib/src/visualizations/chart/Editor/YAxisSettings.test.tsx
new file mode 100644
index 000000000..f8a40b9c3
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/Editor/YAxisSettings.test.tsx
@@ -0,0 +1,143 @@
+import React from "react";
+import enzyme from "enzyme";
+
+import getOptions from "../getOptions";
+import YAxisSettings from "./YAxisSettings";
+
+function findByTestID(wrapper: any, testId: any) {
+ return wrapper.find(`[data-test="${testId}"]`);
+}
+
+function elementExists(wrapper: any, testId: any) {
+ return findByTestID(wrapper, testId).length > 0;
+}
+
+function mount(options: any, done: any) {
+ options = getOptions(options);
+ return enzyme.mount(
+ {
+ expect(changedOptions).toMatchSnapshot();
+ done();
+ }}
+ />
+ );
+}
+
+describe("Visualizations -> Chart -> Editor -> Y-Axis Settings", () => {
+ test("Changes axis type", done => {
+ const el = mount(
+ {
+ globalSeriesType: "column",
+ yAxis: [{ type: "linear" }, { type: "linear", opposite: true }],
+ },
+ done
+ );
+
+ findByTestID(el, "Chart.LeftYAxis.Type")
+ .last()
+ .simulate("mouseDown");
+ findByTestID(el, "Chart.LeftYAxis.Type.Category")
+ .last()
+ .simulate("click");
+ });
+
+ test("Changes axis name", done => {
+ const el = mount(
+ {
+ globalSeriesType: "column",
+ yAxis: [{ type: "linear" }, { type: "linear", opposite: true }],
+ },
+ done
+ );
+
+ findByTestID(el, "Chart.LeftYAxis.Name")
+ .last()
+ .simulate("change", { target: { value: "test" } });
+ });
+
+ test("Changes axis min value", done => {
+ const el = mount(
+ {
+ globalSeriesType: "column",
+ yAxis: [{ type: "linear" }, { type: "linear", opposite: true }],
+ },
+ done
+ );
+
+ findByTestID(el, "Chart.LeftYAxis.RangeMin")
+ .find("input")
+ .last()
+ .simulate("change", { target: { value: "50" } });
+ });
+
+ test("Changes axis max value", done => {
+ const el = mount(
+ {
+ globalSeriesType: "column",
+ yAxis: [{ type: "linear" }, { type: "linear", opposite: true }],
+ },
+ done
+ );
+
+ findByTestID(el, "Chart.LeftYAxis.RangeMax")
+ .find("input")
+ .last()
+ .simulate("change", { target: { value: "200" } });
+ });
+
+ describe("for non-heatmap", () => {
+ test("Right Y Axis should be available", () => {
+ // @ts-expect-error ts-migrate(2554) FIXME: Expected 2 arguments, but got 1.
+ const el = mount({
+ globalSeriesType: "column",
+ yAxis: [{ type: "linear" }, { type: "linear", opposite: true }],
+ });
+
+ expect(elementExists(el, "Chart.RightYAxis.Type")).toBeTruthy();
+ });
+ });
+
+ describe("for heatmap", () => {
+ test("Right Y Axis should not be available", () => {
+ // @ts-expect-error ts-migrate(2554) FIXME: Expected 2 arguments, but got 1.
+ const el = mount({
+ globalSeriesType: "heatmap",
+ yAxis: [{ type: "linear" }, { type: "linear", opposite: true }],
+ });
+
+ expect(elementExists(el, "Chart.RightYAxis.Type")).toBeFalsy();
+ });
+
+ test("Sets Sort X Values option", done => {
+ const el = mount(
+ {
+ globalSeriesType: "heatmap",
+ sortY: false,
+ },
+ done
+ );
+
+ findByTestID(el, "Chart.LeftYAxis.Sort")
+ .last()
+ .simulate("click");
+ });
+
+ test("Sets Reverse Y Values option", done => {
+ const el = mount(
+ {
+ globalSeriesType: "heatmap",
+ reverseY: false,
+ },
+ done
+ );
+
+ findByTestID(el, "Chart.LeftYAxis.Reverse")
+ .last()
+ .simulate("click");
+ });
+ });
+});
diff --git a/viz-lib/src/visualizations/chart/Editor/YAxisSettings.tsx b/viz-lib/src/visualizations/chart/Editor/YAxisSettings.tsx
new file mode 100644
index 000000000..f79157227
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/Editor/YAxisSettings.tsx
@@ -0,0 +1,99 @@
+import React from "react";
+import { Section, Switch } from "@/components/visualizations/editor";
+import { EditorPropTypes } from "@/visualizations/prop-types";
+
+import AxisSettings from "./AxisSettings";
+
+export default function YAxisSettings({ options, onOptionsChange }: any) {
+ const [leftYAxis, rightYAxis] = options.yAxis;
+
+ return (
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+ {!options.swappedAxes ? "Left Y Axis" : "X Axis"}
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ any' is not assignable to typ... Remove this comment to see the full error message
+ onChange={(axis: any) => onOptionsChange({ yAxis: [axis, rightYAxis] })}
+ />
+
+
+ {options.globalSeriesType !== "heatmap" && !options.swappedAxes && (
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+ Right Y Axis
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ any' is not assignable to typ... Remove this comment to see the full error message
+ onChange={(axis: any) => onOptionsChange({ yAxis: [leftYAxis, axis] })}
+ />
+
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+ any' is not assig... Remove this comment to see the full error message
+ onChange={(alignYAxesAtZero: any) => onOptionsChange({ alignYAxesAtZero })}>
+ Align Y Axes at Zero
+
+
+
+ )}
+
+ {options.globalSeriesType === "heatmap" && (
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+ any' is not assignable to ty... Remove this comment to see the full error message
+ onChange={(sortY: any) => onOptionsChange({ sortY })}>
+ Sort Values
+
+
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+ any' is not assignable to... Remove this comment to see the full error message
+ onChange={(reverseY: any) => onOptionsChange({ reverseY })}>
+ Reverse Order
+
+
+
+ )}
+
+ );
+}
+
+YAxisSettings.propTypes = EditorPropTypes;
diff --git a/viz-lib/src/visualizations/chart/Editor/__snapshots__/ColorsSettings.test.tsx.snap b/viz-lib/src/visualizations/chart/Editor/__snapshots__/ColorsSettings.test.tsx.snap
new file mode 100644
index 000000000..d33d93cde
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/Editor/__snapshots__/ColorsSettings.test.tsx.snap
@@ -0,0 +1,39 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`Visualizations -> Chart -> Editor -> Colors Settings for all except of pie and heatmap Changes series color 1`] = `
+Object {
+ "seriesOptions": Object {
+ "b": Object {
+ "color": "#FF0000",
+ },
+ },
+}
+`;
+
+exports[`Visualizations -> Chart -> Editor -> Colors Settings for heatmap Changes color scheme 1`] = `
+Object {
+ "colorScheme": "Blues",
+}
+`;
+
+exports[`Visualizations -> Chart -> Editor -> Colors Settings for heatmap Sets custom color scheme 1`] = `
+Object {
+ "heatMinColor": "#FFFF00",
+}
+`;
+
+exports[`Visualizations -> Chart -> Editor -> Colors Settings for heatmap Sets custom color scheme 2`] = `
+Object {
+ "heatMaxColor": "#FF0000",
+}
+`;
+
+exports[`Visualizations -> Chart -> Editor -> Colors Settings for pie Changes series color 1`] = `
+Object {
+ "valuesOptions": Object {
+ "v": Object {
+ "color": "#FF0000",
+ },
+ },
+}
+`;
diff --git a/viz-lib/src/visualizations/chart/Editor/__snapshots__/DataLabelsSettings.test.tsx.snap b/viz-lib/src/visualizations/chart/Editor/__snapshots__/DataLabelsSettings.test.tsx.snap
new file mode 100644
index 000000000..bb5f723c5
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/Editor/__snapshots__/DataLabelsSettings.test.tsx.snap
@@ -0,0 +1,31 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`Visualizations -> Chart -> Editor -> Data Labels Settings Changes data labels format 1`] = `
+Object {
+ "textFormat": "{{ @@x }} :: {{ @@y }} / {{ @@yPercent }}",
+}
+`;
+
+exports[`Visualizations -> Chart -> Editor -> Data Labels Settings Changes date/time format 1`] = `
+Object {
+ "dateTimeFormat": "YYYY MMM DD",
+}
+`;
+
+exports[`Visualizations -> Chart -> Editor -> Data Labels Settings Changes number format 1`] = `
+Object {
+ "numberFormat": "0.00",
+}
+`;
+
+exports[`Visualizations -> Chart -> Editor -> Data Labels Settings Changes percent values format 1`] = `
+Object {
+ "percentFormat": "0.0%",
+}
+`;
+
+exports[`Visualizations -> Chart -> Editor -> Data Labels Settings Sets Show Data Labels option 1`] = `
+Object {
+ "showDataLabels": true,
+}
+`;
diff --git a/viz-lib/src/visualizations/chart/Editor/__snapshots__/GeneralSettings.test.tsx.snap b/viz-lib/src/visualizations/chart/Editor/__snapshots__/GeneralSettings.test.tsx.snap
new file mode 100644
index 000000000..a520b2d38
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/Editor/__snapshots__/GeneralSettings.test.tsx.snap
@@ -0,0 +1,68 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`Visualizations -> Chart -> Editor -> General Settings Box: toggles show points 1`] = `
+Object {
+ "showpoints": true,
+}
+`;
+
+exports[`Visualizations -> Chart -> Editor -> General Settings Changes global series type 1`] = `
+Object {
+ "globalSeriesType": "pie",
+ "seriesOptions": Object {
+ "a": Object {
+ "type": "pie",
+ },
+ "b": Object {
+ "type": "pie",
+ },
+ },
+ "showDataLabels": true,
+ "swappedAxes": false,
+}
+`;
+
+exports[`Visualizations -> Chart -> Editor -> General Settings Enables stacking 1`] = `
+Object {
+ "series": Object {
+ "stacking": "stack",
+ },
+}
+`;
+
+exports[`Visualizations -> Chart -> Editor -> General Settings Keep missing/null values 1`] = `
+Object {
+ "missingValuesAsZero": false,
+}
+`;
+
+exports[`Visualizations -> Chart -> Editor -> General Settings Pie: changes direction 1`] = `
+Object {
+ "direction": Object {
+ "type": "clockwise",
+ },
+}
+`;
+
+exports[`Visualizations -> Chart -> Editor -> General Settings Toggles horizontal bar chart 1`] = `
+Object {
+ "seriesOptions": Object {},
+ "swappedAxes": true,
+}
+`;
+
+exports[`Visualizations -> Chart -> Editor -> General Settings Toggles legend 1`] = `
+Object {
+ "legend": Object {
+ "enabled": false,
+ },
+}
+`;
+
+exports[`Visualizations -> Chart -> Editor -> General Settings Toggles normalize values to percentage 1`] = `
+Object {
+ "series": Object {
+ "percentValues": true,
+ },
+}
+`;
diff --git a/viz-lib/src/visualizations/chart/Editor/__snapshots__/SeriesSettings.test.tsx.snap b/viz-lib/src/visualizations/chart/Editor/__snapshots__/SeriesSettings.test.tsx.snap
new file mode 100644
index 000000000..a0f5db1de
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/Editor/__snapshots__/SeriesSettings.test.tsx.snap
@@ -0,0 +1,31 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`Visualizations -> Chart -> Editor -> Series Settings Changes series axis 1`] = `
+Object {
+ "seriesOptions": Object {
+ "a": Object {
+ "yAxis": 1,
+ },
+ },
+}
+`;
+
+exports[`Visualizations -> Chart -> Editor -> Series Settings Changes series label 1`] = `
+Object {
+ "seriesOptions": Object {
+ "a": Object {
+ "name": "test",
+ },
+ },
+}
+`;
+
+exports[`Visualizations -> Chart -> Editor -> Series Settings Changes series type 1`] = `
+Object {
+ "seriesOptions": Object {
+ "a": Object {
+ "type": "area",
+ },
+ },
+}
+`;
diff --git a/viz-lib/src/visualizations/chart/Editor/__snapshots__/XAxisSettings.test.tsx.snap b/viz-lib/src/visualizations/chart/Editor/__snapshots__/XAxisSettings.test.tsx.snap
new file mode 100644
index 000000000..4e5fbe197
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/Editor/__snapshots__/XAxisSettings.test.tsx.snap
@@ -0,0 +1,48 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`Visualizations -> Chart -> Editor -> X-Axis Settings Changes axis name 1`] = `
+Object {
+ "xAxis": Object {
+ "labels": Object {
+ "enabled": true,
+ },
+ "title": Object {
+ "text": "test",
+ },
+ "type": "-",
+ },
+}
+`;
+
+exports[`Visualizations -> Chart -> Editor -> X-Axis Settings Changes axis type 1`] = `
+Object {
+ "xAxis": Object {
+ "labels": Object {
+ "enabled": true,
+ },
+ "type": "linear",
+ },
+}
+`;
+
+exports[`Visualizations -> Chart -> Editor -> X-Axis Settings Sets Reverse X Values option 1`] = `
+Object {
+ "reverseX": true,
+}
+`;
+
+exports[`Visualizations -> Chart -> Editor -> X-Axis Settings Sets Show Labels option 1`] = `
+Object {
+ "xAxis": Object {
+ "labels": Object {
+ "enabled": true,
+ },
+ },
+}
+`;
+
+exports[`Visualizations -> Chart -> Editor -> X-Axis Settings Sets Sort X Values option 1`] = `
+Object {
+ "sortX": true,
+}
+`;
diff --git a/viz-lib/src/visualizations/chart/Editor/__snapshots__/YAxisSettings.test.tsx.snap b/viz-lib/src/visualizations/chart/Editor/__snapshots__/YAxisSettings.test.tsx.snap
new file mode 100644
index 000000000..b9364b20f
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/Editor/__snapshots__/YAxisSettings.test.tsx.snap
@@ -0,0 +1,74 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`Visualizations -> Chart -> Editor -> Y-Axis Settings Changes axis max value 1`] = `
+Object {
+ "yAxis": Array [
+ Object {
+ "rangeMax": 200,
+ "type": "linear",
+ },
+ Object {
+ "opposite": true,
+ "type": "linear",
+ },
+ ],
+}
+`;
+
+exports[`Visualizations -> Chart -> Editor -> Y-Axis Settings Changes axis min value 1`] = `
+Object {
+ "yAxis": Array [
+ Object {
+ "rangeMin": 50,
+ "type": "linear",
+ },
+ Object {
+ "opposite": true,
+ "type": "linear",
+ },
+ ],
+}
+`;
+
+exports[`Visualizations -> Chart -> Editor -> Y-Axis Settings Changes axis name 1`] = `
+Object {
+ "yAxis": Array [
+ Object {
+ "title": Object {
+ "text": "test",
+ },
+ "type": "linear",
+ },
+ Object {
+ "opposite": true,
+ "type": "linear",
+ },
+ ],
+}
+`;
+
+exports[`Visualizations -> Chart -> Editor -> Y-Axis Settings Changes axis type 1`] = `
+Object {
+ "yAxis": Array [
+ Object {
+ "type": "category",
+ },
+ Object {
+ "opposite": true,
+ "type": "linear",
+ },
+ ],
+}
+`;
+
+exports[`Visualizations -> Chart -> Editor -> Y-Axis Settings for heatmap Sets Reverse Y Values option 1`] = `
+Object {
+ "reverseY": true,
+}
+`;
+
+exports[`Visualizations -> Chart -> Editor -> Y-Axis Settings for heatmap Sets Sort X Values option 1`] = `
+Object {
+ "sortY": true,
+}
+`;
diff --git a/viz-lib/src/visualizations/chart/Editor/editor.less b/viz-lib/src/visualizations/chart/Editor/editor.less
new file mode 100644
index 000000000..5b113911f
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/Editor/editor.less
@@ -0,0 +1,43 @@
+.chart-editor-series {
+ .series-settings-order {
+ display: flex;
+ align-items: center;
+ white-space: nowrap;
+ }
+
+ .series-settings-y-axis {
+ white-space: nowrap;
+ }
+
+ .drag-handle {
+ height: 28px;
+ padding: 0 5px;
+ margin-left: -5px;
+ }
+
+ &.sortable-container {
+ table {
+ background: transparent;
+ }
+
+ thead th {
+ // TODO: replace with @table-header-bg
+ // Cannot do it not because of conflict between Antd and Bootstrap variables
+ background: mix(#ffffff, rgb(102, 136, 153), 97%) !important;
+ }
+
+ &.sortable-container-dragging tbody {
+ td {
+ background: transparent !important;
+ }
+
+ .chart-editor-series-dragged-item {
+ td {
+ // TODO: replace with @table-row-hover-bg
+ // Cannot do it not because of conflict between Antd and Bootstrap variables
+ background: mix(#ffffff, rgb(102, 136, 153), 95%) !important;
+ }
+ }
+ }
+ }
+}
diff --git a/viz-lib/src/visualizations/chart/Editor/index.test.tsx b/viz-lib/src/visualizations/chart/Editor/index.test.tsx
new file mode 100644
index 000000000..8f1cb1fd9
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/Editor/index.test.tsx
@@ -0,0 +1,48 @@
+import React from "react";
+import enzyme from "enzyme";
+
+import getOptions from "../getOptions";
+import Editor from "./index";
+
+function findByTestID(wrapper: any, testId: any) {
+ return wrapper.find(`[data-test="${testId}"]`);
+}
+
+function elementExists(wrapper: any, testId: any) {
+ return findByTestID(wrapper, testId).length > 0;
+}
+
+function mount(options: any, data: any) {
+ options = getOptions(options);
+ return enzyme.mount( {}} />);
+}
+
+describe("Visualizations -> Chart -> Editor (wrapper)", () => {
+ test("Renders generic wrapper", () => {
+ const el = mount({ globalSeriesType: "column" }, { columns: [], rows: [] });
+
+ expect(elementExists(el, "VisualizationEditor.Tabs.General")).toBeTruthy();
+ expect(elementExists(el, "VisualizationEditor.Tabs.XAxis")).toBeTruthy();
+ expect(elementExists(el, "VisualizationEditor.Tabs.YAxis")).toBeTruthy();
+ expect(elementExists(el, "VisualizationEditor.Tabs.Series")).toBeTruthy();
+ expect(elementExists(el, "VisualizationEditor.Tabs.Colors")).toBeTruthy();
+ expect(elementExists(el, "VisualizationEditor.Tabs.DataLabels")).toBeTruthy();
+
+ expect(elementExists(el, "Chart.GlobalSeriesType")).toBeTruthy(); // general settings block exists
+ expect(elementExists(el, "Chart.Custom.Code")).toBeFalsy(); // custom settings block does not exist
+ });
+
+ test("Renders wrapper for custom charts", () => {
+ const el = mount({ globalSeriesType: "custom" }, { columns: [], rows: [] });
+
+ expect(elementExists(el, "VisualizationEditor.Tabs.General")).toBeTruthy();
+ expect(elementExists(el, "VisualizationEditor.Tabs.XAxis")).toBeFalsy();
+ expect(elementExists(el, "VisualizationEditor.Tabs.YAxis")).toBeFalsy();
+ expect(elementExists(el, "VisualizationEditor.Tabs.Series")).toBeFalsy();
+ expect(elementExists(el, "VisualizationEditor.Tabs.Colors")).toBeFalsy();
+ expect(elementExists(el, "VisualizationEditor.Tabs.DataLabels")).toBeFalsy();
+
+ expect(elementExists(el, "Chart.GlobalSeriesType")).toBeTruthy(); // general settings block exists
+ expect(elementExists(el, "Chart.Custom.Code")).toBeTruthy(); // custom settings block exists
+ });
+});
diff --git a/viz-lib/src/visualizations/chart/Editor/index.tsx b/viz-lib/src/visualizations/chart/Editor/index.tsx
new file mode 100644
index 000000000..0090fe632
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/Editor/index.tsx
@@ -0,0 +1,59 @@
+/* eslint-disable react/prop-types */
+import React from "react";
+import createTabbedEditor from "@/components/visualizations/editor/createTabbedEditor";
+
+import GeneralSettings from "./GeneralSettings";
+import XAxisSettings from "./XAxisSettings";
+import YAxisSettings from "./YAxisSettings";
+import SeriesSettings from "./SeriesSettings";
+import ColorsSettings from "./ColorsSettings";
+import DataLabelsSettings from "./DataLabelsSettings";
+import CustomChartSettings from "./CustomChartSettings";
+
+import "./editor.less";
+
+const isCustomChart = (options: any) => options.globalSeriesType === "custom";
+const isPieChart = (options: any) => options.globalSeriesType === "pie";
+
+export default createTabbedEditor([
+ {
+ key: "General",
+ title: "General",
+ component: (props: any) => (
+
+
+ {isCustomChart(props.options) && }
+
+ ),
+ },
+ {
+ key: "XAxis",
+ title: ({ swappedAxes }: any) => (!swappedAxes ? "X Axis" : "Y Axis"),
+ component: XAxisSettings,
+ isAvailable: (options: any) => !isCustomChart(options) && !isPieChart(options),
+ },
+ {
+ key: "YAxis",
+ title: ({ swappedAxes }: any) => (!swappedAxes ? "Y Axis" : "X Axis"),
+ component: YAxisSettings,
+ isAvailable: (options: any) => !isCustomChart(options) && !isPieChart(options),
+ },
+ {
+ key: "Series",
+ title: "Series",
+ component: SeriesSettings,
+ isAvailable: (options: any) => !isCustomChart(options),
+ },
+ {
+ key: "Colors",
+ title: "Colors",
+ component: ColorsSettings,
+ isAvailable: (options: any) => !isCustomChart(options),
+ },
+ {
+ key: "DataLabels",
+ title: "Data Labels",
+ component: DataLabelsSettings,
+ isAvailable: (options: any) => !isCustomChart(options),
+ },
+]);
diff --git a/viz-lib/src/visualizations/chart/Renderer/CustomPlotlyChart.tsx b/viz-lib/src/visualizations/chart/Renderer/CustomPlotlyChart.tsx
new file mode 100644
index 000000000..2a3587ff2
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/Renderer/CustomPlotlyChart.tsx
@@ -0,0 +1,43 @@
+import React, { useState, useEffect, useMemo } from "react";
+import { RendererPropTypes } from "@/visualizations/prop-types";
+
+import resizeObserver from "@/services/resizeObserver";
+
+import getChartData from "../getChartData";
+import { Plotly, prepareCustomChartData, createCustomChartRenderer } from "../plotly";
+
+export default function CustomPlotlyChart({ options, data }: any) {
+ const [container, setContainer] = useState(null);
+
+ const renderCustomChart = useMemo(() => createCustomChartRenderer(options.customCode, options.enableConsoleLogs), [
+ options.customCode,
+ options.enableConsoleLogs,
+ ]);
+
+ const plotlyData = useMemo(() => prepareCustomChartData(getChartData(data.rows, options)), [options, data]);
+
+ useEffect(() => {
+ if (container) {
+ const unwatch = resizeObserver(container, () => {
+ // Clear existing data with blank data for succeeding codeCall adds data to existing plot.
+ // @ts-expect-error ts-migrate(2345) FIXME: Argument of type 'null' is not assignable to param... Remove this comment to see the full error message
+ Plotly.purge(container);
+ renderCustomChart(plotlyData.x, plotlyData.ys, container, Plotly);
+ });
+ return unwatch;
+ }
+ }, [container, plotlyData, renderCustomChart]);
+
+ // Cleanup when component destroyed
+ useEffect(() => {
+ if (container) {
+ // @ts-expect-error ts-migrate(2345) FIXME: Argument of type 'null' is not assignable to param... Remove this comment to see the full error message
+ return () => Plotly.purge(container);
+ }
+ }, [container]);
+
+ // @ts-expect-error ts-migrate(2322) FIXME: Type 'Dispatch>' is not assig... Remove this comment to see the full error message
+ return
;
+}
+
+CustomPlotlyChart.propTypes = RendererPropTypes;
diff --git a/viz-lib/src/visualizations/chart/Renderer/PlotlyChart.tsx b/viz-lib/src/visualizations/chart/Renderer/PlotlyChart.tsx
new file mode 100644
index 000000000..bae5a16c9
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/Renderer/PlotlyChart.tsx
@@ -0,0 +1,63 @@
+import React, { useState, useEffect, useContext, useRef } from "react";
+import useMedia from "use-media";
+import { ErrorBoundaryContext } from "@/components/ErrorBoundary";
+import { RendererPropTypes } from "@/visualizations/prop-types";
+import { visualizationsSettings } from "@/visualizations/visualizationsSettings";
+import getChartData from "../getChartData";
+import initChart from "./initChart";
+
+export interface PlotlyChartProps {
+ data: {
+ rows: any[];
+ columns: any[];
+ };
+ options: object;
+}
+
+export default function PlotlyChart({ options, data }: PlotlyChartProps) {
+ const [container, setContainer] = useState(null);
+ const [chart, setChart] = useState(null);
+
+ const errorHandler = useContext(ErrorBoundaryContext);
+ const errorHandlerRef = useRef();
+ // @ts-expect-error ts-migrate(2322) FIXME: Type '{ handleError: (error: any) => void; reset: ... Remove this comment to see the full error message
+ errorHandlerRef.current = errorHandler;
+
+ const isMobile = useMedia({ maxWidth: 768 });
+ const isMobileRef = useRef();
+ // @ts-expect-error ts-migrate(2322) FIXME: Type 'boolean' is not assignable to type 'undefine... Remove this comment to see the full error message
+ isMobileRef.current = isMobile;
+
+ useEffect(() => {
+ if (container) {
+ let isDestroyed = false;
+
+ const chartData = getChartData(data.rows, options);
+ const _chart = initChart(container, options, chartData, visualizationsSettings, (error: any) => {
+ // @ts-expect-error ts-migrate(2532) FIXME: Object is possibly 'undefined'.
+ errorHandlerRef.current.handleError(error);
+ });
+ _chart.initialized.then(() => {
+ if (!isDestroyed) {
+ setChart(_chart);
+ }
+ });
+ return () => {
+ isDestroyed = true;
+ _chart.destroy();
+ };
+ }
+ }, [options, data, container]);
+
+ useEffect(() => {
+ if (chart) {
+ // @ts-expect-error ts-migrate(2531) FIXME: Object is possibly 'null'.
+ chart.setZoomEnabled(!isMobile);
+ }
+ }, [chart, isMobile]);
+
+ // @ts-expect-error ts-migrate(2322) FIXME: Type 'Dispatch>' is not assig... Remove this comment to see the full error message
+ return
;
+}
+
+PlotlyChart.propTypes = RendererPropTypes;
diff --git a/viz-lib/src/visualizations/chart/Renderer/index.tsx b/viz-lib/src/visualizations/chart/Renderer/index.tsx
new file mode 100644
index 000000000..eb5ab0c30
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/Renderer/index.tsx
@@ -0,0 +1,17 @@
+import React from "react";
+import { RendererPropTypes } from "@/visualizations/prop-types";
+
+import PlotlyChart from "./PlotlyChart";
+import CustomPlotlyChart from "./CustomPlotlyChart";
+import { visualizationsSettings } from "@/visualizations/visualizationsSettings";
+
+import "./renderer.less";
+
+export default function Renderer({ options, ...props }: any) {
+ if (options.globalSeriesType === "custom" && visualizationsSettings.allowCustomJSVisualizations) {
+ return ;
+ }
+ return ;
+}
+
+Renderer.propTypes = RendererPropTypes;
diff --git a/viz-lib/src/visualizations/chart/Renderer/initChart.ts b/viz-lib/src/visualizations/chart/Renderer/initChart.ts
new file mode 100644
index 000000000..aec9bc6b4
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/Renderer/initChart.ts
@@ -0,0 +1,142 @@
+import { isArray, isObject, isString, isFunction, startsWith, reduce, merge, map, each } from "lodash";
+import resizeObserver from "@/services/resizeObserver";
+import { Plotly, prepareData, prepareLayout, updateData, updateAxes, updateChartSize } from "../plotly";
+
+function createErrorHandler(errorHandler: any) {
+ return (error: any) => {
+ // This error happens only when chart width is 20px and looks that
+ // it's safe to just ignore it: 1px less or more and chart will get fixed.
+ if (isString(error) && startsWith(error, "ax.dtick error")) {
+ return;
+ }
+ errorHandler(error);
+ };
+}
+
+// This utility is intended to reduce amount of plot updates when multiple Plotly.relayout
+// calls needed in order to compute/update the plot.
+// `.append()` method takes an array of two element: first one is a object with updates for layout,
+// and second is an optional function that will be called when plot is updated. That function may
+// return an array with same structure if further updates needed.
+// `.process()` merges all updates into a single object and calls `Plotly.relayout()`. After that
+// it calls all callbacks, collects their return values and does another loop if needed.
+function initPlotUpdater() {
+ let actions: any = [];
+
+ const updater = {
+ append(action: any) {
+ if (isArray(action) && isObject(action[0])) {
+ actions.push(action);
+ }
+ return updater;
+ },
+ // @ts-expect-error ts-migrate(7023) FIXME: 'process' implicitly has return type 'any' because... Remove this comment to see the full error message
+ process(plotlyElement: any) {
+ if (actions.length > 0) {
+ const updates = reduce(actions, (updates, action) => merge(updates, action[0]), {});
+ const handlers = map(actions, action => (isFunction(action[1]) ? action[1] : () => null));
+ actions = [];
+ return Plotly.relayout(plotlyElement, updates).then(() => {
+ each(handlers, handler => updater.append(handler()));
+ return updater.process(plotlyElement);
+ });
+ } else {
+ return Promise.resolve();
+ }
+ },
+ };
+
+ return updater;
+}
+
+export default function initChart(container: any, options: any, data: any, additionalOptions: any, onError: any) {
+ const handleError = createErrorHandler(onError);
+
+ const plotlyOptions = {
+ showLink: false,
+ displaylogo: false,
+ };
+
+ if (additionalOptions.hidePlotlyModeBar) {
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'displayModeBar' does not exist on type '... Remove this comment to see the full error message
+ plotlyOptions.displayModeBar = false;
+ }
+
+ const plotlyData = prepareData(data, options);
+ const plotlyLayout = prepareLayout(container, options, plotlyData);
+
+ let isDestroyed = false;
+
+ let updater = initPlotUpdater();
+
+ function createSafeFunction(fn: any) {
+ // @ts-expect-error ts-migrate(7019) FIXME: Rest parameter 'args' implicitly has an 'any[]' ty... Remove this comment to see the full error message
+ return (...args) => {
+ if (!isDestroyed) {
+ try {
+ return fn(...args);
+ } catch (error) {
+ handleError(error);
+ }
+ }
+ };
+ }
+
+ let unwatchResize = () => {};
+
+ const promise = Promise.resolve()
+ .then(() => Plotly.newPlot(container, plotlyData, plotlyLayout, plotlyOptions))
+ .then(
+ createSafeFunction(() =>
+ updater
+ .append(updateAxes(container, plotlyData, plotlyLayout, options))
+ .append(updateChartSize(container, plotlyLayout, options))
+ .process(container)
+ )
+ )
+ .then(
+ createSafeFunction(() => {
+ container.on(
+ "plotly_restyle",
+ createSafeFunction((updates: any) => {
+ // This event is triggered if some plotly data/layout has changed.
+ // We need to catch only changes of traces visibility to update stacking
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'visible' does not exist on type 'object'... Remove this comment to see the full error message
+ if (isArray(updates) && isObject(updates[0]) && updates[0].visible) {
+ updateData(plotlyData, options);
+ updater.append(updateAxes(container, plotlyData, plotlyLayout, options)).process(container);
+ }
+ })
+ );
+ options.onHover && container.on("plotly_hover", options.onHover);
+ options.onUnHover && container.on("plotly_unhover", options.onUnHover);
+
+ unwatchResize = resizeObserver(
+ container,
+ createSafeFunction(() => {
+ updater.append(updateChartSize(container, plotlyLayout, options)).process(container);
+ })
+ );
+ })
+ )
+ .catch(handleError);
+
+ // @ts-expect-error ts-migrate(7022) FIXME: 'result' implicitly has type 'any' because it does... Remove this comment to see the full error message
+ const result = {
+ initialized: promise.then(() => result),
+ setZoomEnabled: createSafeFunction((allowZoom: any) => {
+ const layoutUpdates = { dragmode: allowZoom ? "zoom" : false };
+ // @ts-expect-error ts-migrate(2345) FIXME: Argument of type '{ dragmode: string | boolean; }'... Remove this comment to see the full error message
+ return Plotly.relayout(container, layoutUpdates);
+ }),
+ destroy: createSafeFunction(() => {
+ isDestroyed = true;
+ container.removeAllListeners("plotly_restyle");
+ unwatchResize();
+ delete container.__previousSize; // added by `updateChartSize`
+ Plotly.purge(container);
+ }),
+ };
+
+ return result;
+}
diff --git a/viz-lib/src/visualizations/chart/Renderer/renderer.less b/viz-lib/src/visualizations/chart/Renderer/renderer.less
new file mode 100644
index 000000000..524cec77b
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/Renderer/renderer.less
@@ -0,0 +1,4 @@
+.chart-visualization-container {
+ height: 400px;
+ overflow: hidden;
+}
diff --git a/viz-lib/src/visualizations/chart/fixtures/getChartData/multiple-series-grouped.json b/viz-lib/src/visualizations/chart/fixtures/getChartData/multiple-series-grouped.json
new file mode 100644
index 000000000..7fd5acd9c
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/fixtures/getChartData/multiple-series-grouped.json
@@ -0,0 +1,40 @@
+{
+ "input": {
+ "data": [
+ { "a": 42, "b": 10, "g": "first" },
+ { "a": 62, "b": 73, "g": "first" },
+ { "a": 21, "b": 82, "g": "second" },
+ { "a": 85, "b": 50, "g": "first" },
+ { "a": 95, "b": 32, "g": "second" }
+ ],
+ "options": {
+ "columnMapping": {
+ "a": "x",
+ "b": "y",
+ "g": "series"
+ },
+ "seriesOptions": {}
+ }
+ },
+ "output": {
+ "data": [
+ {
+ "name": "first",
+ "type": "column",
+ "data": [
+ { "x": 42, "y": 10, "$raw": { "a": 42, "b": 10, "g": "first" } },
+ { "x": 62, "y": 73, "$raw": { "a": 62, "b": 73, "g": "first" } },
+ { "x": 85, "y": 50, "$raw": { "a": 85, "b": 50, "g": "first" } }
+ ]
+ },
+ {
+ "name": "second",
+ "type": "column",
+ "data": [
+ { "x": 21, "y": 82, "$raw": { "a": 21, "b": 82, "g": "second" } },
+ { "x": 95, "y": 32, "$raw": { "a": 95, "b": 32, "g": "second" } }
+ ]
+ }
+ ]
+ }
+}
diff --git a/viz-lib/src/visualizations/chart/fixtures/getChartData/multiple-series-multiple-y.json b/viz-lib/src/visualizations/chart/fixtures/getChartData/multiple-series-multiple-y.json
new file mode 100644
index 000000000..df4fa9362
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/fixtures/getChartData/multiple-series-multiple-y.json
@@ -0,0 +1,41 @@
+{
+ "input": {
+ "data": [
+ { "a": 42, "b": 10, "c": 41, "d": 92 },
+ { "a": 62, "b": 73 },
+ { "a": 21, "b": null, "c": 33 },
+ { "a": 85, "b": 50 },
+ { "a": 95 }
+ ],
+ "options": {
+ "columnMapping": {
+ "a": "x",
+ "b": "y",
+ "c": "y"
+ },
+ "seriesOptions": {}
+ }
+ },
+ "output": {
+ "data": [
+ {
+ "name": "b",
+ "type": "column",
+ "data": [
+ { "x": 42, "y": 10, "$raw": { "a": 42, "b": 10, "c": 41, "d": 92 } },
+ { "x": 62, "y": 73, "$raw": { "a": 62, "b": 73 } },
+ { "x": 21, "y": null, "$raw": { "a": 21, "b": null, "c": 33 } },
+ { "x": 85, "y": 50, "$raw": { "a": 85, "b": 50 } }
+ ]
+ },
+ {
+ "name": "c",
+ "type": "column",
+ "data": [
+ { "x": 42, "y": 41, "$raw": { "a": 42, "b": 10, "c": 41, "d": 92 } },
+ { "x": 21, "y": 33, "$raw": { "a": 21, "b": null, "c": 33 } }
+ ]
+ }
+ ]
+ }
+}
diff --git a/viz-lib/src/visualizations/chart/fixtures/getChartData/multiple-series-sorted.json b/viz-lib/src/visualizations/chart/fixtures/getChartData/multiple-series-sorted.json
new file mode 100644
index 000000000..65f7c05cd
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/fixtures/getChartData/multiple-series-sorted.json
@@ -0,0 +1,43 @@
+{
+ "input": {
+ "data": [
+ { "a": 42, "b": 10, "g": "first" },
+ { "a": 62, "b": 73, "g": "first" },
+ { "a": 21, "b": 82, "g": "second" },
+ { "a": 85, "b": 50, "g": "first" },
+ { "a": 95, "b": 32, "g": "second" }
+ ],
+ "options": {
+ "columnMapping": {
+ "a": "x",
+ "b": "y",
+ "g": "series"
+ },
+ "seriesOptions": {
+ "first": { "zIndex": 2 },
+ "second": { "zIndex": 1 }
+ }
+ }
+ },
+ "output": {
+ "data": [
+ {
+ "name": "second",
+ "type": "column",
+ "data": [
+ { "x": 21, "y": 82, "$raw": { "a": 21, "b": 82, "g": "second" } },
+ { "x": 95, "y": 32, "$raw": { "a": 95, "b": 32, "g": "second" } }
+ ]
+ },
+ {
+ "name": "first",
+ "type": "column",
+ "data": [
+ { "x": 42, "y": 10, "$raw": { "a": 42, "b": 10, "g": "first" } },
+ { "x": 62, "y": 73, "$raw": { "a": 62, "b": 73, "g": "first" } },
+ { "x": 85, "y": 50, "$raw": { "a": 85, "b": 50, "g": "first" } }
+ ]
+ }
+ ]
+ }
+}
diff --git a/viz-lib/src/visualizations/chart/fixtures/getChartData/single-series.json b/viz-lib/src/visualizations/chart/fixtures/getChartData/single-series.json
new file mode 100644
index 000000000..748ef9a92
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/fixtures/getChartData/single-series.json
@@ -0,0 +1,32 @@
+{
+ "input": {
+ "data": [
+ { "a": 42, "b": 10, "c": 41, "d": 92 },
+ { "a": 62, "b": 73 },
+ { "a": 21, "b": null },
+ { "a": 85, "b": 50 },
+ { "a": 95 }
+ ],
+ "options": {
+ "columnMapping": {
+ "a": "x",
+ "b": "y"
+ },
+ "seriesOptions": {}
+ }
+ },
+ "output": {
+ "data": [
+ {
+ "name": "b",
+ "type": "column",
+ "data": [
+ { "x": 42, "y": 10, "$raw": { "a": 42, "b": 10, "c": 41, "d": 92 } },
+ { "x": 62, "y": 73, "$raw": { "a": 62, "b": 73 } },
+ { "x": 21, "y": null, "$raw": { "a": 21, "b": null } },
+ { "x": 85, "y": 50, "$raw": { "a": 85, "b": 50 } }
+ ]
+ }
+ ]
+ }
+}
diff --git a/viz-lib/src/visualizations/chart/getChartData.test.ts b/viz-lib/src/visualizations/chart/getChartData.test.ts
new file mode 100644
index 000000000..c870d84b9
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/getChartData.test.ts
@@ -0,0 +1,32 @@
+/* eslint-disable global-require, import/no-unresolved */
+import getChartData from "./getChartData";
+
+describe("Visualizations", () => {
+ describe("Chart", () => {
+ describe("getChartData", () => {
+ test("Single series", () => {
+ const { input, output } = require("./fixtures/getChartData/single-series");
+ const data = getChartData(input.data, input.options);
+ expect(data).toEqual(output.data);
+ });
+
+ test("Multiple series: multiple Y mappings", () => {
+ const { input, output } = require("./fixtures/getChartData/multiple-series-multiple-y");
+ const data = getChartData(input.data, input.options);
+ expect(data).toEqual(output.data);
+ });
+
+ test("Multiple series: grouped", () => {
+ const { input, output } = require("./fixtures/getChartData/multiple-series-grouped");
+ const data = getChartData(input.data, input.options);
+ expect(data).toEqual(output.data);
+ });
+
+ test("Multiple series: sorted", () => {
+ const { input, output } = require("./fixtures/getChartData/multiple-series-sorted");
+ const data = getChartData(input.data, input.options);
+ expect(data).toEqual(output.data);
+ });
+ });
+ });
+});
diff --git a/viz-lib/src/visualizations/chart/getChartData.ts b/viz-lib/src/visualizations/chart/getChartData.ts
new file mode 100644
index 000000000..222889b83
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/getChartData.ts
@@ -0,0 +1,107 @@
+import { isNil, isObject, each, forOwn, sortBy, values } from "lodash";
+
+function addPointToSeries(point: any, seriesCollection: any, seriesName: any) {
+ if (seriesCollection[seriesName] === undefined) {
+ seriesCollection[seriesName] = {
+ name: seriesName,
+ type: "column",
+ data: [],
+ };
+ }
+
+ seriesCollection[seriesName].data.push(point);
+}
+
+export default function getChartData(data: any, options: any) {
+ const series = {};
+
+ const mappings = options.columnMapping;
+
+ each(data, row => {
+ let point = { $raw: row };
+ let seriesName = null;
+ let xValue = 0;
+ const yValues = {};
+ let eValue: any = null;
+ let sizeValue: any = null;
+ let zValue: any = null;
+
+ forOwn(row, (value, definition) => {
+ definition = "" + definition;
+ const definitionParts = definition.split("::") || definition.split("__");
+ const name = definitionParts[0];
+ const type = mappings ? mappings[definition] : definitionParts[1];
+
+ if (type === "unused") {
+ return;
+ }
+
+ if (type === "x") {
+ xValue = value;
+ // @ts-expect-error ts-migrate(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message
+ point[type] = value;
+ }
+ if (type === "y") {
+ // @ts-expect-error ts-migrate(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message
+ yValues[name] = value;
+ // @ts-expect-error ts-migrate(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message
+ point[type] = value;
+ }
+ if (type === "yError") {
+ eValue = value;
+ // @ts-expect-error ts-migrate(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message
+ point[type] = value;
+ }
+
+ if (type === "series") {
+ seriesName = String(value);
+ }
+
+ if (type === "size") {
+ // @ts-expect-error ts-migrate(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message
+ point[type] = value;
+ sizeValue = value;
+ }
+
+ if (type === "zVal") {
+ // @ts-expect-error ts-migrate(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message
+ point[type] = value;
+ zValue = value;
+ }
+
+ if (type === "multiFilter" || type === "multi-filter") {
+ seriesName = String(value);
+ }
+ });
+
+ if (isNil(seriesName)) {
+ each(yValues, (yValue, ySeriesName) => {
+ // @ts-expect-error ts-migrate(2322) FIXME: Type '{ x: number; y: never; $raw: any; }' is not ... Remove this comment to see the full error message
+ point = { x: xValue, y: yValue, $raw: point.$raw };
+ if (eValue !== null) {
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'yError' does not exist on type '{ $raw: ... Remove this comment to see the full error message
+ point.yError = eValue;
+ }
+
+ if (sizeValue !== null) {
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'size' does not exist on type '{ $raw: an... Remove this comment to see the full error message
+ point.size = sizeValue;
+ }
+
+ if (zValue !== null) {
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'zVal' does not exist on type '{ $raw: an... Remove this comment to see the full error message
+ point.zVal = zValue;
+ }
+ addPointToSeries(point, series, ySeriesName);
+ });
+ } else {
+ addPointToSeries(point, series, seriesName);
+ }
+ });
+ return sortBy(values(series), ({ name }) => {
+ if (isObject(options.seriesOptions[name])) {
+ return options.seriesOptions[name].zIndex || 0;
+ }
+ return 0;
+ });
+}
diff --git a/viz-lib/src/visualizations/chart/getOptions.ts b/viz-lib/src/visualizations/chart/getOptions.ts
new file mode 100644
index 000000000..4c272ff7b
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/getOptions.ts
@@ -0,0 +1,47 @@
+import { merge } from "lodash";
+import { visualizationsSettings } from "@/visualizations/visualizationsSettings";
+
+const DEFAULT_OPTIONS = {
+ globalSeriesType: "column",
+ sortX: true,
+ legend: { enabled: true, placement: "auto", traceorder: "normal" },
+ xAxis: { type: "-", labels: { enabled: true } },
+ yAxis: [{ type: "linear" }, { type: "linear", opposite: true }],
+ alignYAxesAtZero: false,
+ error_y: { type: "data", visible: true },
+ series: { stacking: null, error_y: { type: "data", visible: true } },
+ seriesOptions: {},
+ valuesOptions: {},
+ columnMapping: {},
+ direction: { type: "counterclockwise" },
+ sizemode: "diameter",
+ coefficient: 1,
+
+ // showDataLabels: false, // depends on chart type
+ numberFormat: "0,0[.]00000",
+ percentFormat: "0[.]00%",
+ // dateTimeFormat: 'DD/MM/YYYY HH:mm', // will be set from visualizationsSettings
+ textFormat: "", // default: combination of {{ @@yPercent }} ({{ @@y }} ± {{ @@yError }})
+
+ missingValuesAsZero: true,
+};
+
+export default function getOptions(options: any) {
+ const result = merge(
+ {},
+ DEFAULT_OPTIONS,
+ {
+ showDataLabels: options.globalSeriesType === "pie",
+ dateTimeFormat: visualizationsSettings.dateTimeFormat,
+ },
+ options
+ );
+
+ // Backward compatibility
+ if (["normal", "percent"].indexOf(result.series.stacking) >= 0) {
+ result.series.percentValues = result.series.stacking === "percent";
+ result.series.stacking = "stack";
+ }
+
+ return result;
+}
diff --git a/viz-lib/src/visualizations/chart/index.ts b/viz-lib/src/visualizations/chart/index.ts
new file mode 100644
index 000000000..a787fa2e8
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/index.ts
@@ -0,0 +1,17 @@
+import getOptions from "./getOptions";
+import Renderer from "./Renderer";
+import Editor from "./Editor";
+
+export default {
+ type: "CHART",
+ name: "Chart",
+ isDefault: true,
+ getOptions,
+ Renderer,
+ Editor,
+
+ defaultColumns: 3,
+ defaultRows: 8,
+ minColumns: 1,
+ minRows: 5,
+};
diff --git a/viz-lib/src/visualizations/chart/plotly/customChartUtils.ts b/viz-lib/src/visualizations/chart/plotly/customChartUtils.ts
new file mode 100644
index 000000000..981f616b2
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/plotly/customChartUtils.ts
@@ -0,0 +1,45 @@
+import { each } from "lodash";
+import { normalizeValue } from "./utils";
+
+export function prepareCustomChartData(series: any) {
+ const x: any = [];
+ const ys = {};
+
+ each(series, ({ name, data }) => {
+ // @ts-expect-error ts-migrate(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message
+ ys[name] = [];
+ each(data, point => {
+ // @ts-expect-error ts-migrate(2554) FIXME: Expected 2-3 arguments, but got 1.
+ x.push(normalizeValue(point.x));
+ // @ts-expect-error ts-migrate(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message
+ ys[name].push(normalizeValue(point.y));
+ });
+ });
+
+ return { x, ys };
+}
+
+export function createCustomChartRenderer(code: any, logErrorsToConsole = false) {
+ // Create a function from custom code; catch syntax errors
+ let render = () => {};
+ try {
+ // @ts-expect-error ts-migrate(2322) FIXME: Type 'Function' is not assignable to type '() => v... Remove this comment to see the full error message
+ render = new Function("x, ys, element, Plotly", code); // eslint-disable-line no-new-func
+ } catch (err) {
+ if (logErrorsToConsole) {
+ console.log(`Error while executing custom graph: ${err}`); // eslint-disable-line no-console
+ }
+ }
+
+ // Return function that will invoke custom code; catch runtime errors
+ return (x: any, ys: any, element: any, Plotly: any) => {
+ try {
+ // @ts-expect-error ts-migrate(2554) FIXME: Expected 0 arguments, but got 4.
+ render(x, ys, element, Plotly);
+ } catch (err) {
+ if (logErrorsToConsole) {
+ console.log(`Error while executing custom graph: ${err}`); // eslint-disable-line no-console
+ }
+ }
+ };
+}
diff --git a/viz-lib/src/visualizations/chart/plotly/fixtures/prepareData/bar/default.json b/viz-lib/src/visualizations/chart/plotly/fixtures/prepareData/bar/default.json
new file mode 100644
index 000000000..5e5317b66
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/plotly/fixtures/prepareData/bar/default.json
@@ -0,0 +1,57 @@
+{
+ "input": {
+ "options": {
+ "globalSeriesType": "column",
+ "numberFormat": "0,0[.]00000",
+ "percentFormat": "0[.]00%",
+ "textFormat": "",
+ "showDataLabels": true,
+ "direction": { "type": "counterclockwise" },
+ "xAxis": { "type": "-", "labels": { "enabled": true } },
+ "yAxis": [
+ { "type": "linear" },
+ { "type": "linear", "opposite": true }
+ ],
+ "series": { "stacking": null, "error_y": { "type": "data", "visible": true } },
+ "seriesOptions": {
+ "a": { "type": "column", "color": "red" }
+ },
+ "columnMapping": {
+ "x": "x",
+ "y1": "y"
+ },
+ "missingValuesAsZero": true
+ },
+ "data": [
+ {
+ "name": "a",
+ "data": [
+ { "x": "x1", "y": 10, "yError": 0 },
+ { "x": "x2", "y": 20, "yError": 0 },
+ { "x": "x3", "y": 30, "yError": 0 },
+ { "x": "x4", "y": 40, "yError": 0 }
+ ]
+ }
+ ]
+ },
+ "output": {
+ "series": [
+ {
+ "visible": true,
+ "offsetgroup": "0",
+ "type": "bar",
+ "name": "a",
+ "x": ["x1", "x2", "x3", "x4"],
+ "y": [10, 20, 30, 40],
+ "error_y": { "array": [0, 0, 0, 0], "color": "red" },
+ "hoverinfo": "text+x+name",
+ "hover": [],
+ "text": ["10 ± 0", "20 ± 0", "30 ± 0", "40 ± 0"],
+ "textposition": "inside",
+ "marker": { "color": "red" },
+ "insidetextfont": { "color": "#ffffff" },
+ "yaxis": "y"
+ }
+ ]
+ }
+}
diff --git a/viz-lib/src/visualizations/chart/plotly/fixtures/prepareData/bar/normalized.json b/viz-lib/src/visualizations/chart/plotly/fixtures/prepareData/bar/normalized.json
new file mode 100644
index 000000000..3ab34e8e8
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/plotly/fixtures/prepareData/bar/normalized.json
@@ -0,0 +1,83 @@
+{
+ "input": {
+ "options": {
+ "globalSeriesType": "column",
+ "numberFormat": "0,0[.]00000",
+ "percentFormat": "0[.]00%",
+ "textFormat": "",
+ "showDataLabels": true,
+ "direction": { "type": "counterclockwise" },
+ "xAxis": { "type": "-", "labels": { "enabled": true } },
+ "yAxis": [
+ { "type": "linear" },
+ { "type": "linear", "opposite": true }
+ ],
+ "series": { "stacking": "stack", "error_y": { "type": "data", "visible": true }, "percentValues": true },
+ "seriesOptions": {
+ "a": { "type": "column", "color": "red" },
+ "b": { "type": "column", "color": "blue" }
+ },
+ "columnMapping": {
+ "x": "x",
+ "y1": "y"
+ },
+ "missingValuesAsZero": true
+ },
+ "data": [
+ {
+ "name": "a",
+ "data": [
+ { "x": "x1", "y": 10, "yError": 0 },
+ { "x": "x2", "y": 20, "yError": 0 },
+ { "x": "x3", "y": 30, "yError": 0 },
+ { "x": "x4", "y": 40, "yError": 0 }
+ ]
+ },
+ {
+ "name": "b",
+ "data": [
+ { "x": "x1", "y": 40, "yError": 0 },
+ { "x": "x2", "y": 30, "yError": 0 },
+ { "x": "x3", "y": 20, "yError": 0 },
+ { "x": "x4", "y": 10, "yError": 0 }
+ ]
+ }
+ ]
+ },
+ "output": {
+ "series": [
+ {
+ "visible": true,
+ "offsetgroup": "0",
+ "type": "bar",
+ "name": "a",
+ "x": ["x1", "x2", "x3", "x4"],
+ "y": [20, 40, 60, 80],
+ "error_y": { "array": [0, 0, 0, 0], "color": "red" },
+ "hoverinfo": "text+x+name",
+ "hover": [],
+ "text": ["20% (10 ± 0)", "40% (20 ± 0)", "60% (30 ± 0)", "80% (40 ± 0)"],
+ "textposition": "inside",
+ "marker": { "color": "red" },
+ "insidetextfont": { "color": "#ffffff" },
+ "yaxis": "y"
+ },
+ {
+ "visible": true,
+ "offsetgroup": "1",
+ "type": "bar",
+ "name": "b",
+ "x": ["x1", "x2", "x3", "x4"],
+ "y": [80, 60, 40, 20],
+ "error_y": { "array": [0, 0, 0, 0], "color": "blue" },
+ "hoverinfo": "text+x+name",
+ "hover": [],
+ "text": ["80% (40 ± 0)", "60% (30 ± 0)", "40% (20 ± 0)", "20% (10 ± 0)"],
+ "textposition": "inside",
+ "marker": { "color": "blue" },
+ "insidetextfont": { "color": "#ffffff" },
+ "yaxis": "y"
+ }
+ ]
+ }
+}
diff --git a/viz-lib/src/visualizations/chart/plotly/fixtures/prepareData/bar/stacked.json b/viz-lib/src/visualizations/chart/plotly/fixtures/prepareData/bar/stacked.json
new file mode 100644
index 000000000..b17f637ff
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/plotly/fixtures/prepareData/bar/stacked.json
@@ -0,0 +1,83 @@
+{
+ "input": {
+ "options": {
+ "globalSeriesType": "column",
+ "numberFormat": "0,0[.]00000",
+ "percentFormat": "0[.]00%",
+ "textFormat": "",
+ "showDataLabels": true,
+ "direction": { "type": "counterclockwise" },
+ "xAxis": { "type": "-", "labels": { "enabled": true } },
+ "yAxis": [
+ { "type": "linear" },
+ { "type": "linear", "opposite": true }
+ ],
+ "series": { "stacking": "stack", "error_y": { "type": "data", "visible": true } },
+ "seriesOptions": {
+ "a": { "type": "column", "color": "red" },
+ "b": { "type": "column", "color": "blue" }
+ },
+ "columnMapping": {
+ "x": "x",
+ "y1": "y"
+ },
+ "missingValuesAsZero": true
+ },
+ "data": [
+ {
+ "name": "a",
+ "data": [
+ { "x": "x1", "y": 10, "yError": 0 },
+ { "x": "x2", "y": 20, "yError": 0 },
+ { "x": "x3", "y": 30, "yError": 0 },
+ { "x": "x4", "y": 40, "yError": 0 }
+ ]
+ },
+ {
+ "name": "b",
+ "data": [
+ { "x": "x1", "y": 1, "yError": 0 },
+ { "x": "x2", "y": 2, "yError": 0 },
+ { "x": "x3", "y": 3, "yError": 0 },
+ { "x": "x4", "y": 4, "yError": 0 }
+ ]
+ }
+ ]
+ },
+ "output": {
+ "series": [
+ {
+ "visible": true,
+ "offsetgroup": "0",
+ "type": "bar",
+ "name": "a",
+ "x": ["x1", "x2", "x3", "x4"],
+ "y": [10, 20, 30, 40],
+ "error_y": { "array": [0, 0, 0, 0], "color": "red" },
+ "hoverinfo": "text+x+name",
+ "hover": [],
+ "text": ["10 ± 0", "20 ± 0", "30 ± 0", "40 ± 0"],
+ "textposition": "inside",
+ "marker": { "color": "red" },
+ "insidetextfont": { "color": "#ffffff" },
+ "yaxis": "y"
+ },
+ {
+ "visible": true,
+ "offsetgroup": "1",
+ "type": "bar",
+ "name": "b",
+ "x": ["x1", "x2", "x3", "x4"],
+ "y": [1, 2, 3, 4],
+ "error_y": { "array": [0, 0, 0, 0], "color": "blue" },
+ "hoverinfo": "text+x+name",
+ "hover": [],
+ "text": ["1 ± 0", "2 ± 0", "3 ± 0", "4 ± 0"],
+ "textposition": "inside",
+ "marker": { "color": "blue" },
+ "insidetextfont": { "color": "#ffffff" },
+ "yaxis": "y"
+ }
+ ]
+ }
+}
diff --git a/viz-lib/src/visualizations/chart/plotly/fixtures/prepareData/box/default.json b/viz-lib/src/visualizations/chart/plotly/fixtures/prepareData/box/default.json
new file mode 100644
index 000000000..40096b747
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/plotly/fixtures/prepareData/box/default.json
@@ -0,0 +1,57 @@
+{
+ "input": {
+ "options": {
+ "globalSeriesType": "box",
+ "numberFormat": "0,0[.]00000",
+ "percentFormat": "0[.]00%",
+ "textFormat": "",
+ "showDataLabels": true,
+ "direction": { "type": "counterclockwise" },
+ "xAxis": { "type": "-", "labels": { "enabled": true } },
+ "yAxis": [
+ { "type": "linear" },
+ { "type": "linear", "opposite": true }
+ ],
+ "series": { "stacking": null, "error_y": { "type": "data", "visible": true } },
+ "seriesOptions": {
+ "a": { "type": "box", "color": "red" }
+ },
+ "columnMapping": {
+ "x": "x",
+ "y1": "y"
+ },
+ "missingValuesAsZero": true
+ },
+ "data": [
+ {
+ "name": "a",
+ "data": [
+ { "x": "x1", "y": 10, "yError": 0 },
+ { "x": "x2", "y": 20, "yError": 0 },
+ { "x": "x3", "y": 30, "yError": 0 },
+ { "x": "x4", "y": 40, "yError": 0 }
+ ]
+ }
+ ]
+ },
+ "output": {
+ "series": [
+ {
+ "visible": true,
+ "name": "a",
+ "type": "box",
+ "mode": "markers",
+ "boxpoints": "outliers",
+ "hoverinfo": false,
+ "marker": { "color": "red", "size": 3 },
+ "x": ["x1", "x2", "x3", "x4"],
+ "y": [10, 20, 30, 40],
+ "error_y": { "array": [0, 0, 0, 0], "color": "red" },
+ "hover": [],
+ "text": ["10 ± 0", "20 ± 0", "30 ± 0", "40 ± 0"],
+ "insidetextfont": { "color": "#ffffff" },
+ "yaxis": "y"
+ }
+ ]
+ }
+}
diff --git a/viz-lib/src/visualizations/chart/plotly/fixtures/prepareData/box/with-points.json b/viz-lib/src/visualizations/chart/plotly/fixtures/prepareData/box/with-points.json
new file mode 100644
index 000000000..5318e48c4
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/plotly/fixtures/prepareData/box/with-points.json
@@ -0,0 +1,60 @@
+{
+ "input": {
+ "options": {
+ "globalSeriesType": "box",
+ "numberFormat": "0,0[.]00000",
+ "percentFormat": "0[.]00%",
+ "textFormat": "",
+ "showDataLabels": true,
+ "direction": { "type": "counterclockwise" },
+ "xAxis": { "type": "-", "labels": { "enabled": true } },
+ "yAxis": [
+ { "type": "linear" },
+ { "type": "linear", "opposite": true }
+ ],
+ "series": { "stacking": null, "error_y": { "type": "data", "visible": true } },
+ "seriesOptions": {
+ "a": { "type": "box", "color": "red" }
+ },
+ "columnMapping": {
+ "x": "x",
+ "y1": "y"
+ },
+ "missingValuesAsZero": true,
+ "showpoints": true
+ },
+ "data": [
+ {
+ "name": "a",
+ "data": [
+ { "x": "x1", "y": 10, "yError": 0 },
+ { "x": "x2", "y": 20, "yError": 0 },
+ { "x": "x3", "y": 30, "yError": 0 },
+ { "x": "x4", "y": 40, "yError": 0 }
+ ]
+ }
+ ]
+ },
+ "output": {
+ "series": [
+ {
+ "visible": true,
+ "name": "a",
+ "type": "box",
+ "mode": "markers",
+ "boxpoints": "all",
+ "jitter": 0.3,
+ "pointpos": -1.8,
+ "hoverinfo": false,
+ "marker": { "color": "red", "size": 3 },
+ "x": ["x1", "x2", "x3", "x4"],
+ "y": [10, 20, 30, 40],
+ "error_y": { "array": [0, 0, 0, 0], "color": "red" },
+ "hover": [],
+ "text": ["10 ± 0", "20 ± 0", "30 ± 0", "40 ± 0"],
+ "insidetextfont": { "color": "#ffffff" },
+ "yaxis": "y"
+ }
+ ]
+ }
+}
diff --git a/viz-lib/src/visualizations/chart/plotly/fixtures/prepareData/bubble/default.json b/viz-lib/src/visualizations/chart/plotly/fixtures/prepareData/bubble/default.json
new file mode 100644
index 000000000..35b8aa15c
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/plotly/fixtures/prepareData/bubble/default.json
@@ -0,0 +1,55 @@
+{
+ "input": {
+ "options": {
+ "globalSeriesType": "bubble",
+ "numberFormat": "0,0[.]00000",
+ "percentFormat": "0[.]00%",
+ "textFormat": "",
+ "showDataLabels": true,
+ "direction": { "type": "counterclockwise" },
+ "xAxis": { "type": "-", "labels": { "enabled": true } },
+ "yAxis": [
+ { "type": "linear" },
+ { "type": "linear", "opposite": true }
+ ],
+ "series": { "stacking": null, "error_y": { "type": "data", "visible": true } },
+ "seriesOptions": {
+ "a": { "type": "bubble", "color": "red" }
+ },
+ "columnMapping": {
+ "x": "x",
+ "y1": "y"
+ },
+ "missingValuesAsZero": true
+ },
+ "data": [
+ {
+ "name": "a",
+ "data": [
+ { "x": "x1", "y": 10, "yError": 0, "size": 51 },
+ { "x": "x2", "y": 20, "yError": 0, "size": 52 },
+ { "x": "x3", "y": 30, "yError": 0, "size": 53 },
+ { "x": "x4", "y": 40, "yError": 0, "size": 54 }
+ ]
+ }
+ ]
+ },
+ "output": {
+ "series": [
+ {
+ "visible": true,
+ "name": "a",
+ "mode": "markers",
+ "marker": { "color": "red", "size": [51, 52, 53, 54], "sizemode": "diameter" },
+ "x": ["x1", "x2", "x3", "x4"],
+ "y": [10, 20, 30, 40],
+ "error_y": { "array": [0, 0, 0, 0], "color": "red" },
+ "hoverinfo": "text+x+name",
+ "hover": [],
+ "text": ["10 ± 0: 51", "20 ± 0: 52", "30 ± 0: 53", "40 ± 0: 54"],
+ "insidetextfont": { "color": "#ffffff" },
+ "yaxis": "y"
+ }
+ ]
+ }
+}
diff --git a/viz-lib/src/visualizations/chart/plotly/fixtures/prepareData/heatmap/default.json b/viz-lib/src/visualizations/chart/plotly/fixtures/prepareData/heatmap/default.json
new file mode 100644
index 000000000..4006b3d12
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/plotly/fixtures/prepareData/heatmap/default.json
@@ -0,0 +1,33 @@
+{
+ "input": {
+ "options": {
+ "globalSeriesType": "heatmap",
+ "colorScheme": "Bluered",
+ "seriesOptions": {},
+ "showDataLabels": false
+ },
+ "data": [
+ {
+ "name": "a",
+ "data": [
+ { "x": 12, "y": 21, "zVal": 3 },
+ { "x": 11, "y": 22, "zVal": 2 },
+ { "x": 11, "y": 21, "zVal": 1 },
+ { "x": 12, "y": 22, "zVal": 4 }
+ ]
+ }
+ ]
+ },
+ "output": {
+ "series": [
+ {
+ "x": [12, 11],
+ "y": [21, 22],
+ "z": [[3, 1], [4, 2]],
+ "type": "heatmap",
+ "name": "",
+ "colorscale": "Bluered"
+ }
+ ]
+ }
+}
diff --git a/viz-lib/src/visualizations/chart/plotly/fixtures/prepareData/heatmap/reversed.json b/viz-lib/src/visualizations/chart/plotly/fixtures/prepareData/heatmap/reversed.json
new file mode 100644
index 000000000..ff1e16e0f
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/plotly/fixtures/prepareData/heatmap/reversed.json
@@ -0,0 +1,35 @@
+{
+ "input": {
+ "options": {
+ "globalSeriesType": "heatmap",
+ "colorScheme": "Bluered",
+ "seriesOptions": {},
+ "showDataLabels": false,
+ "reverseX": true,
+ "reverseY": true
+ },
+ "data": [
+ {
+ "name": "a",
+ "data": [
+ { "x": 12, "y": 21, "zVal": 3 },
+ { "x": 11, "y": 22, "zVal": 2 },
+ { "x": 11, "y": 21, "zVal": 1 },
+ { "x": 12, "y": 22, "zVal": 4 }
+ ]
+ }
+ ]
+ },
+ "output": {
+ "series": [
+ {
+ "x": [11, 12],
+ "y": [22, 21],
+ "z": [[2, 4], [1, 3]],
+ "type": "heatmap",
+ "name": "",
+ "colorscale": "Bluered"
+ }
+ ]
+ }
+}
diff --git a/viz-lib/src/visualizations/chart/plotly/fixtures/prepareData/heatmap/sorted-reversed.json b/viz-lib/src/visualizations/chart/plotly/fixtures/prepareData/heatmap/sorted-reversed.json
new file mode 100644
index 000000000..ac8d69f69
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/plotly/fixtures/prepareData/heatmap/sorted-reversed.json
@@ -0,0 +1,37 @@
+{
+ "input": {
+ "options": {
+ "globalSeriesType": "heatmap",
+ "colorScheme": "Bluered",
+ "seriesOptions": {},
+ "showDataLabels": false,
+ "sortX": true,
+ "sortY": true,
+ "reverseX": true,
+ "reverseY": true
+ },
+ "data": [
+ {
+ "name": "a",
+ "data": [
+ { "x": 12, "y": 21, "zVal": 3 },
+ { "x": 11, "y": 22, "zVal": 2 },
+ { "x": 11, "y": 21, "zVal": 1 },
+ { "x": 12, "y": 22, "zVal": 4 }
+ ]
+ }
+ ]
+ },
+ "output": {
+ "series": [
+ {
+ "x": [12, 11],
+ "y": [22, 21],
+ "z": [[4, 2], [3, 1]],
+ "type": "heatmap",
+ "name": "",
+ "colorscale": "Bluered"
+ }
+ ]
+ }
+}
diff --git a/viz-lib/src/visualizations/chart/plotly/fixtures/prepareData/heatmap/sorted.json b/viz-lib/src/visualizations/chart/plotly/fixtures/prepareData/heatmap/sorted.json
new file mode 100644
index 000000000..3073a3291
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/plotly/fixtures/prepareData/heatmap/sorted.json
@@ -0,0 +1,35 @@
+{
+ "input": {
+ "options": {
+ "globalSeriesType": "heatmap",
+ "colorScheme": "Bluered",
+ "seriesOptions": {},
+ "showDataLabels": false,
+ "sortX": true,
+ "sortY": true
+ },
+ "data": [
+ {
+ "name": "a",
+ "data": [
+ { "x": 12, "y": 21, "zVal": 3 },
+ { "x": 11, "y": 22, "zVal": 2 },
+ { "x": 11, "y": 21, "zVal": 1 },
+ { "x": 12, "y": 22, "zVal": 4 }
+ ]
+ }
+ ]
+ },
+ "output": {
+ "series": [
+ {
+ "x": [11, 12],
+ "y": [21, 22],
+ "z": [[1, 3], [2, 4]],
+ "type": "heatmap",
+ "name": "",
+ "colorscale": "Bluered"
+ }
+ ]
+ }
+}
diff --git a/viz-lib/src/visualizations/chart/plotly/fixtures/prepareData/heatmap/with-labels.json b/viz-lib/src/visualizations/chart/plotly/fixtures/prepareData/heatmap/with-labels.json
new file mode 100644
index 000000000..87a258354
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/plotly/fixtures/prepareData/heatmap/with-labels.json
@@ -0,0 +1,44 @@
+{
+ "input": {
+ "options": {
+ "globalSeriesType": "heatmap",
+ "colorScheme": "Bluered",
+ "seriesOptions": {},
+ "showDataLabels": true
+ },
+ "data": [
+ {
+ "name": "a",
+ "data": [
+ { "x": 12, "y": 21, "zVal": 3 },
+ { "x": 11, "y": 22, "zVal": 2 },
+ { "x": 11, "y": 21, "zVal": 1 },
+ { "x": 12, "y": 22, "zVal": 4 }
+ ]
+ }
+ ]
+ },
+ "output": {
+ "series": [
+ {
+ "x": [12, 11],
+ "y": [21, 22],
+ "z": [[3, 1], [4, 2]],
+ "type": "heatmap",
+ "name": "",
+ "colorscale": "Bluered"
+ },
+ {
+ "x": [12, 11, 12, 11],
+ "y": [21, 21, 22, 22],
+ "mode": "text",
+ "hoverinfo": "skip",
+ "showlegend": false,
+ "text": ["3", "1", "4", "2"],
+ "textfont": {
+ "color": ["black", "black", "black", "black"]
+ }
+ }
+ ]
+ }
+}
diff --git a/viz-lib/src/visualizations/chart/plotly/fixtures/prepareData/line-area/default.json b/viz-lib/src/visualizations/chart/plotly/fixtures/prepareData/line-area/default.json
new file mode 100644
index 000000000..8e12fe101
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/plotly/fixtures/prepareData/line-area/default.json
@@ -0,0 +1,55 @@
+{
+ "input": {
+ "options": {
+ "globalSeriesType": "line",
+ "numberFormat": "0,0[.]00000",
+ "percentFormat": "0[.]00%",
+ "textFormat": "",
+ "showDataLabels": true,
+ "direction": { "type": "counterclockwise" },
+ "xAxis": { "type": "-", "labels": { "enabled": true } },
+ "yAxis": [
+ { "type": "linear" },
+ { "type": "linear", "opposite": true }
+ ],
+ "series": { "stacking": null, "error_y": { "type": "data", "visible": true } },
+ "seriesOptions": {
+ "a": { "type": "line", "color": "red" }
+ },
+ "columnMapping": {
+ "x": "x",
+ "y1": "y"
+ },
+ "missingValuesAsZero": true
+ },
+ "data": [
+ {
+ "name": "a",
+ "data": [
+ { "x": "x1", "y": 10, "yError": 0 },
+ { "x": "x2", "y": 20, "yError": 0 },
+ { "x": "x3", "y": 30, "yError": 0 },
+ { "x": "x4", "y": 40, "yError": 0 }
+ ]
+ }
+ ]
+ },
+ "output": {
+ "series": [
+ {
+ "visible": true,
+ "name": "a",
+ "mode": "lines+text",
+ "x": ["x1", "x2", "x3", "x4"],
+ "y": [10, 20, 30, 40],
+ "error_y": { "array": [0, 0, 0, 0], "color": "red" },
+ "hoverinfo": "text+x+name",
+ "hover": [],
+ "text": ["10 ± 0", "20 ± 0", "30 ± 0", "40 ± 0"],
+ "marker": { "color": "red" },
+ "insidetextfont": { "color": "#ffffff" },
+ "yaxis": "y"
+ }
+ ]
+ }
+}
diff --git a/viz-lib/src/visualizations/chart/plotly/fixtures/prepareData/line-area/keep-missing-values.json b/viz-lib/src/visualizations/chart/plotly/fixtures/prepareData/line-area/keep-missing-values.json
new file mode 100644
index 000000000..be49bec3d
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/plotly/fixtures/prepareData/line-area/keep-missing-values.json
@@ -0,0 +1,77 @@
+{
+ "input": {
+ "options": {
+ "globalSeriesType": "line",
+ "numberFormat": "0,0[.]00000",
+ "percentFormat": "0[.]00%",
+ "textFormat": "",
+ "showDataLabels": true,
+ "direction": { "type": "counterclockwise" },
+ "xAxis": { "type": "-", "labels": { "enabled": true } },
+ "yAxis": [
+ { "type": "linear" },
+ { "type": "linear", "opposite": true }
+ ],
+ "series": { "stacking": "stack", "error_y": { "type": "data", "visible": true } },
+ "seriesOptions": {
+ "a": { "type": "line", "color": "red" },
+ "b": { "type": "line", "color": "blue" }
+ },
+ "columnMapping": {
+ "x": "x",
+ "y1": "y"
+ },
+ "missingValuesAsZero": false
+ },
+ "data": [
+ {
+ "name": "a",
+ "data": [
+ { "x": "x1", "y": 10, "yError": 0 },
+ { "x": "x2", "y": 20, "yError": 0 },
+ { "x": "x3", "y": 30, "yError": 0 },
+ { "x": "x4", "y": 40, "yError": 0 }
+ ]
+ },
+ {
+ "name": "b",
+ "data": [
+ { "x": "x2", "y": 2, "yError": 0 },
+ { "x": "x4", "y": 4, "yError": 0 }
+ ]
+ }
+ ]
+ },
+ "output": {
+ "series": [
+ {
+ "visible": true,
+ "name": "a",
+ "mode": "lines+text",
+ "x": ["x1", "x2", "x3", "x4"],
+ "y": [10, 20, 30, 40],
+ "error_y": { "array": [0, 0, 0, 0], "color": "red" },
+ "hoverinfo": "text+x+name",
+ "hover": [],
+ "text": ["10 ± 0", "20 ± 0", "30 ± 0", "40 ± 0"],
+ "marker": { "color": "red" },
+ "insidetextfont": { "color": "#ffffff" },
+ "yaxis": "y"
+ },
+ {
+ "visible": true,
+ "name": "b",
+ "mode": "lines+text",
+ "x": ["x1", "x2", "x3", "x4"],
+ "y": [null, 22, null, 44],
+ "error_y": { "array": [null, 0, null, 0], "color": "blue" },
+ "hoverinfo": "text+x+name",
+ "hover": [],
+ "text": ["", "2 ± 0", "", "4 ± 0"],
+ "marker": { "color": "blue" },
+ "insidetextfont": { "color": "#ffffff" },
+ "yaxis": "y"
+ }
+ ]
+ }
+}
diff --git a/viz-lib/src/visualizations/chart/plotly/fixtures/prepareData/line-area/missing-values-0.json b/viz-lib/src/visualizations/chart/plotly/fixtures/prepareData/line-area/missing-values-0.json
new file mode 100644
index 000000000..e7d4a449a
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/plotly/fixtures/prepareData/line-area/missing-values-0.json
@@ -0,0 +1,77 @@
+{
+ "input": {
+ "options": {
+ "globalSeriesType": "line",
+ "numberFormat": "0,0[.]00000",
+ "percentFormat": "0[.]00%",
+ "textFormat": "",
+ "showDataLabels": true,
+ "direction": { "type": "counterclockwise" },
+ "xAxis": { "type": "-", "labels": { "enabled": true } },
+ "yAxis": [
+ { "type": "linear" },
+ { "type": "linear", "opposite": true }
+ ],
+ "series": { "stacking": "stack", "error_y": { "type": "data", "visible": true } },
+ "seriesOptions": {
+ "a": { "type": "line", "color": "red" },
+ "b": { "type": "line", "color": "blue" }
+ },
+ "columnMapping": {
+ "x": "x",
+ "y1": "y"
+ },
+ "missingValuesAsZero": true
+ },
+ "data": [
+ {
+ "name": "a",
+ "data": [
+ { "x": "x1", "y": 10, "yError": 0 },
+ { "x": "x2", "y": 20, "yError": 0 },
+ { "x": "x3", "y": 30, "yError": 0 },
+ { "x": "x4", "y": 40, "yError": 0 }
+ ]
+ },
+ {
+ "name": "b",
+ "data": [
+ { "x": "x2", "y": 2, "yError": 0 },
+ { "x": "x4", "y": 4, "yError": 0 }
+ ]
+ }
+ ]
+ },
+ "output": {
+ "series": [
+ {
+ "visible": true,
+ "name": "a",
+ "mode": "lines+text",
+ "x": ["x1", "x2", "x3", "x4"],
+ "y": [10, 20, 30, 40],
+ "error_y": { "array": [0, 0, 0, 0], "color": "red" },
+ "hoverinfo": "text+x+name",
+ "hover": [],
+ "text": ["10 ± 0", "20 ± 0", "30 ± 0", "40 ± 0"],
+ "marker": { "color": "red" },
+ "insidetextfont": { "color": "#ffffff" },
+ "yaxis": "y"
+ },
+ {
+ "visible": true,
+ "name": "b",
+ "mode": "lines+text",
+ "x": ["x1", "x2", "x3", "x4"],
+ "y": [10, 22, 30, 44],
+ "error_y": { "array": [null, 0, null, 0], "color": "blue" },
+ "hoverinfo": "text+x+name",
+ "hover": [],
+ "text": ["0", "2 ± 0", "0", "4 ± 0"],
+ "marker": { "color": "blue" },
+ "insidetextfont": { "color": "#ffffff" },
+ "yaxis": "y"
+ }
+ ]
+ }
+}
diff --git a/viz-lib/src/visualizations/chart/plotly/fixtures/prepareData/line-area/normalized-stacked.json b/viz-lib/src/visualizations/chart/plotly/fixtures/prepareData/line-area/normalized-stacked.json
new file mode 100644
index 000000000..17776da78
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/plotly/fixtures/prepareData/line-area/normalized-stacked.json
@@ -0,0 +1,79 @@
+{
+ "input": {
+ "options": {
+ "globalSeriesType": "line",
+ "numberFormat": "0,0[.]00000",
+ "percentFormat": "0[.]00%",
+ "textFormat": "",
+ "showDataLabels": true,
+ "direction": { "type": "counterclockwise" },
+ "xAxis": { "type": "-", "labels": { "enabled": true } },
+ "yAxis": [
+ { "type": "linear" },
+ { "type": "linear", "opposite": true }
+ ],
+ "series": { "stacking": "stack", "error_y": { "type": "data", "visible": true }, "percentValues": true },
+ "seriesOptions": {
+ "a": { "type": "line", "color": "red" },
+ "b": { "type": "line", "color": "blue" }
+ },
+ "columnMapping": {
+ "x": "x",
+ "y1": "y"
+ },
+ "missingValuesAsZero": true
+ },
+ "data": [
+ {
+ "name": "a",
+ "data": [
+ { "x": "x1", "y": 10, "yError": 0 },
+ { "x": "x2", "y": 20, "yError": 0 },
+ { "x": "x3", "y": 30, "yError": 0 },
+ { "x": "x4", "y": 40, "yError": 0 }
+ ]
+ },
+ {
+ "name": "b",
+ "data": [
+ { "x": "x1", "y": 40, "yError": 0 },
+ { "x": "x2", "y": 30, "yError": 0 },
+ { "x": "x3", "y": 20, "yError": 0 },
+ { "x": "x4", "y": 10, "yError": 0 }
+ ]
+ }
+ ]
+ },
+ "output": {
+ "series": [
+ {
+ "visible": true,
+ "name": "a",
+ "mode": "lines+text",
+ "x": ["x1", "x2", "x3", "x4"],
+ "y": [20, 40, 60, 80],
+ "error_y": { "array": [0, 0, 0, 0], "color": "red" },
+ "hoverinfo": "text+x+name",
+ "hover": [],
+ "text": ["20% (10 ± 0)", "40% (20 ± 0)", "60% (30 ± 0)", "80% (40 ± 0)"],
+ "marker": { "color": "red" },
+ "insidetextfont": { "color": "#ffffff" },
+ "yaxis": "y"
+ },
+ {
+ "visible": true,
+ "name": "b",
+ "mode": "lines+text",
+ "x": ["x1", "x2", "x3", "x4"],
+ "y": [100, 100, 100, 100],
+ "error_y": { "array": [0, 0, 0, 0], "color": "blue" },
+ "hoverinfo": "text+x+name",
+ "hover": [],
+ "text": ["80% (40 ± 0)", "60% (30 ± 0)", "40% (20 ± 0)", "20% (10 ± 0)"],
+ "marker": { "color": "blue" },
+ "insidetextfont": { "color": "#ffffff" },
+ "yaxis": "y"
+ }
+ ]
+ }
+}
diff --git a/viz-lib/src/visualizations/chart/plotly/fixtures/prepareData/line-area/normalized.json b/viz-lib/src/visualizations/chart/plotly/fixtures/prepareData/line-area/normalized.json
new file mode 100644
index 000000000..40e8b03c2
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/plotly/fixtures/prepareData/line-area/normalized.json
@@ -0,0 +1,79 @@
+{
+ "input": {
+ "options": {
+ "globalSeriesType": "line",
+ "numberFormat": "0,0[.]00000",
+ "percentFormat": "0[.]00%",
+ "textFormat": "",
+ "showDataLabels": true,
+ "direction": { "type": "counterclockwise" },
+ "xAxis": { "type": "-", "labels": { "enabled": true } },
+ "yAxis": [
+ { "type": "linear" },
+ { "type": "linear", "opposite": true }
+ ],
+ "series": { "stacking": null, "error_y": { "type": "data", "visible": true }, "percentValues": true },
+ "seriesOptions": {
+ "a": { "type": "line", "color": "red" },
+ "b": { "type": "line", "color": "blue" }
+ },
+ "columnMapping": {
+ "x": "x",
+ "y1": "y"
+ },
+ "missingValuesAsZero": true
+ },
+ "data": [
+ {
+ "name": "a",
+ "data": [
+ { "x": "x1", "y": 10, "yError": 0 },
+ { "x": "x2", "y": 20, "yError": 0 },
+ { "x": "x3", "y": 30, "yError": 0 },
+ { "x": "x4", "y": 40, "yError": 0 }
+ ]
+ },
+ {
+ "name": "b",
+ "data": [
+ { "x": "x1", "y": 40, "yError": 0 },
+ { "x": "x2", "y": 30, "yError": 0 },
+ { "x": "x3", "y": 20, "yError": 0 },
+ { "x": "x4", "y": 10, "yError": 0 }
+ ]
+ }
+ ]
+ },
+ "output": {
+ "series": [
+ {
+ "visible": true,
+ "name": "a",
+ "mode": "lines+text",
+ "x": ["x1", "x2", "x3", "x4"],
+ "y": [20, 40, 60, 80],
+ "error_y": { "array": [0, 0, 0, 0], "color": "red" },
+ "hoverinfo": "text+x+name",
+ "hover": [],
+ "text": ["20% (10 ± 0)", "40% (20 ± 0)", "60% (30 ± 0)", "80% (40 ± 0)"],
+ "marker": { "color": "red" },
+ "insidetextfont": { "color": "#ffffff" },
+ "yaxis": "y"
+ },
+ {
+ "visible": true,
+ "name": "b",
+ "mode": "lines+text",
+ "x": ["x1", "x2", "x3", "x4"],
+ "y": [80, 60, 40, 20],
+ "error_y": { "array": [0, 0, 0, 0], "color": "blue" },
+ "hoverinfo": "text+x+name",
+ "hover": [],
+ "text": ["80% (40 ± 0)", "60% (30 ± 0)", "40% (20 ± 0)", "20% (10 ± 0)"],
+ "marker": { "color": "blue" },
+ "insidetextfont": { "color": "#ffffff" },
+ "yaxis": "y"
+ }
+ ]
+ }
+}
diff --git a/viz-lib/src/visualizations/chart/plotly/fixtures/prepareData/line-area/stacked.json b/viz-lib/src/visualizations/chart/plotly/fixtures/prepareData/line-area/stacked.json
new file mode 100644
index 000000000..d6c2027e6
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/plotly/fixtures/prepareData/line-area/stacked.json
@@ -0,0 +1,79 @@
+{
+ "input": {
+ "options": {
+ "globalSeriesType": "line",
+ "numberFormat": "0,0[.]00000",
+ "percentFormat": "0[.]00%",
+ "textFormat": "",
+ "showDataLabels": true,
+ "direction": { "type": "counterclockwise" },
+ "xAxis": { "type": "-", "labels": { "enabled": true } },
+ "yAxis": [
+ { "type": "linear" },
+ { "type": "linear", "opposite": true }
+ ],
+ "series": { "stacking": "stack", "error_y": { "type": "data", "visible": true } },
+ "seriesOptions": {
+ "a": { "type": "line", "color": "red" },
+ "b": { "type": "line", "color": "blue" }
+ },
+ "columnMapping": {
+ "x": "x",
+ "y1": "y"
+ },
+ "missingValuesAsZero": true
+ },
+ "data": [
+ {
+ "name": "a",
+ "data": [
+ { "x": "x1", "y": 10, "yError": 0 },
+ { "x": "x2", "y": 20, "yError": 0 },
+ { "x": "x3", "y": 30, "yError": 0 },
+ { "x": "x4", "y": 40, "yError": 0 }
+ ]
+ },
+ {
+ "name": "b",
+ "data": [
+ { "x": "x1", "y": 1, "yError": 0 },
+ { "x": "x2", "y": 2, "yError": 0 },
+ { "x": "x3", "y": 3, "yError": 0 },
+ { "x": "x4", "y": 4, "yError": 0 }
+ ]
+ }
+ ]
+ },
+ "output": {
+ "series": [
+ {
+ "visible": true,
+ "name": "a",
+ "mode": "lines+text",
+ "x": ["x1", "x2", "x3", "x4"],
+ "y": [10, 20, 30, 40],
+ "error_y": { "array": [0, 0, 0, 0], "color": "red" },
+ "hoverinfo": "text+x+name",
+ "hover": [],
+ "text": ["10 ± 0", "20 ± 0", "30 ± 0", "40 ± 0"],
+ "marker": { "color": "red" },
+ "insidetextfont": { "color": "#ffffff" },
+ "yaxis": "y"
+ },
+ {
+ "visible": true,
+ "name": "b",
+ "mode": "lines+text",
+ "x": ["x1", "x2", "x3", "x4"],
+ "y": [11, 22, 33, 44],
+ "error_y": { "array": [0, 0, 0, 0], "color": "blue" },
+ "hoverinfo": "text+x+name",
+ "hover": [],
+ "text": ["1 ± 0", "2 ± 0", "3 ± 0", "4 ± 0"],
+ "marker": { "color": "blue" },
+ "insidetextfont": { "color": "#ffffff" },
+ "yaxis": "y"
+ }
+ ]
+ }
+}
diff --git a/viz-lib/src/visualizations/chart/plotly/fixtures/prepareData/pie/custom-tooltip.json b/viz-lib/src/visualizations/chart/plotly/fixtures/prepareData/pie/custom-tooltip.json
new file mode 100644
index 000000000..b63d0b61b
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/plotly/fixtures/prepareData/pie/custom-tooltip.json
@@ -0,0 +1,54 @@
+{
+ "input": {
+ "options": {
+ "globalSeriesType": "pie",
+ "seriesOptions": {},
+ "numberFormat": "0,0[.]00000",
+ "percentFormat": "0[.]00%",
+ "textFormat": "{{ @@name }}: {{ @@yPercent }} ({{ @@y }})",
+ "showDataLabels": true,
+ "direction": { "type": "counterclockwise" },
+ "xAxis": { "type": "-", "labels": { "enabled": true } },
+ "yAxis": [{ "type": "linear" }, { "type": "linear", "opposite": true }],
+ "series": { "stacking": null, "error_y": { "type": "data", "visible": true } },
+ "columnMapping": {
+ "x": "x",
+ "y": "y"
+ }
+ },
+ "data": [
+ {
+ "name": "a",
+ "data": [
+ { "x": "a1", "y": 10 },
+ { "x": "a2", "y": 60 },
+ { "x": "a3", "y": 100 },
+ { "x": "a4", "y": 30 }
+ ]
+ }
+ ]
+ },
+ "output": {
+ "series": [
+ {
+ "visible": true,
+ "values": [10, 60, 100, 30],
+ "labels": ["a1", "a2", "a3", "a4"],
+ "type": "pie",
+ "hole": 0.4,
+ "marker": {
+ "colors": ["#356AFF", "#E92828", "#3BD973", "#604FE9"]
+ },
+ "hoverinfo": "text+label",
+ "hover": [],
+ "text": ["a: 5% (10)", "a: 30% (60)", "a: 50% (100)", "a: 15% (30)"],
+ "textinfo": "percent",
+ "textposition": "inside",
+ "textfont": { "color": ["#ffffff", "#ffffff", "#333333", "#ffffff"] },
+ "name": "a",
+ "direction": "counterclockwise",
+ "domain": { "x": [0, 0.98], "y": [0, 0.9] }
+ }
+ ]
+ }
+}
diff --git a/viz-lib/src/visualizations/chart/plotly/fixtures/prepareData/pie/default.json b/viz-lib/src/visualizations/chart/plotly/fixtures/prepareData/pie/default.json
new file mode 100644
index 000000000..17db9a53c
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/plotly/fixtures/prepareData/pie/default.json
@@ -0,0 +1,54 @@
+{
+ "input": {
+ "options": {
+ "globalSeriesType": "pie",
+ "seriesOptions": {},
+ "numberFormat": "0,0[.]00000",
+ "percentFormat": "0[.]00%",
+ "textFormat": "",
+ "showDataLabels": true,
+ "direction": { "type": "counterclockwise" },
+ "xAxis": { "type": "-", "labels": { "enabled": true } },
+ "yAxis": [{ "type": "linear" }, { "type": "linear", "opposite": true }],
+ "series": { "stacking": null, "error_y": { "type": "data", "visible": true } },
+ "columnMapping": {
+ "x": "x",
+ "y": "y"
+ }
+ },
+ "data": [
+ {
+ "name": "a",
+ "data": [
+ { "x": "a1", "y": 10 },
+ { "x": "a2", "y": 60 },
+ { "x": "a3", "y": 100 },
+ { "x": "a4", "y": 30 }
+ ]
+ }
+ ]
+ },
+ "output": {
+ "series": [
+ {
+ "visible": true,
+ "values": [10, 60, 100, 30],
+ "labels": ["a1", "a2", "a3", "a4"],
+ "type": "pie",
+ "hole": 0.4,
+ "marker": {
+ "colors": ["#356AFF", "#E92828", "#3BD973", "#604FE9"]
+ },
+ "hoverinfo": "text+label",
+ "hover": [],
+ "text": ["5% (10)", "30% (60)", "50% (100)", "15% (30)"],
+ "textinfo": "percent",
+ "textposition": "inside",
+ "textfont": { "color": ["#ffffff", "#ffffff", "#333333", "#ffffff"] },
+ "name": "a",
+ "direction": "counterclockwise",
+ "domain": { "x": [0, 0.98], "y": [0, 0.9] }
+ }
+ ]
+ }
+}
diff --git a/viz-lib/src/visualizations/chart/plotly/fixtures/prepareData/pie/without-labels.json b/viz-lib/src/visualizations/chart/plotly/fixtures/prepareData/pie/without-labels.json
new file mode 100644
index 000000000..7bc2b208f
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/plotly/fixtures/prepareData/pie/without-labels.json
@@ -0,0 +1,54 @@
+{
+ "input": {
+ "options": {
+ "globalSeriesType": "pie",
+ "seriesOptions": {},
+ "numberFormat": "0,0[.]00000",
+ "percentFormat": "0[.]00%",
+ "textFormat": "",
+ "showDataLabels": false,
+ "direction": { "type": "counterclockwise" },
+ "xAxis": { "type": "-", "labels": { "enabled": true } },
+ "yAxis": [{ "type": "linear" }, { "type": "linear", "opposite": true }],
+ "series": { "stacking": null, "error_y": { "type": "data", "visible": true } },
+ "columnMapping": {
+ "x": "x",
+ "y": "y"
+ }
+ },
+ "data": [
+ {
+ "name": "a",
+ "data": [
+ { "x": "a1", "y": 10 },
+ { "x": "a2", "y": 60 },
+ { "x": "a3", "y": 100 },
+ { "x": "a4", "y": 30 }
+ ]
+ }
+ ]
+ },
+ "output": {
+ "series": [
+ {
+ "visible": true,
+ "values": [10, 60, 100, 30],
+ "labels": ["a1", "a2", "a3", "a4"],
+ "type": "pie",
+ "hole": 0.4,
+ "marker": {
+ "colors": ["#356AFF", "#E92828", "#3BD973", "#604FE9"]
+ },
+ "hoverinfo": "text+label",
+ "hover": [],
+ "text": ["5% (10)", "30% (60)", "50% (100)", "15% (30)"],
+ "textinfo": "none",
+ "textposition": "inside",
+ "textfont": { "color": ["#ffffff", "#ffffff", "#333333", "#ffffff"] },
+ "name": "a",
+ "direction": "counterclockwise",
+ "domain": { "x": [0, 0.98], "y": [0, 0.9] }
+ }
+ ]
+ }
+}
diff --git a/viz-lib/src/visualizations/chart/plotly/fixtures/prepareData/pie/without-x.json b/viz-lib/src/visualizations/chart/plotly/fixtures/prepareData/pie/without-x.json
new file mode 100644
index 000000000..2b09b10e1
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/plotly/fixtures/prepareData/pie/without-x.json
@@ -0,0 +1,50 @@
+{
+ "input": {
+ "options": {
+ "globalSeriesType": "pie",
+ "seriesOptions": {},
+ "numberFormat": "0,0[.]00000",
+ "percentFormat": "0[.]00%",
+ "textFormat": "",
+ "showDataLabels": true,
+ "direction": { "type": "counterclockwise" },
+ "xAxis": { "type": "-", "labels": { "enabled": true } },
+ "yAxis": [{ "type": "linear" }, { "type": "linear", "opposite": true }],
+ "series": { "stacking": null, "error_y": { "type": "data", "visible": true } }
+ },
+ "data": [
+ {
+ "name": "a",
+ "data": [
+ { "x": "a1", "y": 10 },
+ { "x": "a2", "y": 60 },
+ { "x": "a3", "y": 100 },
+ { "x": "a4", "y": 30 }
+ ]
+ }
+ ]
+ },
+ "output": {
+ "series": [
+ {
+ "visible": true,
+ "values": [10, 60, 100, 30],
+ "labels": ["Slice 0", "Slice 0", "Slice 0", "Slice 0"],
+ "type": "pie",
+ "hole": 0.4,
+ "marker": {
+ "colors": ["#356AFF", "#E92828", "#3BD973", "#604FE9"]
+ },
+ "hoverinfo": "text+label",
+ "hover": [],
+ "text": ["15% (30)", "15% (30)", "15% (30)", "15% (30)"],
+ "textinfo": "percent",
+ "textposition": "inside",
+ "textfont": { "color": ["#ffffff", "#ffffff", "#333333", "#ffffff"] },
+ "name": "a",
+ "direction": "counterclockwise",
+ "domain": { "x": [0, 0.98], "y": [0, 0.9] }
+ }
+ ]
+ }
+}
diff --git a/viz-lib/src/visualizations/chart/plotly/fixtures/prepareData/scatter/default.json b/viz-lib/src/visualizations/chart/plotly/fixtures/prepareData/scatter/default.json
new file mode 100644
index 000000000..3feb04d82
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/plotly/fixtures/prepareData/scatter/default.json
@@ -0,0 +1,56 @@
+{
+ "input": {
+ "options": {
+ "globalSeriesType": "scatter",
+ "numberFormat": "0,0[.]00000",
+ "percentFormat": "0[.]00%",
+ "textFormat": "",
+ "showDataLabels": true,
+ "direction": { "type": "counterclockwise" },
+ "xAxis": { "type": "-", "labels": { "enabled": true } },
+ "yAxis": [
+ { "type": "linear" },
+ { "type": "linear", "opposite": true }
+ ],
+ "series": { "stacking": null, "error_y": { "type": "data", "visible": true } },
+ "seriesOptions": {
+ "a": { "type": "scatter", "color": "red" }
+ },
+ "columnMapping": {
+ "x": "x",
+ "y1": "y"
+ },
+ "missingValuesAsZero": true
+ },
+ "data": [
+ {
+ "name": "a",
+ "data": [
+ { "x": "x1", "y": 10, "yError": 0 },
+ { "x": "x2", "y": 20, "yError": 0 },
+ { "x": "x3", "y": 30, "yError": 0 },
+ { "x": "x4", "y": 40, "yError": 0 }
+ ]
+ }
+ ]
+ },
+ "output": {
+ "series": [
+ {
+ "visible": true,
+ "name": "a",
+ "type": "scatter",
+ "mode": "markers+text",
+ "x": ["x1", "x2", "x3", "x4"],
+ "y": [10, 20, 30, 40],
+ "error_y": { "array": [0, 0, 0, 0], "color": "red" },
+ "hoverinfo": "text+x+name",
+ "hover": [],
+ "text": ["10 ± 0", "20 ± 0", "30 ± 0", "40 ± 0"],
+ "marker": { "color": "red" },
+ "insidetextfont": { "color": "#ffffff" },
+ "yaxis": "y"
+ }
+ ]
+ }
+}
diff --git a/viz-lib/src/visualizations/chart/plotly/fixtures/prepareData/scatter/without-labels.json b/viz-lib/src/visualizations/chart/plotly/fixtures/prepareData/scatter/without-labels.json
new file mode 100644
index 000000000..def53bbd8
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/plotly/fixtures/prepareData/scatter/without-labels.json
@@ -0,0 +1,56 @@
+{
+ "input": {
+ "options": {
+ "globalSeriesType": "scatter",
+ "numberFormat": "0,0[.]00000",
+ "percentFormat": "0[.]00%",
+ "textFormat": "",
+ "showDataLabels": false,
+ "direction": { "type": "counterclockwise" },
+ "xAxis": { "type": "-", "labels": { "enabled": true } },
+ "yAxis": [
+ { "type": "linear" },
+ { "type": "linear", "opposite": true }
+ ],
+ "series": { "stacking": null, "error_y": { "type": "data", "visible": true } },
+ "seriesOptions": {
+ "a": { "type": "scatter", "color": "red" }
+ },
+ "columnMapping": {
+ "x": "x",
+ "y1": "y"
+ },
+ "missingValuesAsZero": true
+ },
+ "data": [
+ {
+ "name": "a",
+ "data": [
+ { "x": "x1", "y": 10, "yError": 0 },
+ { "x": "x2", "y": 20, "yError": 0 },
+ { "x": "x3", "y": 30, "yError": 0 },
+ { "x": "x4", "y": 40, "yError": 0 }
+ ]
+ }
+ ]
+ },
+ "output": {
+ "series": [
+ {
+ "visible": true,
+ "name": "a",
+ "type": "scatter",
+ "mode": "markers",
+ "x": ["x1", "x2", "x3", "x4"],
+ "y": [10, 20, 30, 40],
+ "error_y": { "array": [0, 0, 0, 0], "color": "red" },
+ "hoverinfo": "text+x+name",
+ "hover": [],
+ "text": ["10 ± 0", "20 ± 0", "30 ± 0", "40 ± 0"],
+ "marker": { "color": "red" },
+ "insidetextfont": { "color": "#ffffff" },
+ "yaxis": "y"
+ }
+ ]
+ }
+}
diff --git a/viz-lib/src/visualizations/chart/plotly/fixtures/prepareLayout/box-single-axis.json b/viz-lib/src/visualizations/chart/plotly/fixtures/prepareLayout/box-single-axis.json
new file mode 100644
index 000000000..447faadcf
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/plotly/fixtures/prepareLayout/box-single-axis.json
@@ -0,0 +1,44 @@
+{
+ "input": {
+ "options": {
+ "globalSeriesType": "box",
+ "xAxis": { "type": "-", "labels": { "enabled": true } },
+ "yAxis": [{ "type": "linear" }, { "type": "linear", "opposite": true }],
+ "series": { "stacking": null, "error_y": { "type": "data", "visible": true } },
+ "legend": {
+ "traceorder": "normal"
+ }
+ },
+ "series": [{ "name": "a" }]
+ },
+ "output": {
+ "layout": {
+ "margin": { "l": 10, "r": 10, "b": 5, "t": 20, "pad": 4 },
+ "width": 400,
+ "height": 300,
+ "autosize": false,
+ "showlegend": true,
+ "legend": {
+ "traceorder": "normal"
+ },
+ "boxmode": "group",
+ "boxgroupgap": 0.5,
+ "xaxis": {
+ "automargin": true,
+ "showticklabels": true,
+ "title": null,
+ "type": "-"
+ },
+ "yaxis": {
+ "automargin": true,
+ "title": null,
+ "type": "linear",
+ "autorange": true,
+ "range": null
+ },
+ "hoverlabel": {
+ "namelength": -1
+ }
+ }
+ }
+}
diff --git a/viz-lib/src/visualizations/chart/plotly/fixtures/prepareLayout/box-with-second-axis.json b/viz-lib/src/visualizations/chart/plotly/fixtures/prepareLayout/box-with-second-axis.json
new file mode 100644
index 000000000..bea2fb311
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/plotly/fixtures/prepareLayout/box-with-second-axis.json
@@ -0,0 +1,56 @@
+{
+ "input": {
+ "options": {
+ "globalSeriesType": "box",
+ "xAxis": { "type": "-", "labels": { "enabled": true } },
+ "yAxis": [{ "type": "linear" }, { "type": "linear", "opposite": true }],
+ "series": { "stacking": null, "error_y": { "type": "data", "visible": true } },
+ "legend": {
+ "traceorder": "normal"
+ }
+ },
+ "series": [
+ { "name": "a" },
+ { "name": "b", "yaxis": "y2" }
+ ]
+ },
+ "output": {
+ "layout": {
+ "margin": { "l": 10, "r": 10, "b": 5, "t": 20, "pad": 4 },
+ "width": 400,
+ "height": 300,
+ "autosize": false,
+ "showlegend": true,
+ "legend": {
+ "traceorder": "normal"
+ },
+ "boxmode": "group",
+ "boxgroupgap": 0.5,
+ "xaxis": {
+ "automargin": true,
+ "showticklabels": true,
+ "title": null,
+ "type": "-"
+ },
+ "yaxis": {
+ "automargin": true,
+ "title": null,
+ "type": "linear",
+ "autorange": true,
+ "range": null
+ },
+ "yaxis2": {
+ "automargin": true,
+ "title": null,
+ "type": "linear",
+ "autorange": true,
+ "range": null,
+ "overlaying": "y",
+ "side": "right"
+ },
+ "hoverlabel": {
+ "namelength": -1
+ }
+ }
+ }
+}
diff --git a/viz-lib/src/visualizations/chart/plotly/fixtures/prepareLayout/default-single-axis.json b/viz-lib/src/visualizations/chart/plotly/fixtures/prepareLayout/default-single-axis.json
new file mode 100644
index 000000000..285a8b0e6
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/plotly/fixtures/prepareLayout/default-single-axis.json
@@ -0,0 +1,42 @@
+{
+ "input": {
+ "options": {
+ "globalSeriesType": "column",
+ "xAxis": { "type": "-", "labels": { "enabled": true } },
+ "yAxis": [{ "type": "linear" }, { "type": "linear", "opposite": true }],
+ "series": { "stacking": null, "error_y": { "type": "data", "visible": true } },
+ "legend": {
+ "traceorder": "normal"
+ }
+ },
+ "series": [{ "name": "a" }]
+ },
+ "output": {
+ "layout": {
+ "margin": { "l": 10, "r": 10, "b": 5, "t": 20, "pad": 4 },
+ "width": 400,
+ "height": 300,
+ "autosize": false,
+ "showlegend": true,
+ "legend": {
+ "traceorder": "normal"
+ },
+ "xaxis": {
+ "automargin": true,
+ "showticklabels": true,
+ "title": null,
+ "type": "-"
+ },
+ "yaxis": {
+ "automargin": true,
+ "title": null,
+ "type": "linear",
+ "autorange": true,
+ "range": null
+ },
+ "hoverlabel": {
+ "namelength": -1
+ }
+ }
+ }
+}
diff --git a/viz-lib/src/visualizations/chart/plotly/fixtures/prepareLayout/default-with-second-axis.json b/viz-lib/src/visualizations/chart/plotly/fixtures/prepareLayout/default-with-second-axis.json
new file mode 100644
index 000000000..fbb59fec3
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/plotly/fixtures/prepareLayout/default-with-second-axis.json
@@ -0,0 +1,54 @@
+{
+ "input": {
+ "options": {
+ "globalSeriesType": "column",
+ "xAxis": { "type": "-", "labels": { "enabled": true } },
+ "yAxis": [{ "type": "linear" }, { "type": "linear", "opposite": true }],
+ "series": { "stacking": null, "error_y": { "type": "data", "visible": true } },
+ "legend": {
+ "traceorder": "normal"
+ }
+ },
+ "series": [
+ { "name": "a" },
+ { "name": "b", "yaxis": "y2" }
+ ]
+ },
+ "output": {
+ "layout": {
+ "margin": { "l": 10, "r": 10, "b": 5, "t": 20, "pad": 4 },
+ "width": 400,
+ "height": 300,
+ "autosize": false,
+ "showlegend": true,
+ "legend": {
+ "traceorder": "normal"
+ },
+ "xaxis": {
+ "automargin": true,
+ "showticklabels": true,
+ "title": null,
+ "type": "-"
+ },
+ "yaxis": {
+ "automargin": true,
+ "title": null,
+ "type": "linear",
+ "autorange": true,
+ "range": null
+ },
+ "yaxis2": {
+ "automargin": true,
+ "title": null,
+ "type": "linear",
+ "autorange": true,
+ "range": null,
+ "overlaying": "y",
+ "side": "right"
+ },
+ "hoverlabel": {
+ "namelength": -1
+ }
+ }
+ }
+}
diff --git a/viz-lib/src/visualizations/chart/plotly/fixtures/prepareLayout/default-with-stacking.json b/viz-lib/src/visualizations/chart/plotly/fixtures/prepareLayout/default-with-stacking.json
new file mode 100644
index 000000000..a974ebdb5
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/plotly/fixtures/prepareLayout/default-with-stacking.json
@@ -0,0 +1,41 @@
+{
+ "input": {
+ "options": {
+ "globalSeriesType": "column",
+ "legend": { "enabled": false, "traceorder": "normal" },
+ "xAxis": { "type": "-", "labels": { "enabled": true } },
+ "yAxis": [{ "type": "linear" }, { "type": "linear", "opposite": true }],
+ "series": { "stacking": "stack", "error_y": { "type": "data", "visible": true } }
+ },
+ "series": [{ "name": "a" }]
+ },
+ "output": {
+ "layout": {
+ "margin": { "l": 10, "r": 10, "b": 5, "t": 20, "pad": 4 },
+ "width": 400,
+ "height": 300,
+ "autosize": false,
+ "showlegend": false,
+ "legend": {
+ "traceorder": "normal"
+ },
+ "barmode": "relative",
+ "xaxis": {
+ "automargin": true,
+ "showticklabels": true,
+ "title": null,
+ "type": "-"
+ },
+ "yaxis": {
+ "automargin": true,
+ "title": null,
+ "type": "linear",
+ "autorange": true,
+ "range": null
+ },
+ "hoverlabel": {
+ "namelength": -1
+ }
+ }
+ }
+}
diff --git a/viz-lib/src/visualizations/chart/plotly/fixtures/prepareLayout/default-without-legend.json b/viz-lib/src/visualizations/chart/plotly/fixtures/prepareLayout/default-without-legend.json
new file mode 100644
index 000000000..553cf090c
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/plotly/fixtures/prepareLayout/default-without-legend.json
@@ -0,0 +1,40 @@
+{
+ "input": {
+ "options": {
+ "globalSeriesType": "column",
+ "legend": { "enabled": false, "traceorder": "normal" },
+ "xAxis": { "type": "-", "labels": { "enabled": true } },
+ "yAxis": [{ "type": "linear" }, { "type": "linear", "opposite": true }],
+ "series": { "stacking": null, "error_y": { "type": "data", "visible": true } }
+ },
+ "series": [{ "name": "a" }]
+ },
+ "output": {
+ "layout": {
+ "margin": { "l": 10, "r": 10, "b": 5, "t": 20, "pad": 4 },
+ "width": 400,
+ "height": 300,
+ "autosize": false,
+ "showlegend": false,
+ "legend": {
+ "traceorder": "normal"
+ },
+ "xaxis": {
+ "automargin": true,
+ "showticklabels": true,
+ "title": null,
+ "type": "-"
+ },
+ "yaxis": {
+ "automargin": true,
+ "title": null,
+ "type": "linear",
+ "autorange": true,
+ "range": null
+ },
+ "hoverlabel": {
+ "namelength": -1
+ }
+ }
+ }
+}
diff --git a/viz-lib/src/visualizations/chart/plotly/fixtures/prepareLayout/pie-multiple-series.json b/viz-lib/src/visualizations/chart/plotly/fixtures/prepareLayout/pie-multiple-series.json
new file mode 100644
index 000000000..7f3735c43
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/plotly/fixtures/prepareLayout/pie-multiple-series.json
@@ -0,0 +1,53 @@
+{
+ "input": {
+ "options": {
+ "globalSeriesType": "pie",
+ "textFormat": "",
+ "legend": {
+ "traceorder": "normal"
+ }
+ },
+ "series": [{ "name": "a" }, { "name": "b" }, { "name": "c" }]
+ },
+ "output": {
+ "layout": {
+ "margin": { "l": 10, "r": 10, "b": 5, "t": 20, "pad": 4 },
+ "width": 400,
+ "height": 300,
+ "autosize": false,
+ "showlegend": true,
+ "legend": {
+ "traceorder": "normal"
+ },
+ "hoverlabel": {
+ "namelength": -1
+ },
+ "annotations": [
+ {
+ "x": 0.24,
+ "y": 0.485,
+ "xanchor": "center",
+ "yanchor": "top",
+ "text": "a",
+ "showarrow": false
+ },
+ {
+ "x": 0.74,
+ "y": 0.485,
+ "xanchor": "center",
+ "yanchor": "top",
+ "text": "b",
+ "showarrow": false
+ },
+ {
+ "x": 0.24,
+ "y": 0.985,
+ "xanchor": "center",
+ "yanchor": "top",
+ "text": "c",
+ "showarrow": false
+ }
+ ]
+ }
+ }
+}
diff --git a/viz-lib/src/visualizations/chart/plotly/fixtures/prepareLayout/pie-without-annotations.json b/viz-lib/src/visualizations/chart/plotly/fixtures/prepareLayout/pie-without-annotations.json
new file mode 100644
index 000000000..3b2ca9f09
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/plotly/fixtures/prepareLayout/pie-without-annotations.json
@@ -0,0 +1,28 @@
+{
+ "input": {
+ "options": {
+ "globalSeriesType": "pie",
+ "textFormat": "{{ @@name }}",
+ "legend": {
+ "traceorder": "normal"
+ }
+ },
+ "series": [{ "name": "a" }]
+ },
+ "output": {
+ "layout": {
+ "margin": { "l": 10, "r": 10, "b": 5, "t": 20, "pad": 4 },
+ "width": 400,
+ "height": 300,
+ "autosize": false,
+ "showlegend": true,
+ "legend": {
+ "traceorder": "normal"
+ },
+ "hoverlabel": {
+ "namelength": -1
+ },
+ "annotations": []
+ }
+ }
+}
diff --git a/viz-lib/src/visualizations/chart/plotly/fixtures/prepareLayout/pie.json b/viz-lib/src/visualizations/chart/plotly/fixtures/prepareLayout/pie.json
new file mode 100644
index 000000000..a4865bbc1
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/plotly/fixtures/prepareLayout/pie.json
@@ -0,0 +1,37 @@
+{
+ "input": {
+ "options": {
+ "globalSeriesType": "pie",
+ "textFormat": "",
+ "legend": {
+ "traceorder": "normal"
+ }
+ },
+ "series": [{ "name": "a" }]
+ },
+ "output": {
+ "layout": {
+ "margin": { "l": 10, "r": 10, "b": 5, "t": 20, "pad": 4 },
+ "width": 400,
+ "height": 300,
+ "autosize": false,
+ "showlegend": true,
+ "legend": {
+ "traceorder": "normal"
+ },
+ "hoverlabel": {
+ "namelength": -1
+ },
+ "annotations": [
+ {
+ "x": 0.49,
+ "y": 0.985,
+ "xanchor": "center",
+ "yanchor": "top",
+ "text": "a",
+ "showarrow": false
+ }
+ ]
+ }
+ }
+}
diff --git a/viz-lib/src/visualizations/chart/plotly/index.ts b/viz-lib/src/visualizations/chart/plotly/index.ts
new file mode 100644
index 000000000..8680f5f6d
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/plotly/index.ts
@@ -0,0 +1,36 @@
+import Plotly from "plotly.js/lib/core";
+// @ts-expect-error ts-migrate(7016) FIXME: Could not find a declaration file for module 'plot... Remove this comment to see the full error message
+import bar from "plotly.js/lib/bar";
+// @ts-expect-error ts-migrate(7016) FIXME: Could not find a declaration file for module 'plot... Remove this comment to see the full error message
+import pie from "plotly.js/lib/pie";
+// @ts-expect-error ts-migrate(7016) FIXME: Could not find a declaration file for module 'plot... Remove this comment to see the full error message
+import histogram from "plotly.js/lib/histogram";
+// @ts-expect-error ts-migrate(7016) FIXME: Could not find a declaration file for module 'plot... Remove this comment to see the full error message
+import box from "plotly.js/lib/box";
+// @ts-expect-error ts-migrate(7016) FIXME: Could not find a declaration file for module 'plot... Remove this comment to see the full error message
+import heatmap from "plotly.js/lib/heatmap";
+
+import prepareData from "./prepareData";
+import prepareLayout from "./prepareLayout";
+import updateData from "./updateData";
+import updateAxes from "./updateAxes";
+import updateChartSize from "./updateChartSize";
+import { prepareCustomChartData, createCustomChartRenderer } from "./customChartUtils";
+
+// @ts-expect-error ts-migrate(2339) FIXME: Property 'register' does not exist on type 'typeof... Remove this comment to see the full error message
+Plotly.register([bar, pie, histogram, box, heatmap]);
+// @ts-expect-error ts-migrate(2339) FIXME: Property 'setPlotConfig' does not exist on type 't... Remove this comment to see the full error message
+Plotly.setPlotConfig({
+ modeBarButtonsToRemove: ["sendDataToCloud"],
+});
+
+export {
+ Plotly,
+ prepareData,
+ prepareLayout,
+ updateData,
+ updateAxes,
+ updateChartSize,
+ prepareCustomChartData,
+ createCustomChartRenderer,
+};
diff --git a/viz-lib/src/visualizations/chart/plotly/prepareData.test.ts b/viz-lib/src/visualizations/chart/plotly/prepareData.test.ts
new file mode 100644
index 000000000..7bcdcd04e
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/plotly/prepareData.test.ts
@@ -0,0 +1,160 @@
+/* eslint-disable global-require, import/no-unresolved */
+import prepareData from "./prepareData";
+
+function cleanSeries(series: any) {
+ return series.map(({ sourceData, ...rest }: any) => rest);
+}
+
+describe("Visualizations", () => {
+ describe("Chart", () => {
+ describe("prepareData", () => {
+ describe("heatmap", () => {
+ test("default", () => {
+ const { input, output } = require("./fixtures/prepareData/heatmap/default");
+ const series = prepareData(input.data, input.options);
+ expect(series).toEqual(output.series);
+ });
+ test("sorted", () => {
+ const { input, output } = require("./fixtures/prepareData/heatmap/sorted");
+ const series = prepareData(input.data, input.options);
+ expect(series).toEqual(output.series);
+ });
+ test("reversed", () => {
+ const { input, output } = require("./fixtures/prepareData/heatmap/reversed");
+ const series = prepareData(input.data, input.options);
+ expect(series).toEqual(output.series);
+ });
+ test("sorted & reversed", () => {
+ const { input, output } = require("./fixtures/prepareData/heatmap/sorted");
+ const series = prepareData(input.data, input.options);
+ expect(series).toEqual(output.series);
+ });
+ test("with labels", () => {
+ const { input, output } = require("./fixtures/prepareData/heatmap/with-labels");
+ const series = prepareData(input.data, input.options);
+ expect(series).toEqual(output.series);
+ });
+ });
+
+ describe("pie", () => {
+ test("default", () => {
+ const { input, output } = require("./fixtures/prepareData/pie/default");
+ const series = cleanSeries(prepareData(input.data, input.options));
+ expect(series).toEqual(output.series);
+ });
+
+ test("without X mapped", () => {
+ const { input, output } = require("./fixtures/prepareData/pie/without-x");
+ const series = cleanSeries(prepareData(input.data, input.options));
+ expect(series).toEqual(output.series);
+ });
+
+ test("without labels", () => {
+ const { input, output } = require("./fixtures/prepareData/pie/without-labels");
+ const series = cleanSeries(prepareData(input.data, input.options));
+ expect(series).toEqual(output.series);
+ });
+
+ test("custom tooltip", () => {
+ const { input, output } = require("./fixtures/prepareData/pie/custom-tooltip");
+ const series = cleanSeries(prepareData(input.data, input.options));
+ expect(series).toEqual(output.series);
+ });
+ });
+
+ describe("bar (column)", () => {
+ test("default", () => {
+ const { input, output } = require("./fixtures/prepareData/bar/default");
+ const series = cleanSeries(prepareData(input.data, input.options));
+ expect(series).toEqual(output.series);
+ });
+
+ test("stacked", () => {
+ const { input, output } = require("./fixtures/prepareData/bar/stacked");
+ const series = cleanSeries(prepareData(input.data, input.options));
+ expect(series).toEqual(output.series);
+ });
+
+ test("normalized values", () => {
+ const { input, output } = require("./fixtures/prepareData/bar/normalized");
+ const series = cleanSeries(prepareData(input.data, input.options));
+ expect(series).toEqual(output.series);
+ });
+ });
+
+ describe("lines & area", () => {
+ test("default", () => {
+ const { input, output } = require("./fixtures/prepareData/line-area/default");
+ const series = cleanSeries(prepareData(input.data, input.options));
+ expect(series).toEqual(output.series);
+ });
+
+ test("stacked", () => {
+ const { input, output } = require("./fixtures/prepareData/line-area/stacked");
+ const series = cleanSeries(prepareData(input.data, input.options));
+ expect(series).toEqual(output.series);
+ });
+
+ test("normalized values", () => {
+ const { input, output } = require("./fixtures/prepareData/line-area/normalized");
+ const series = cleanSeries(prepareData(input.data, input.options));
+ expect(series).toEqual(output.series);
+ });
+
+ test("stacked & normalized values", () => {
+ const { input, output } = require("./fixtures/prepareData/line-area/normalized-stacked");
+ const series = cleanSeries(prepareData(input.data, input.options));
+ expect(series).toEqual(output.series);
+ });
+
+ test("keep missing values", () => {
+ const { input, output } = require("./fixtures/prepareData/line-area/keep-missing-values");
+ const series = cleanSeries(prepareData(input.data, input.options));
+ expect(series).toEqual(output.series);
+ });
+
+ test("convert missing values to 0", () => {
+ const { input, output } = require("./fixtures/prepareData/line-area/missing-values-0");
+ const series = cleanSeries(prepareData(input.data, input.options));
+ expect(series).toEqual(output.series);
+ });
+ });
+
+ describe("scatter", () => {
+ test("default", () => {
+ const { input, output } = require("./fixtures/prepareData/scatter/default");
+ const series = cleanSeries(prepareData(input.data, input.options));
+ expect(series).toEqual(output.series);
+ });
+
+ test("without labels", () => {
+ const { input, output } = require("./fixtures/prepareData/scatter/without-labels");
+ const series = cleanSeries(prepareData(input.data, input.options));
+ expect(series).toEqual(output.series);
+ });
+ });
+
+ describe("bubble", () => {
+ test("default", () => {
+ const { input, output } = require("./fixtures/prepareData/bubble/default");
+ const series = cleanSeries(prepareData(input.data, input.options));
+ expect(series).toEqual(output.series);
+ });
+ });
+
+ describe("box", () => {
+ test("default", () => {
+ const { input, output } = require("./fixtures/prepareData/box/default");
+ const series = cleanSeries(prepareData(input.data, input.options));
+ expect(series).toEqual(output.series);
+ });
+
+ test("with points", () => {
+ const { input, output } = require("./fixtures/prepareData/box/with-points");
+ const series = cleanSeries(prepareData(input.data, input.options));
+ expect(series).toEqual(output.series);
+ });
+ });
+ });
+ });
+});
diff --git a/viz-lib/src/visualizations/chart/plotly/prepareData.ts b/viz-lib/src/visualizations/chart/plotly/prepareData.ts
new file mode 100644
index 000000000..7efaf0499
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/plotly/prepareData.ts
@@ -0,0 +1,16 @@
+import preparePieData from "./preparePieData";
+import prepareHeatmapData from "./prepareHeatmapData";
+import prepareDefaultData from "./prepareDefaultData";
+import updateData from "./updateData";
+
+export default function prepareData(seriesList: any, options: any) {
+ switch (options.globalSeriesType) {
+ case "pie":
+ return updateData(preparePieData(seriesList, options), options);
+ case "heatmap":
+ // @ts-expect-error ts-migrate(2554) FIXME: Expected 2 arguments, but got 1.
+ return updateData(prepareHeatmapData(seriesList, options, options));
+ default:
+ return updateData(prepareDefaultData(seriesList, options), options);
+ }
+}
diff --git a/viz-lib/src/visualizations/chart/plotly/prepareDefaultData.ts b/viz-lib/src/visualizations/chart/plotly/prepareDefaultData.ts
new file mode 100644
index 000000000..c5102309f
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/plotly/prepareDefaultData.ts
@@ -0,0 +1,162 @@
+import { isNil, extend, each, includes, map, sortBy, toString } from "lodash";
+import chooseTextColorForBackground from "@/lib/chooseTextColorForBackground";
+import { ColorPaletteArray } from "@/visualizations/ColorPalette";
+import { cleanNumber, normalizeValue, getSeriesAxis } from "./utils";
+
+function getSeriesColor(seriesOptions: any, seriesIndex: any) {
+ return seriesOptions.color || ColorPaletteArray[seriesIndex % ColorPaletteArray.length];
+}
+
+function getHoverInfoPattern(options: any) {
+ const hasX = /{{\s*@@x\s*}}/.test(options.textFormat);
+ const hasName = /{{\s*@@name\s*}}/.test(options.textFormat);
+ let result = "text";
+ if (!hasX) result += "+x";
+ if (!hasName) result += "+name";
+ return result;
+}
+
+function prepareBarSeries(series: any, options: any, additionalOptions: any) {
+ series.type = "bar";
+ series.offsetgroup = toString(additionalOptions.index);
+ if (options.showDataLabels) {
+ series.textposition = "inside";
+ }
+ return series;
+}
+
+function prepareLineSeries(series: any, options: any) {
+ series.mode = "lines" + (options.showDataLabels ? "+text" : "");
+ return series;
+}
+
+function prepareAreaSeries(series: any, options: any) {
+ series.mode = "lines" + (options.showDataLabels ? "+text" : "");
+ series.fill = options.series.stacking ? "tonexty" : "tozeroy";
+ return series;
+}
+
+function prepareScatterSeries(series: any, options: any) {
+ series.type = "scatter";
+ series.mode = "markers" + (options.showDataLabels ? "+text" : "");
+ return series;
+}
+
+function prepareBubbleSeries(series: any, options: any, { seriesColor, data }: any) {
+ const coefficient = options.coefficient || 1;
+ series.mode = "markers";
+ series.marker = {
+ color: seriesColor,
+ size: map(data, i => i.size * coefficient),
+ sizemode: options.sizemode || "diameter",
+ };
+ return series;
+}
+
+function prepareBoxSeries(series: any, options: any, { seriesColor }: any) {
+ series.type = "box";
+ series.mode = "markers";
+
+ series.boxpoints = "outliers";
+ series.hoverinfo = false;
+ series.marker = {
+ color: seriesColor,
+ size: 3,
+ };
+ if (options.showpoints) {
+ series.boxpoints = "all";
+ series.jitter = 0.3;
+ series.pointpos = -1.8;
+ }
+ return series;
+}
+
+function prepareSeries(series: any, options: any, additionalOptions: any) {
+ const { hoverInfoPattern, index } = additionalOptions;
+
+ const seriesOptions = extend({ type: options.globalSeriesType, yAxis: 0 }, options.seriesOptions[series.name]);
+ const seriesColor = getSeriesColor(seriesOptions, index);
+ const seriesYAxis = getSeriesAxis(series, options);
+
+ // Sort by x - `Map` preserves order of items
+ const data = options.sortX ? sortBy(series.data, d => normalizeValue(d.x, options.xAxis.type)) : series.data;
+
+ // For bubble/scatter charts `y` may be any (similar to `x`) - numeric is only bubble size;
+ // for other types `y` is always number
+ const cleanYValue = includes(["bubble", "scatter"], seriesOptions.type)
+ ? normalizeValue
+ : (v: any) => {
+ v = cleanNumber(v);
+ return options.missingValuesAsZero && isNil(v) ? 0.0 : v;
+ };
+
+ const sourceData = new Map();
+ const xValues: any = [];
+ const yValues: any = [];
+ const yErrorValues: any = [];
+ each(data, row => {
+ const x = normalizeValue(row.x, options.xAxis.type); // number/datetime/category
+ const y = cleanYValue(row.y, seriesYAxis === "y2" ? options.yAxis[1].type : options.yAxis[0].type); // depends on series type!
+ const yError = cleanNumber(row.yError); // always number
+ const size = cleanNumber(row.size); // always number
+ sourceData.set(x, {
+ x,
+ y,
+ yError,
+ size,
+ yPercent: null, // will be updated later
+ row,
+ });
+ xValues.push(x);
+ yValues.push(y);
+ yErrorValues.push(yError);
+ });
+
+ const plotlySeries = {
+ visible: true,
+ hoverinfo: hoverInfoPattern,
+ x: xValues,
+ y: yValues,
+ error_y: {
+ array: yErrorValues,
+ color: seriesColor,
+ },
+ name: seriesOptions.name || series.name,
+ marker: { color: seriesColor },
+ insidetextfont: {
+ color: chooseTextColorForBackground(seriesColor),
+ },
+ yaxis: seriesYAxis,
+ sourceData,
+ };
+
+ additionalOptions = { ...additionalOptions, seriesColor, data };
+
+ switch (seriesOptions.type) {
+ case "column":
+ return prepareBarSeries(plotlySeries, options, additionalOptions);
+ case "line":
+ // @ts-expect-error ts-migrate(2554) FIXME: Expected 2 arguments, but got 3.
+ return prepareLineSeries(plotlySeries, options, additionalOptions);
+ case "area":
+ // @ts-expect-error ts-migrate(2554) FIXME: Expected 2 arguments, but got 3.
+ return prepareAreaSeries(plotlySeries, options, additionalOptions);
+ case "scatter":
+ // @ts-expect-error ts-migrate(2554) FIXME: Expected 2 arguments, but got 3.
+ return prepareScatterSeries(plotlySeries, options, additionalOptions);
+ case "bubble":
+ return prepareBubbleSeries(plotlySeries, options, additionalOptions);
+ case "box":
+ return prepareBoxSeries(plotlySeries, options, additionalOptions);
+ default:
+ return plotlySeries;
+ }
+}
+
+export default function prepareDefaultData(seriesList: any, options: any) {
+ const additionalOptions = {
+ hoverInfoPattern: getHoverInfoPattern(options),
+ };
+
+ return map(seriesList, (series, index) => prepareSeries(series, options, { ...additionalOptions, index }));
+}
diff --git a/viz-lib/src/visualizations/chart/plotly/prepareHeatmapData.ts b/viz-lib/src/visualizations/chart/plotly/prepareHeatmapData.ts
new file mode 100644
index 000000000..b181a2100
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/plotly/prepareHeatmapData.ts
@@ -0,0 +1,115 @@
+import { map, max, uniq, sortBy, flatten, find } from "lodash";
+import { createNumberFormatter } from "@/lib/value-format";
+
+const defaultColorScheme = [
+ [0, "#356aff"],
+ [0.14, "#4a7aff"],
+ [0.28, "#5d87ff"],
+ [0.42, "#7398ff"],
+ [0.56, "#fb8c8c"],
+ [0.71, "#ec6463"],
+ [0.86, "#ec4949"],
+ [1, "#e92827"],
+];
+
+function prepareSeries(series: any, options: any, additionalOptions: any) {
+ const { colorScheme, formatNumber } = additionalOptions;
+
+ const plotlySeries = {
+ x: [],
+ y: [],
+ z: [],
+ type: "heatmap",
+ name: "",
+ colorscale: colorScheme,
+ };
+
+ // @ts-expect-error ts-migrate(2322) FIXME: Type 'any[]' is not assignable to type 'never[]'.
+ plotlySeries.x = uniq(map(series.data, v => v.x));
+ // @ts-expect-error ts-migrate(2322) FIXME: Type 'any[]' is not assignable to type 'never[]'.
+ plotlySeries.y = uniq(map(series.data, v => v.y));
+
+ if (options.sortX) {
+ plotlySeries.x = sortBy(plotlySeries.x);
+ }
+
+ if (options.sortY) {
+ plotlySeries.y = sortBy(plotlySeries.y);
+ }
+
+ if (options.reverseX) {
+ plotlySeries.x.reverse();
+ }
+
+ if (options.reverseY) {
+ plotlySeries.y.reverse();
+ }
+
+ const zMax = max(map(series.data, d => d.zVal));
+
+ // Use text trace instead of default annotation for better performance
+ const dataLabels = {
+ x: [],
+ y: [],
+ mode: "text",
+ hoverinfo: "skip",
+ showlegend: false,
+ text: [],
+ textfont: {
+ color: [],
+ },
+ };
+
+ for (let i = 0; i < plotlySeries.y.length; i += 1) {
+ const item = [];
+ for (let j = 0; j < plotlySeries.x.length; j += 1) {
+ const datum = find(series.data, { x: plotlySeries.x[j], y: plotlySeries.y[i] });
+
+ const zValue = (datum && datum.zVal) || 0;
+ item.push(zValue);
+
+ if (isFinite(zMax) && options.showDataLabels) {
+ dataLabels.x.push(plotlySeries.x[j]);
+ dataLabels.y.push(plotlySeries.y[i]);
+ // @ts-expect-error ts-migrate(2345) FIXME: Argument of type 'any' is not assignable to parame... Remove this comment to see the full error message
+ dataLabels.text.push(formatNumber(zValue));
+ if (options.colorScheme && options.colorScheme === "Custom...") {
+ // @ts-expect-error ts-migrate(2345) FIXME: Argument of type 'string' is not assignable to par... Remove this comment to see the full error message
+ dataLabels.textfont.color.push("white");
+ } else {
+ // @ts-expect-error ts-migrate(2345) FIXME: Argument of type 'string' is not assignable to par... Remove this comment to see the full error message
+ dataLabels.textfont.color.push(zValue / zMax < 0.25 ? "white" : "black");
+ }
+ }
+ }
+ // @ts-expect-error ts-migrate(2345) FIXME: Argument of type 'any[]' is not assignable to para... Remove this comment to see the full error message
+ plotlySeries.z.push(item);
+ }
+
+ if (isFinite(zMax) && options.showDataLabels) {
+ return [plotlySeries, dataLabels];
+ }
+ return [plotlySeries];
+}
+
+export default function prepareHeatmapData(seriesList: any, options: any) {
+ let colorScheme = [];
+
+ if (!options.colorScheme) {
+ colorScheme = defaultColorScheme;
+ } else if (options.colorScheme === "Custom...") {
+ colorScheme = [
+ [0, options.heatMinColor],
+ [1, options.heatMaxColor],
+ ];
+ } else {
+ colorScheme = options.colorScheme;
+ }
+
+ const additionalOptions = {
+ colorScheme,
+ formatNumber: createNumberFormatter(options.numberFormat),
+ };
+
+ return flatten(map(seriesList, series => prepareSeries(series, options, additionalOptions)));
+}
diff --git a/viz-lib/src/visualizations/chart/plotly/prepareLayout.test.ts b/viz-lib/src/visualizations/chart/plotly/prepareLayout.test.ts
new file mode 100644
index 000000000..068686d5f
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/plotly/prepareLayout.test.ts
@@ -0,0 +1,65 @@
+/* eslint-disable global-require, import/no-unresolved */
+import getOptions from "../getOptions";
+import prepareLayout from "./prepareLayout";
+
+const fakeElement = { offsetWidth: 400, offsetHeight: 300 };
+
+describe("Visualizations", () => {
+ describe("Chart", () => {
+ describe("prepareLayout", () => {
+ test("Pie", () => {
+ const { input, output } = require("./fixtures/prepareLayout/pie");
+ const layout = prepareLayout(fakeElement, getOptions(input.options), input.series);
+ expect(layout).toEqual(output.layout);
+ });
+
+ test("Pie without annotations", () => {
+ const { input, output } = require("./fixtures/prepareLayout/pie-without-annotations");
+ const layout = prepareLayout(fakeElement, getOptions(input.options), input.series);
+ expect(layout).toEqual(output.layout);
+ });
+
+ test("Pie with multiple series", () => {
+ const { input, output } = require("./fixtures/prepareLayout/pie-multiple-series");
+ const layout = prepareLayout(fakeElement, getOptions(input.options), input.series);
+ expect(layout).toEqual(output.layout);
+ });
+
+ test("Box with single Y axis", () => {
+ const { input, output } = require("./fixtures/prepareLayout/box-single-axis");
+ const layout = prepareLayout(fakeElement, getOptions(input.options), input.series);
+ expect(layout).toEqual(output.layout);
+ });
+
+ test("Box with second Y axis", () => {
+ const { input, output } = require("./fixtures/prepareLayout/box-with-second-axis");
+ const layout = prepareLayout(fakeElement, getOptions(input.options), input.series);
+ expect(layout).toEqual(output.layout);
+ });
+
+ test("Default with single Y axis", () => {
+ const { input, output } = require("./fixtures/prepareLayout/default-single-axis");
+ const layout = prepareLayout(fakeElement, getOptions(input.options), input.series);
+ expect(layout).toEqual(output.layout);
+ });
+
+ test("Default with second Y axis", () => {
+ const { input, output } = require("./fixtures/prepareLayout/default-with-second-axis");
+ const layout = prepareLayout(fakeElement, getOptions(input.options), input.series);
+ expect(layout).toEqual(output.layout);
+ });
+
+ test("Default without legend", () => {
+ const { input, output } = require("./fixtures/prepareLayout/default-without-legend");
+ const layout = prepareLayout(fakeElement, getOptions(input.options), input.series);
+ expect(layout).toEqual(output.layout);
+ });
+
+ test("Default with stacking", () => {
+ const { input, output } = require("./fixtures/prepareLayout/default-with-stacking");
+ const layout = prepareLayout(fakeElement, getOptions(input.options), input.series);
+ expect(layout).toEqual(output.layout);
+ });
+ });
+ });
+});
diff --git a/viz-lib/src/visualizations/chart/plotly/prepareLayout.ts b/viz-lib/src/visualizations/chart/plotly/prepareLayout.ts
new file mode 100644
index 000000000..f79912a2f
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/plotly/prepareLayout.ts
@@ -0,0 +1,133 @@
+import { isObject, isUndefined, filter, map } from "lodash";
+import { getPieDimensions } from "./preparePieData";
+
+function getAxisTitle(axis: any) {
+ return isObject(axis.title) ? axis.title.text : null;
+}
+
+function getAxisScaleType(axis: any) {
+ switch (axis.type) {
+ case "datetime":
+ return "date";
+ case "logarithmic":
+ return "log";
+ default:
+ return axis.type;
+ }
+}
+
+function prepareXAxis(axisOptions: any, additionalOptions: any) {
+ const axis = {
+ title: getAxisTitle(axisOptions),
+ type: getAxisScaleType(axisOptions),
+ automargin: true,
+ };
+
+ if (additionalOptions.sortX && axis.type === "category") {
+ if (additionalOptions.reverseX) {
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'categoryorder' does not exist on type '{... Remove this comment to see the full error message
+ axis.categoryorder = "category descending";
+ } else {
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'categoryorder' does not exist on type '{... Remove this comment to see the full error message
+ axis.categoryorder = "category ascending";
+ }
+ }
+
+ if (!isUndefined(axisOptions.labels)) {
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'showticklabels' does not exist on type '... Remove this comment to see the full error message
+ axis.showticklabels = axisOptions.labels.enabled;
+ }
+
+ return axis;
+}
+
+function prepareYAxis(axisOptions: any) {
+ return {
+ title: getAxisTitle(axisOptions),
+ type: getAxisScaleType(axisOptions),
+ automargin: true,
+ autorange: true,
+ range: null,
+ };
+}
+
+function preparePieLayout(layout: any, options: any, data: any) {
+ const hasName = /{{\s*@@name\s*}}/.test(options.textFormat);
+
+ const { cellsInRow, cellWidth, cellHeight, xPadding } = getPieDimensions(data);
+
+ if (hasName) {
+ layout.annotations = [];
+ } else {
+ layout.annotations = filter(
+ map(data, (series, index) => {
+ // @ts-expect-error ts-migrate(2362) FIXME: The left-hand side of an arithmetic operation must... Remove this comment to see the full error message
+ const xPosition = (index % cellsInRow) * cellWidth;
+ // @ts-expect-error ts-migrate(2362) FIXME: The left-hand side of an arithmetic operation must... Remove this comment to see the full error message
+ const yPosition = Math.floor(index / cellsInRow) * cellHeight;
+ return {
+ x: xPosition + (cellWidth - xPadding) / 2,
+ y: yPosition + cellHeight - 0.015,
+ xanchor: "center",
+ yanchor: "top",
+ text: series.name,
+ showarrow: false,
+ };
+ })
+ );
+ }
+
+ return layout;
+}
+
+function prepareDefaultLayout(layout: any, options: any, data: any) {
+ const y2Series = data.filter((s: any) => s.yaxis === "y2");
+
+ layout.xaxis = prepareXAxis(options.xAxis, options);
+
+ layout.yaxis = prepareYAxis(options.yAxis[0]);
+ if (y2Series.length > 0) {
+ layout.yaxis2 = prepareYAxis(options.yAxis[1]);
+ layout.yaxis2.overlaying = "y";
+ layout.yaxis2.side = "right";
+ }
+
+ if (options.series.stacking) {
+ layout.barmode = "relative";
+ }
+
+ return layout;
+}
+
+function prepareBoxLayout(layout: any, options: any, data: any) {
+ layout = prepareDefaultLayout(layout, options, data);
+ layout.boxmode = "group";
+ layout.boxgroupgap = 0.5;
+ return layout;
+}
+
+export default function prepareLayout(element: any, options: any, data: any) {
+ const layout = {
+ margin: { l: 10, r: 10, b: 5, t: 20, pad: 4 },
+ // plot size should be at least 5x5px
+ width: Math.max(5, Math.floor(element.offsetWidth)),
+ height: Math.max(5, Math.floor(element.offsetHeight)),
+ autosize: false,
+ showlegend: options.legend.enabled,
+ legend: {
+ traceorder: options.legend.traceorder,
+ },
+ hoverlabel: {
+ namelength: -1,
+ },
+ };
+
+ switch (options.globalSeriesType) {
+ case "pie":
+ return preparePieLayout(layout, options, data);
+ case "box":
+ return prepareBoxLayout(layout, options, data);
+ default:
+ return prepareDefaultLayout(layout, options, data);
+ }
+}
diff --git a/viz-lib/src/visualizations/chart/plotly/preparePieData.ts b/viz-lib/src/visualizations/chart/plotly/preparePieData.ts
new file mode 100644
index 000000000..80101f072
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/plotly/preparePieData.ts
@@ -0,0 +1,121 @@
+import { isString, each, extend, includes, map, reduce } from "lodash";
+import d3 from "d3";
+import chooseTextColorForBackground from "@/lib/chooseTextColorForBackground";
+import { ColorPaletteArray } from "@/visualizations/ColorPalette";
+
+import { cleanNumber, normalizeValue } from "./utils";
+
+export function getPieDimensions(series: any) {
+ const rows = series.length > 2 ? 2 : 1;
+ const cellsInRow = Math.ceil(series.length / rows);
+ const cellWidth = 1 / cellsInRow;
+ const cellHeight = 1 / rows;
+ const xPadding = 0.02;
+ const yPadding = 0.1;
+
+ return { rows, cellsInRow, cellWidth, cellHeight, xPadding, yPadding };
+}
+
+function getPieHoverInfoPattern(options: any) {
+ const hasX = /{{\s*@@x\s*}}/.test(options.textFormat);
+ let result = "text";
+ if (!hasX) result += "+label";
+ return result;
+}
+
+function prepareSeries(series: any, options: any, additionalOptions: any) {
+ const {
+ cellWidth,
+ cellHeight,
+ xPadding,
+ yPadding,
+ cellsInRow,
+ hasX,
+ index,
+ hoverInfoPattern,
+ getValueColor,
+ } = additionalOptions;
+
+ const seriesOptions = extend({ type: options.globalSeriesType, yAxis: 0 }, options.seriesOptions[series.name]);
+
+ const xPosition = (index % cellsInRow) * cellWidth;
+ const yPosition = Math.floor(index / cellsInRow) * cellHeight;
+
+ const labels: any = [];
+ const values: any = [];
+ const sourceData = new Map();
+ const seriesTotal = reduce(
+ series.data,
+ (result, row) => {
+ const y = cleanNumber(row.y);
+ return result + Math.abs(y);
+ },
+ 0
+ );
+ each(series.data, row => {
+ const x = hasX ? normalizeValue(row.x, options.xAxis.type) : `Slice ${index}`;
+ const y = cleanNumber(row.y);
+ labels.push(x);
+ values.push(y);
+ sourceData.set(x, {
+ x,
+ y,
+ yPercent: (y / seriesTotal) * 100,
+ row,
+ });
+ });
+
+ const markerColors = map(series.data, row => getValueColor(row.x));
+ const textColors = map(markerColors, c => chooseTextColorForBackground(c));
+
+ return {
+ visible: true,
+ values,
+ labels,
+ type: "pie",
+ hole: 0.4,
+ marker: {
+ colors: markerColors,
+ },
+ hoverinfo: hoverInfoPattern,
+ text: [],
+ textinfo: options.showDataLabels ? "percent" : "none",
+ textposition: "inside",
+ textfont: {
+ color: textColors,
+ },
+ name: seriesOptions.name || series.name,
+ direction: options.direction.type,
+ domain: {
+ x: [xPosition, xPosition + cellWidth - xPadding],
+ y: [yPosition, yPosition + cellHeight - yPadding],
+ },
+ sourceData,
+ };
+}
+
+export default function preparePieData(seriesList: any, options: any) {
+ // we will use this to assign colors for values that have no explicitly set color
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'scale' does not exist on type 'typeof im... Remove this comment to see the full error message
+ const getDefaultColor = d3.scale
+ .ordinal()
+ .domain([])
+ .range(ColorPaletteArray);
+ const valuesColors = {};
+ each(options.valuesOptions, (item, key) => {
+ if (isString(item.color) && item.color !== "") {
+ // @ts-expect-error ts-migrate(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message
+ valuesColors[key] = item.color;
+ }
+ });
+
+ const additionalOptions = {
+ ...getPieDimensions(seriesList),
+ hasX: includes(options.columnMapping, "x"),
+ hoverInfoPattern: getPieHoverInfoPattern(options),
+ // @ts-expect-error ts-migrate(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message
+ getValueColor: (v: any) => valuesColors[v] || getDefaultColor(v),
+ };
+
+ return map(seriesList, (series, index) => prepareSeries(series, options, { ...additionalOptions, index }));
+}
diff --git a/viz-lib/src/visualizations/chart/plotly/updateAxes.ts b/viz-lib/src/visualizations/chart/plotly/updateAxes.ts
new file mode 100644
index 000000000..71082230c
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/plotly/updateAxes.ts
@@ -0,0 +1,118 @@
+import { isObject, isNumber, each } from "lodash";
+
+function calculateAxisRange(range: any, min: any, max: any) {
+ return [isNumber(min) ? min : range[0], isNumber(max) ? max : range[1]];
+}
+
+function calculateAbsoluteDiff(value: any, totalRange: any, percentageDiff: any) {
+ return (percentageDiff * totalRange) / (1 - Math.abs(value) / totalRange - percentageDiff);
+}
+
+function alignYAxesAtZero(axisA: any, axisB: any) {
+ // Make sure the origin is included in both axes
+ axisA.range[1] = Math.max(0, axisA.range[1]);
+ axisB.range[1] = Math.max(0, axisB.range[1]);
+ axisA.range[0] = Math.min(0, axisA.range[0]);
+ axisB.range[0] = Math.min(0, axisB.range[0]);
+
+ const totalRangeA = axisA.range[1] - axisA.range[0];
+ const proportionA = axisA.range[1] / totalRangeA;
+ const totalRangeB = axisB.range[1] - axisB.range[0];
+ const proportionB = axisB.range[1] / totalRangeB;
+
+ // Calculate the difference between the proportions and distribute them within the two axes
+ const diff = Math.abs(proportionB - proportionA) / 2;
+
+ // Don't do anything if the difference is too low
+ if (diff < 0.01) {
+ return;
+ }
+
+ // Select the two that will correct the proportion by always augmenting, so the chart is not cut
+ if (proportionA < proportionB) {
+ // increase axisA max and axisB min
+ axisA.range[1] += calculateAbsoluteDiff(axisA.range[1], totalRangeA, diff);
+ axisB.range[0] -= calculateAbsoluteDiff(axisA.range[0], totalRangeB, diff);
+ } else {
+ // increase axisB max and axisA min
+ axisB.range[1] += calculateAbsoluteDiff(axisB.range[1], totalRangeB, diff);
+ axisA.range[0] -= calculateAbsoluteDiff(axisA.range[0], totalRangeA, diff);
+ }
+}
+
+export default function updateAxes(plotlyElement: any, seriesList: any, layout: any, options: any) {
+ const updates = {};
+ if (isObject(layout.yaxis)) {
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'yaxis' does not exist on type '{}'.
+ updates.yaxis = {
+ ...layout.yaxis,
+ autorange: true,
+ range: null,
+ };
+ }
+ if (isObject(layout.yaxis2)) {
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'yaxis2' does not exist on type '{}'.
+ updates.yaxis2 = {
+ ...layout.yaxis2,
+ autorange: true,
+ range: null,
+ };
+ }
+
+ return [
+ updates,
+ () => {
+ // Update Y Ranges
+ if (isObject(layout.yaxis)) {
+ const axisOptions = options.yAxis[0];
+ const defaultRange = plotlyElement.layout.yaxis.range;
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'yaxis' does not exist on type '{}'.
+ updates.yaxis.autorange = false;
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'yaxis' does not exist on type '{}'.
+ updates.yaxis.range = calculateAxisRange(defaultRange, axisOptions.rangeMin, axisOptions.rangeMax);
+ }
+
+ if (isObject(layout.yaxis2)) {
+ const axisOptions = options.yAxis[1];
+ const defaultRange = plotlyElement.layout.yaxis2.range;
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'yaxis2' does not exist on type '{}'.
+ updates.yaxis2.autorange = false;
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'yaxis2' does not exist on type '{}'.
+ updates.yaxis2.range = calculateAxisRange(defaultRange, axisOptions.rangeMin, axisOptions.rangeMax);
+ }
+
+ // Swap Axes
+ if (options.swappedAxes) {
+ each(seriesList, series => {
+ series.orientation = "h";
+ const { x, y } = series;
+ series.x = y;
+ series.y = x;
+ });
+
+ const { xaxis } = layout;
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'yaxis' does not exist on type '{}'.
+ const { yaxis, yaxis2 } = updates;
+
+ if (isObject(xaxis) && isObject(yaxis)) {
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'xaxis' does not exist on type '{}'.
+ updates.xaxis = yaxis;
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'yaxis' does not exist on type '{}'.
+ updates.yaxis = xaxis;
+ }
+ if (isObject(yaxis2)) {
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'yaxis2' does not exist on type '{}'.
+ updates.yaxis2 = null;
+ }
+ }
+
+ // Align Y axes
+ if (options.alignYAxesAtZero && isObject(layout.yaxis) && isObject(layout.yaxis2)) {
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'yaxis' does not exist on type '{}'.
+ alignYAxesAtZero(updates.yaxis, updates.yaxis2);
+ }
+
+ return [updates, null]; // no further updates
+ },
+ ];
+}
diff --git a/viz-lib/src/visualizations/chart/plotly/updateChartSize.ts b/viz-lib/src/visualizations/chart/plotly/updateChartSize.ts
new file mode 100644
index 000000000..3a8548e1e
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/plotly/updateChartSize.ts
@@ -0,0 +1,136 @@
+import { find, pick, extend } from "lodash";
+
+function fixLegendContainer(plotlyElement: any) {
+ const legend = plotlyElement.querySelector(".legend");
+ if (legend) {
+ let node = legend.parentNode;
+ while (node) {
+ if (node.tagName.toLowerCase() === "svg") {
+ node.style.overflow = "visible";
+ break;
+ }
+ node = node.parentNode;
+ }
+ }
+}
+
+function placeLegendNextToPlot(plotlyElement: any, layout: any) {
+ const transformName = find(
+ ["transform", "WebkitTransform", "MozTransform", "MsTransform", "OTransform"],
+ prop => prop in plotlyElement.style
+ );
+
+ layout.legend = extend({}, layout.legend, {
+ orientation: "v",
+ // vertical legend will be rendered properly, so just place it to the right
+ // side of plot
+ y: 1,
+ x: 1,
+ xanchor: "left",
+ yanchor: "top",
+ });
+
+ const legend = plotlyElement.querySelector(".legend");
+ if (legend) {
+ // @ts-expect-error ts-migrate(2538) FIXME: Type 'undefined' cannot be used as an index type.
+ legend.style[transformName] = null;
+ }
+
+ return [pick(layout, ["width", "height", "legend"]), null]; // no further updates
+}
+
+function placeLegendBelowPlot(plotlyElement: any, layout: any) {
+ const transformName = find(
+ ["transform", "WebkitTransform", "MozTransform", "MsTransform", "OTransform"],
+ prop => prop in plotlyElement.style
+ );
+
+ // Save current `layout.height` value because `Plotly.relayout().then(...)` handler may be called multiple
+ // times within single update, and since the handler mutates `layout` object - it may lead to bugs
+ const layoutHeight = layout.height;
+
+ // change legend orientation to horizontal; plotly has a bug with this
+ // legend alignment - it does not preserve enough space under the plot;
+ // so we'll hack this: update plot (it will re-render legend), compute
+ // legend height, reduce plot size by legend height (but not less than
+ // half of plot container's height - legend will have max height equal to
+ // plot height), re-render plot again and offset legend to the space under
+ // the plot.
+ // Related issue: https://github.com/plotly/plotly.js/issues/1199
+ layout.legend = extend({}, layout.legend, {
+ orientation: "h",
+ // locate legend inside of plot area - otherwise plotly will preserve
+ // some amount of space under the plot; also this will limit legend height
+ // to plot's height
+ y: 0,
+ x: 0,
+ xanchor: "left",
+ yanchor: "bottom",
+ });
+
+ // set `overflow: visible` to svg containing legend because later we will
+ // position legend outside of it
+ fixLegendContainer(plotlyElement);
+
+ return [
+ pick(layout, ["width", "height", "legend"]),
+ () => {
+ const legend = plotlyElement.querySelector(".legend"); // eslint-disable-line no-shadow
+ if (legend) {
+ // compute real height of legend - items may be split into few columnns,
+ // also scrollbar may be shown
+ const bounds = legend.getBoundingClientRect();
+
+ // here we have two values:
+ // 1. height of plot container excluding height of legend items;
+ // it may be any value between 0 and plot container's height;
+ // 2. half of plot containers height. Legend cannot be larger than
+ // plot; if legend is too large, plotly will reduce it's height and
+ // show a scrollbar; in this case, height of plot === height of legend,
+ // so we can split container's height half by half between them.
+ layout.height = Math.floor(Math.max(layoutHeight / 2, layoutHeight - (bounds.bottom - bounds.top)));
+ // offset the legend
+ // @ts-expect-error ts-migrate(2538) FIXME: Type 'undefined' cannot be used as an index type.
+ legend.style[transformName] = "translate(0, " + layout.height + "px)";
+ return [pick(layout, ["height"]), null]; // no further updates
+ }
+ },
+ ];
+}
+
+function placeLegendAuto(plotlyElement: any, layout: any) {
+ if (layout.width <= 600) {
+ return placeLegendBelowPlot(plotlyElement, layout);
+ } else {
+ return placeLegendNextToPlot(plotlyElement, layout);
+ }
+}
+
+export default function updateChartSize(plotlyElement: any, layout: any, options: any) {
+ // update layout size to plot container
+ // plot size should be at least 5x5px
+ layout.width = Math.max(5, Math.floor(plotlyElement.offsetWidth));
+ layout.height = Math.max(5, Math.floor(plotlyElement.offsetHeight));
+
+ const [previousWidth, previousHeight] = plotlyElement.__previousSize || [];
+
+ if (layout.width === previousWidth && layout.height === previousHeight) {
+ return;
+ }
+
+ plotlyElement.__previousSize = [layout.width, layout.height];
+
+ if (options.legend.enabled) {
+ switch (options.legend.placement) {
+ case "auto":
+ return placeLegendAuto(plotlyElement, layout);
+ break;
+ case "below":
+ return placeLegendBelowPlot(plotlyElement, layout);
+ break;
+ // no default
+ }
+ } else {
+ return [pick(layout, ["width", "height"]), null]; // no further updates
+ }
+}
diff --git a/viz-lib/src/visualizations/chart/plotly/updateData.ts b/viz-lib/src/visualizations/chart/plotly/updateData.ts
new file mode 100644
index 000000000..c9cc6b912
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/plotly/updateData.ts
@@ -0,0 +1,236 @@
+import { isNil, each, extend, filter, identity, includes, map, sortBy } from "lodash";
+import { createNumberFormatter, formatSimpleTemplate } from "@/lib/value-format";
+import { normalizeValue } from "./utils";
+
+function shouldUseUnifiedXAxis(options: any) {
+ return options.sortX && options.xAxis.type === "category" && options.globalSeriesType !== "box";
+}
+
+function defaultFormatSeriesText(item: any) {
+ let result = item["@@y"];
+ if (item["@@yError"] !== undefined) {
+ result = `${result} \u00B1 ${item["@@yError"]}`;
+ }
+ if (item["@@yPercent"] !== undefined) {
+ result = `${item["@@yPercent"]} (${result})`;
+ }
+ if (item["@@size"] !== undefined) {
+ result = `${result}: ${item["@@size"]}`;
+ }
+ return result;
+}
+
+function defaultFormatSeriesTextForPie(item: any) {
+ return item["@@yPercent"] + " (" + item["@@y"] + ")";
+}
+
+function createTextFormatter(options: any) {
+ if (options.textFormat === "") {
+ return options.globalSeriesType === "pie" ? defaultFormatSeriesTextForPie : defaultFormatSeriesText;
+ }
+ return (item: any) => formatSimpleTemplate(options.textFormat, item);
+}
+
+function formatValue(value: any, axis: any, options: any) {
+ let axisType = null;
+ switch (axis) {
+ case "x":
+ axisType = options.xAxis.type;
+ break;
+ case "y":
+ axisType = options.yAxis[0].type;
+ break;
+ case "y2":
+ axisType = options.yAxis[1].type;
+ break;
+ // no default
+ }
+ return normalizeValue(value, axisType, options.dateTimeFormat);
+}
+
+function updateSeriesText(seriesList: any, options: any) {
+ const formatNumber = createNumberFormatter(options.numberFormat);
+ const formatPercent = createNumberFormatter(options.percentFormat);
+ const formatText = createTextFormatter(options);
+
+ const defaultY = options.missingValuesAsZero ? 0.0 : null;
+
+ each(seriesList, series => {
+ const seriesOptions = options.seriesOptions[series.name] || { type: options.globalSeriesType };
+
+ series.text = [];
+ series.hover = [];
+ const xValues = options.globalSeriesType === "pie" ? series.labels : series.x;
+ xValues.forEach((x: any) => {
+ const text = {
+ "@@name": series.name,
+ };
+ const item = series.sourceData.get(x) || { x, y: defaultY, row: { x, y: defaultY } };
+
+ const yValueIsAny = includes(["bubble", "scatter"], seriesOptions.type);
+
+ // for `formatValue` we have to use original value of `x` and `y`: `item.x`/`item.y` contains value
+ // already processed with `normalizeValue`, and if they were `moment` instances - they are formatted
+ // using default (ISO) date/time format. Here we need to use custom date/time format, so we pass original value
+ // to `formatValue` which will call `normalizeValue` again, but this time with different date/time format
+ // (if needed)
+ // @ts-expect-error ts-migrate(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message
+ text["@@x"] = formatValue(item.row.x, "x", options);
+ // @ts-expect-error ts-migrate(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message
+ text["@@y"] = yValueIsAny ? formatValue(item.row.y, series.yaxis, options) : formatNumber(item.y);
+ if (item.yError !== undefined) {
+ // @ts-expect-error ts-migrate(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message
+ text["@@yError"] = formatNumber(item.yError);
+ }
+ if (item.size !== undefined) {
+ // @ts-expect-error ts-migrate(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message
+ text["@@size"] = formatNumber(item.size);
+ }
+
+ if (options.series.percentValues || options.globalSeriesType === "pie") {
+ // @ts-expect-error ts-migrate(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message
+ text["@@yPercent"] = formatPercent(Math.abs(item.yPercent));
+ }
+
+ extend(text, item.row.$raw);
+
+ series.text.push(formatText(text));
+ });
+ });
+}
+
+function updatePercentValues(seriesList: any, options: any) {
+ if (options.series.percentValues) {
+ // Some series may not have corresponding x-values;
+ // do calculations for each x only for series that do have that x
+ const sumOfCorrespondingPoints = new Map();
+ each(seriesList, series => {
+ series.sourceData.forEach((item: any) => {
+ const sum = sumOfCorrespondingPoints.get(item.x) || 0;
+ sumOfCorrespondingPoints.set(item.x, sum + Math.abs(item.y || 0.0));
+ });
+ });
+
+ each(seriesList, series => {
+ const yValues: any = [];
+
+ series.sourceData.forEach((item: any) => {
+ if (isNil(item.y) && !options.missingValuesAsZero) {
+ item.yPercent = null;
+ } else {
+ const sum = sumOfCorrespondingPoints.get(item.x);
+ item.yPercent = (item.y / sum) * 100;
+ }
+ yValues.push(item.yPercent);
+ });
+
+ series.y = yValues;
+ });
+ }
+}
+
+function getUnifiedXAxisValues(seriesList: any, sorted: any) {
+ const set = new Set();
+ each(seriesList, series => {
+ // `Map.forEach` will walk items in insertion order
+ series.sourceData.forEach((item: any) => {
+ set.add(item.x);
+ });
+ });
+
+ const result = [...set];
+ return sorted ? sortBy(result, identity) : result;
+}
+
+function updateUnifiedXAxisValues(seriesList: any, options: any) {
+ const unifiedX = getUnifiedXAxisValues(seriesList, options.sortX);
+ const defaultY = options.missingValuesAsZero ? 0.0 : null;
+ each(seriesList, series => {
+ series.x = [];
+ series.y = [];
+ series.error_y.array = [];
+ each(unifiedX, x => {
+ series.x.push(x);
+ const item = series.sourceData.get(x);
+ if (item) {
+ series.y.push(options.series.percentValues ? item.yPercent : item.y);
+ series.error_y.array.push(item.yError);
+ } else {
+ series.y.push(defaultY);
+ series.error_y.array.push(null);
+ }
+ });
+ });
+}
+
+function updatePieData(seriesList: any, options: any) {
+ updateSeriesText(seriesList, options);
+}
+
+function updateLineAreaData(seriesList: any, options: any) {
+ // Apply "percent values" modification
+ updatePercentValues(seriesList, options);
+ if (options.series.stacking) {
+ updateUnifiedXAxisValues(seriesList, options);
+
+ // Calculate cumulative value for each x tick
+ const cumulativeValues = {};
+ each(seriesList, series => {
+ series.y = map(series.y, (y, i) => {
+ if (isNil(y) && !options.missingValuesAsZero) {
+ return null;
+ }
+ const x = series.x[i];
+ // @ts-expect-error ts-migrate(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message
+ const stackedY = y + (cumulativeValues[x] || 0.0);
+ // @ts-expect-error ts-migrate(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message
+ cumulativeValues[x] = stackedY;
+ return stackedY;
+ });
+ });
+ } else {
+ if (shouldUseUnifiedXAxis(options)) {
+ updateUnifiedXAxisValues(seriesList, options);
+ }
+ }
+
+ // Finally - update text labels
+ updateSeriesText(seriesList, options);
+}
+
+function updateDefaultData(seriesList: any, options: any) {
+ // Apply "percent values" modification
+ updatePercentValues(seriesList, options);
+
+ if (!options.series.stacking) {
+ if (shouldUseUnifiedXAxis(options)) {
+ updateUnifiedXAxisValues(seriesList, options);
+ }
+ }
+
+ // Finally - update text labels
+ updateSeriesText(seriesList, options);
+}
+
+export default function updateData(seriesList: any, options: any) {
+ // Use only visible series
+ const visibleSeriesList = filter(seriesList, s => s.visible === true);
+
+ if (visibleSeriesList.length > 0) {
+ switch (options.globalSeriesType) {
+ case "pie":
+ updatePieData(visibleSeriesList, options);
+ break;
+ case "line":
+ case "area":
+ updateLineAreaData(visibleSeriesList, options);
+ break;
+ case "heatmap":
+ break;
+ default:
+ updateDefaultData(visibleSeriesList, options);
+ break;
+ }
+ }
+ return seriesList;
+}
diff --git a/viz-lib/src/visualizations/chart/plotly/utils.ts b/viz-lib/src/visualizations/chart/plotly/utils.ts
new file mode 100644
index 000000000..b1551fd5b
--- /dev/null
+++ b/viz-lib/src/visualizations/chart/plotly/utils.ts
@@ -0,0 +1,26 @@
+import { isUndefined } from "lodash";
+import moment from "moment";
+// @ts-expect-error ts-migrate(7016) FIXME: Could not find a declaration file for module 'plot... Remove this comment to see the full error message
+import plotlyCleanNumber from "plotly.js/src/lib/clean_number";
+
+export function cleanNumber(value: any) {
+ return isUndefined(value) ? value : plotlyCleanNumber(value);
+}
+
+export function getSeriesAxis(series: any, options: any) {
+ const seriesOptions = options.seriesOptions[series.name] || { type: options.globalSeriesType };
+ if (seriesOptions.yAxis === 1 && (!options.series.stacking || seriesOptions.type === "line")) {
+ return "y2";
+ }
+ return "y";
+}
+
+export function normalizeValue(value: any, axisType: any, dateTimeFormat = "YYYY-MM-DD HH:mm:ss") {
+ if (axisType === "datetime" && moment.utc(value).isValid()) {
+ value = moment.utc(value);
+ }
+ if (moment.isMoment(value)) {
+ return value.format(dateTimeFormat);
+ }
+ return value;
+}
diff --git a/viz-lib/src/visualizations/choropleth/ColorPalette.ts b/viz-lib/src/visualizations/choropleth/ColorPalette.ts
new file mode 100644
index 000000000..b0ba6c303
--- /dev/null
+++ b/viz-lib/src/visualizations/choropleth/ColorPalette.ts
@@ -0,0 +1,11 @@
+import { extend } from "lodash";
+import ColorPalette from "@/visualizations/ColorPalette";
+
+export default extend(
+ {
+ White: "#ffffff",
+ Black: "#000000",
+ "Light Gray": "#dddddd",
+ },
+ ColorPalette
+);
diff --git a/viz-lib/src/visualizations/choropleth/Editor/BoundsSettings.tsx b/viz-lib/src/visualizations/choropleth/Editor/BoundsSettings.tsx
new file mode 100644
index 000000000..ae38080e7
--- /dev/null
+++ b/viz-lib/src/visualizations/choropleth/Editor/BoundsSettings.tsx
@@ -0,0 +1,105 @@
+import { isArray, isFinite, cloneDeep } from "lodash";
+import React, { useState, useEffect, useCallback } from "react";
+import { useDebouncedCallback } from "use-debounce";
+import * as Grid from "antd/lib/grid";
+import { Section, InputNumber, ControlLabel } from "@/components/visualizations/editor";
+import { EditorPropTypes } from "@/visualizations/prop-types";
+
+import useLoadGeoJson from "../hooks/useLoadGeoJson";
+import { getGeoJsonBounds } from "./utils";
+
+export default function BoundsSettings({ options, onOptionsChange }: any) {
+ // Bounds may be changed in editor or on preview (by drag/zoom map).
+ // Changes from preview does not come frequently (only when user release mouse button),
+ // but changes from editor should be debounced.
+ // Therefore this component has intermediate state to hold immediate user input,
+ // which is updated from `options.bounds` and by inputs immediately on user input,
+ // but `onOptionsChange` event is debounced and uses last value from internal state.
+
+ const [bounds, setBounds] = useState(options.bounds);
+ const [onOptionsChangeDebounced] = useDebouncedCallback(onOptionsChange, 200);
+
+ const [geoJson] = useLoadGeoJson(options.mapType);
+
+ // `options.bounds` could be empty only if user didn't edit bounds yet - through preview or in this editor.
+ // In this case we should keep empty bounds value because it tells renderer to fit map every time.
+ useEffect(() => {
+ if (options.bounds) {
+ setBounds(options.bounds);
+ } else {
+ const defaultBounds = getGeoJsonBounds(geoJson);
+ if (defaultBounds) {
+ setBounds(defaultBounds);
+ }
+ }
+ }, [options.bounds, geoJson]);
+
+ const updateBounds = useCallback(
+ (i, j, v) => {
+ v = parseFloat(v); // InputNumber may emit `null` and empty strings instead of numbers
+ if (isFinite(v)) {
+ const newBounds = cloneDeep(bounds);
+ newBounds[i][j] = v;
+ setBounds(newBounds);
+ onOptionsChangeDebounced({ bounds: newBounds });
+ }
+ },
+ [bounds, onOptionsChangeDebounced]
+ );
+
+ const boundsAvailable = isArray(bounds);
+
+ return (
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ {/* @ts-expect-error ts-migrate(2322) FIXME: Type 'string' is not assignable to type 'null | un... Remove this comment to see the full error message */}
+
+ {/* @ts-expect-error ts-migrate(2322) FIXME: Type 'Element' is not assignable to type 'null | u... Remove this comment to see the full error message */}
+
+
+ updateBounds(1, 0, value)}
+ />
+
+
+ updateBounds(1, 1, value)}
+ />
+
+
+
+
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ {/* @ts-expect-error ts-migrate(2322) FIXME: Type 'string' is not assignable to type 'null | un... Remove this comment to see the full error message */}
+
+ {/* @ts-expect-error ts-migrate(2322) FIXME: Type 'Element' is not assignable to type 'null | u... Remove this comment to see the full error message */}
+
+
+ updateBounds(0, 0, value)}
+ />
+
+
+ updateBounds(0, 1, value)}
+ />
+
+
+
+
+
+ );
+}
+
+BoundsSettings.propTypes = EditorPropTypes;
diff --git a/viz-lib/src/visualizations/choropleth/Editor/ColorsSettings.tsx b/viz-lib/src/visualizations/choropleth/Editor/ColorsSettings.tsx
new file mode 100644
index 000000000..d9d8c3e47
--- /dev/null
+++ b/viz-lib/src/visualizations/choropleth/Editor/ColorsSettings.tsx
@@ -0,0 +1,134 @@
+import React from "react";
+import { useDebouncedCallback } from "use-debounce";
+import { Section, Select, InputNumber, ColorPicker } from "@/components/visualizations/editor";
+import { EditorPropTypes } from "@/visualizations/prop-types";
+import ColorPalette from "../ColorPalette";
+
+export default function ColorsSettings({ options, onOptionsChange }: any) {
+ const [onOptionsChangeDebounced] = useDebouncedCallback(onOptionsChange, 200);
+
+ return (
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ onOptionsChange({ clusteringMode })}>
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ quantile
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ equidistant
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ k-means
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+
+
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ onOptionsChangeDebounced({ steps })}
+ />
+
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ onOptionsChange({ colors: { min } })}
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'Label' does not exist on type '({ classN... Remove this comment to see the full error message
+ addonAfter={ }
+ />
+
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ onOptionsChange({ colors: { max } })}
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'Label' does not exist on type '({ classN... Remove this comment to see the full error message
+ addonAfter={ }
+ />
+
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ onOptionsChange({ colors: { noValue } })}
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'Label' does not exist on type '({ classN... Remove this comment to see the full error message
+ addonAfter={ }
+ />
+
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ onOptionsChange({ colors: { background } })}
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'Label' does not exist on type '({ classN... Remove this comment to see the full error message
+ addonAfter={ }
+ />
+
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ onOptionsChange({ colors: { borders } })}
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'Label' does not exist on type '({ classN... Remove this comment to see the full error message
+ addonAfter={ }
+ />
+
+
+ );
+}
+
+ColorsSettings.propTypes = EditorPropTypes;
diff --git a/viz-lib/src/visualizations/choropleth/Editor/FormatSettings.tsx b/viz-lib/src/visualizations/choropleth/Editor/FormatSettings.tsx
new file mode 100644
index 000000000..331b465e6
--- /dev/null
+++ b/viz-lib/src/visualizations/choropleth/Editor/FormatSettings.tsx
@@ -0,0 +1,193 @@
+import { map } from "lodash";
+import React, { useMemo } from "react";
+import { useDebouncedCallback } from "use-debounce";
+import * as Grid from "antd/lib/grid";
+import {
+ Section,
+ Select,
+ Input,
+ Checkbox,
+ TextArea,
+ TextAlignmentSelect,
+ ContextHelp,
+} from "@/components/visualizations/editor";
+import { EditorPropTypes } from "@/visualizations/prop-types";
+
+import useLoadGeoJson from "../hooks/useLoadGeoJson";
+import { getGeoJsonFields } from "./utils";
+
+type OwnTemplateFormatHintProps = {
+ geoJsonProperties?: string[];
+};
+
+type TemplateFormatHintProps = OwnTemplateFormatHintProps & typeof TemplateFormatHint.defaultProps;
+
+function TemplateFormatHint({ geoJsonProperties }: TemplateFormatHintProps) {
+ return (
+ // @ts-expect-error ts-migrate(2746) FIXME: This JSX tag's 'children' prop expects a single ch... Remove this comment to see the full error message
+
+
+
+ All query result columns can be referenced using {"{{ column_name }}"}
syntax.
+
+
+ Use {"{{ @@value }}"}
to access formatted value.
+
+
+ {geoJsonProperties.length > 0 && (
+
+ GeoJSON properties could be accessed by these names:
+
+ {map(geoJsonProperties, property => (
+
+ {`{{ @@${property}}}`}
+
+ ))}
+
+
+ )}
+
+ );
+}
+
+TemplateFormatHint.defaultProps = {
+ geoJsonProperties: [],
+};
+
+export default function GeneralSettings({ options, onOptionsChange }: any) {
+ const [onOptionsChangeDebounced] = useDebouncedCallback(onOptionsChange, 200);
+ const [geoJson] = useLoadGeoJson(options.mapType);
+ const geoJsonFields = useMemo(() => getGeoJsonFields(geoJson), [geoJson]);
+
+ const templateFormatHint = ;
+
+ return (
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ onOptionsChange({ legend: { visible: event.target.checked } })}>
+ Show Legend
+
+
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+
+
+ onOptionsChange({ legend: { position } })}>
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ top / left
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ top / right
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ bottom / left
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ bottom / right
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+
+
+
+ onOptionsChange({ legend: { alignText: event.target.value } })}
+ />
+
+
+
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ onOptionsChange({ tooltip: { enabled: event.target.checked } })}>
+ Show Tooltip
+
+
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ onOptionsChange({ popup: { enabled: event.target.checked } })}>
+ Show Popup
+
+
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+
+ );
+}
+
+GeneralSettings.propTypes = EditorPropTypes;
diff --git a/viz-lib/src/visualizations/choropleth/Editor/GeneralSettings.tsx b/viz-lib/src/visualizations/choropleth/Editor/GeneralSettings.tsx
new file mode 100644
index 000000000..173149db1
--- /dev/null
+++ b/viz-lib/src/visualizations/choropleth/Editor/GeneralSettings.tsx
@@ -0,0 +1,108 @@
+import { isString, map, filter, get } from "lodash";
+import React, { useMemo, useCallback } from "react";
+import * as Grid from "antd/lib/grid";
+import { EditorPropTypes } from "@/visualizations/prop-types";
+import { Section, Select } from "@/components/visualizations/editor";
+import { visualizationsSettings } from "@/visualizations/visualizationsSettings";
+
+import useLoadGeoJson from "../hooks/useLoadGeoJson";
+import { getGeoJsonFields } from "./utils";
+
+export default function GeneralSettings({ options, data, onOptionsChange }: any) {
+ const [geoJson, isLoadingGeoJson] = useLoadGeoJson(options.mapType);
+ const geoJsonFields = useMemo(() => getGeoJsonFields(geoJson), [geoJson]);
+
+ // While geoJson is loading - show last selected field in select
+ const targetFields = isLoadingGeoJson ? filter([options.targetField], isString) : geoJsonFields;
+
+ const fieldNames = get(visualizationsSettings, `choroplethAvailableMaps.${options.mapType}.fieldNames`, {});
+
+ const handleMapChange = useCallback(
+ mapType => {
+ onOptionsChange({ mapType: mapType || null });
+ },
+ [onOptionsChange]
+ );
+
+ return (
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+
+ {map(visualizationsSettings.choroplethAvailableMaps, (_, mapType) => (
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message
+
+ {get(visualizationsSettings, `choroplethAvailableMaps.${mapType}.name`, mapType)}
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ ))}
+
+
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+
+
+ onOptionsChange({ keyColumn })}>
+ {map(data.columns, ({ name }) => (
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message
+
+ {name}
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ ))}
+
+
+
+ onOptionsChange({ targetField })}>
+ {map(targetFields, field => (
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message
+
+ {fieldNames[field] || field}
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ ))}
+
+
+
+
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ onOptionsChange({ valueColumn })}>
+ {map(data.columns, ({ name }) => (
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message
+
+ {name}
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ ))}
+
+
+
+ );
+}
+
+GeneralSettings.propTypes = EditorPropTypes;
diff --git a/viz-lib/src/visualizations/choropleth/Editor/index.ts b/viz-lib/src/visualizations/choropleth/Editor/index.ts
new file mode 100644
index 000000000..2ee945e41
--- /dev/null
+++ b/viz-lib/src/visualizations/choropleth/Editor/index.ts
@@ -0,0 +1,13 @@
+import createTabbedEditor from "@/components/visualizations/editor/createTabbedEditor";
+
+import GeneralSettings from "./GeneralSettings";
+import ColorsSettings from "./ColorsSettings";
+import FormatSettings from "./FormatSettings";
+import BoundsSettings from "./BoundsSettings";
+
+export default createTabbedEditor([
+ { key: "General", title: "General", component: GeneralSettings },
+ { key: "Colors", title: "Colors", component: ColorsSettings },
+ { key: "Format", title: "Format", component: FormatSettings },
+ { key: "Bounds", title: "Bounds", component: BoundsSettings },
+]);
diff --git a/viz-lib/src/visualizations/choropleth/Editor/utils.ts b/viz-lib/src/visualizations/choropleth/Editor/utils.ts
new file mode 100644
index 000000000..eaf54a6da
--- /dev/null
+++ b/viz-lib/src/visualizations/choropleth/Editor/utils.ts
@@ -0,0 +1,34 @@
+import { isObject, isArray, reduce, keys, uniq } from "lodash";
+import L from "leaflet";
+
+export function getGeoJsonFields(geoJson: any) {
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'features' does not exist on type 'object... Remove this comment to see the full error message
+ const features = isObject(geoJson) && isArray(geoJson.features) ? geoJson.features : [];
+ return reduce(
+ features,
+ // @ts-expect-error ts-migrate(2769) FIXME: No overload matches this call.
+ (result, feature) => {
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'properties' does not exist on type 'obje... Remove this comment to see the full error message
+ const properties = isObject(feature) && isObject(feature.properties) ? feature.properties : {};
+ return uniq([...result, ...keys(properties)]);
+ },
+ []
+ );
+}
+
+export function getGeoJsonBounds(geoJson: any) {
+ if (isObject(geoJson)) {
+ // @ts-expect-error ts-migrate(2345) FIXME: Argument of type 'object' is not assignable to par... Remove this comment to see the full error message
+ const layer = L.geoJSON(geoJson);
+ const bounds = layer.getBounds();
+ if (bounds.isValid()) {
+ return [
+ // @ts-expect-error ts-migrate(2551) FIXME: Property '_southWest' does not exist on type 'LatL... Remove this comment to see the full error message
+ [bounds._southWest.lat, bounds._southWest.lng],
+ // @ts-expect-error ts-migrate(2551) FIXME: Property '_northEast' does not exist on type 'LatL... Remove this comment to see the full error message
+ [bounds._northEast.lat, bounds._northEast.lng],
+ ];
+ }
+ }
+ return null;
+}
diff --git a/viz-lib/src/visualizations/choropleth/Renderer/Legend.tsx b/viz-lib/src/visualizations/choropleth/Renderer/Legend.tsx
new file mode 100644
index 000000000..d3cd97049
--- /dev/null
+++ b/viz-lib/src/visualizations/choropleth/Renderer/Legend.tsx
@@ -0,0 +1,32 @@
+import { map } from "lodash";
+import React from "react";
+import ColorPicker from "@/components/ColorPicker";
+
+type OwnProps = {
+ items?: {
+ color: string;
+ text: string;
+ }[];
+ alignText?: "left" | "center" | "right";
+};
+
+type Props = OwnProps & typeof Legend.defaultProps;
+
+export default function Legend({ items, alignText }: Props) {
+ return (
+
+ {map(items, (item, index) => (
+
+ {/* @ts-expect-error ts-migrate(2322) FIXME: Type 'string' is not assignable to type 'never'. */}
+
+
{item.text}
+
+ ))}
+
+ );
+}
+
+Legend.defaultProps = {
+ items: [],
+ alignText: "left",
+};
diff --git a/viz-lib/src/visualizations/choropleth/Renderer/index.tsx b/viz-lib/src/visualizations/choropleth/Renderer/index.tsx
new file mode 100644
index 000000000..89aa7a14b
--- /dev/null
+++ b/viz-lib/src/visualizations/choropleth/Renderer/index.tsx
@@ -0,0 +1,60 @@
+import { omit, noop } from "lodash";
+import React, { useState, useEffect, useRef } from "react";
+import { RendererPropTypes } from "@/visualizations/prop-types";
+import useMemoWithDeepCompare from "@/lib/hooks/useMemoWithDeepCompare";
+
+import useLoadGeoJson from "../hooks/useLoadGeoJson";
+import initChoropleth from "./initChoropleth";
+import { prepareData } from "./utils";
+import "./renderer.less";
+
+export default function Renderer({ data, options, onOptionsChange }: any) {
+ const [container, setContainer] = useState(null);
+ const [geoJson] = useLoadGeoJson(options.mapType);
+ const onBoundsChangeRef = useRef();
+ // @ts-expect-error ts-migrate(2322) FIXME: Type '(...args: any[]) => void' is not assignable ... Remove this comment to see the full error message
+ onBoundsChangeRef.current = onOptionsChange ? (bounds: any) => onOptionsChange({ ...options, bounds }) : noop;
+
+ const optionsWithoutBounds = useMemoWithDeepCompare(() => omit(options, ["bounds"]), [options]);
+
+ const [map, setMap] = useState(null);
+
+ useEffect(() => {
+ if (container) {
+ // @ts-expect-error ts-migrate(7019) FIXME: Rest parameter 'args' implicitly has an 'any[]' ty... Remove this comment to see the full error message
+ const _map = initChoropleth(container, (...args) => onBoundsChangeRef.current(...args));
+ // @ts-expect-error ts-migrate(2345) FIXME: Argument of type '{ updateLayers: (geoJson: any, d... Remove this comment to see the full error message
+ setMap(_map);
+ return () => {
+ _map.destroy();
+ };
+ }
+ }, [container]);
+
+ useEffect(() => {
+ if (map) {
+ // @ts-expect-error ts-migrate(2531) FIXME: Object is possibly 'null'.
+ map.updateLayers(
+ geoJson,
+ // @ts-expect-error ts-migrate(2532) FIXME: Object is possibly 'undefined'.
+ prepareData(data.rows, optionsWithoutBounds.keyColumn, optionsWithoutBounds.valueColumn),
+ options // detect changes for all options except bounds, but pass them all!
+ );
+ }
+ }, [map, geoJson, data.rows, optionsWithoutBounds]); // eslint-disable-line react-hooks/exhaustive-deps
+
+ // This may come only from editor
+ useEffect(() => {
+ if (map) {
+ // @ts-expect-error ts-migrate(2531) FIXME: Object is possibly 'null'.
+ map.updateBounds(options.bounds);
+ }
+ }, [map, options, onOptionsChange]);
+
+ return (
+ // @ts-expect-error ts-migrate(2322) FIXME: Type 'Dispatch>' is not assig... Remove this comment to see the full error message
+
+ );
+}
+
+Renderer.propTypes = RendererPropTypes;
diff --git a/viz-lib/src/visualizations/choropleth/Renderer/initChoropleth.tsx b/viz-lib/src/visualizations/choropleth/Renderer/initChoropleth.tsx
new file mode 100644
index 000000000..e79828a90
--- /dev/null
+++ b/viz-lib/src/visualizations/choropleth/Renderer/initChoropleth.tsx
@@ -0,0 +1,195 @@
+import { isFunction, isObject, isArray, map } from "lodash";
+import React from "react";
+import ReactDOM from "react-dom";
+import L from "leaflet";
+import "leaflet/dist/leaflet.css";
+import "leaflet-fullscreen";
+import "leaflet-fullscreen/dist/leaflet.fullscreen.css";
+import { formatSimpleTemplate } from "@/lib/value-format";
+import sanitize from "@/services/sanitize";
+import resizeObserver from "@/services/resizeObserver";
+import {
+ createNumberFormatter,
+ createScale,
+ darkenColor,
+ getColorByValue,
+ getValueForFeature,
+ prepareFeatureProperties,
+} from "./utils";
+import Legend from "./Legend";
+
+const CustomControl = L.Control.extend({
+ options: {
+ position: "topright",
+ },
+ onAdd() {
+ const div = document.createElement("div");
+ div.className = "leaflet-bar leaflet-custom-toolbar";
+ div.style.background = "#fff";
+ div.style.backgroundClip = "padding-box";
+ return div;
+ },
+ onRemove() {
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'getContainer' does not exist on type '{ ... Remove this comment to see the full error message
+ ReactDOM.unmountComponentAtNode(this.getContainer());
+ },
+});
+
+function prepareLayer({ feature, layer, data, options, limits, colors, formatValue }: any) {
+ const value = getValueForFeature(feature, data, options.targetField);
+ const valueFormatted = formatValue(value);
+ const featureData = prepareFeatureProperties(feature, valueFormatted, data, options.targetField);
+ const color = getColorByValue(value, limits, colors, options.colors.noValue);
+
+ layer.setStyle({
+ color: options.colors.borders,
+ weight: 1,
+ fillColor: color,
+ fillOpacity: 1,
+ });
+
+ if (options.tooltip.enabled) {
+ layer.bindTooltip(sanitize(formatSimpleTemplate(options.tooltip.template, featureData)), { sticky: true });
+ }
+
+ if (options.popup.enabled) {
+ layer.bindPopup(sanitize(formatSimpleTemplate(options.popup.template, featureData)));
+ }
+
+ layer.on("mouseover", () => {
+ layer.setStyle({
+ weight: 2,
+ fillColor: darkenColor(color),
+ });
+ });
+ layer.on("mouseout", () => {
+ layer.setStyle({
+ weight: 1,
+ fillColor: color,
+ });
+ });
+}
+
+function validateBounds(bounds: any, fallbackBounds: any) {
+ if (bounds) {
+ bounds = L.latLngBounds(bounds[0], bounds[1]);
+ if (bounds.isValid()) {
+ return bounds;
+ }
+ }
+ if (fallbackBounds && fallbackBounds.isValid()) {
+ return fallbackBounds;
+ }
+ return null;
+}
+
+export default function initChoropleth(container: any, onBoundsChange: any) {
+ const _map = L.map(container, {
+ center: [0.0, 0.0],
+ zoom: 1,
+ zoomSnap: 0,
+ scrollWheelZoom: false,
+ maxBoundsViscosity: 1,
+ attributionControl: false,
+ // @ts-expect-error ts-migrate(2345) FIXME: Argument of type '{ center: [number, number]; zoom... Remove this comment to see the full error message
+ fullscreenControl: true,
+ });
+ let _choropleth: any = null;
+ const _legend = new CustomControl();
+
+ function handleMapBoundsChange() {
+ if (isFunction(onBoundsChange)) {
+ const bounds = _map.getBounds();
+ onBoundsChange([
+ // @ts-expect-error ts-migrate(2551) FIXME: Property '_southWest' does not exist on type 'LatL... Remove this comment to see the full error message
+ [bounds._southWest.lat, bounds._southWest.lng],
+ // @ts-expect-error ts-migrate(2551) FIXME: Property '_northEast' does not exist on type 'LatL... Remove this comment to see the full error message
+ [bounds._northEast.lat, bounds._northEast.lng],
+ ]);
+ }
+ }
+
+ let boundsChangedFromMap = false;
+ const onMapMoveEnd = () => {
+ handleMapBoundsChange();
+ };
+ _map.on("focus", () => {
+ boundsChangedFromMap = true;
+ _map.on("moveend", onMapMoveEnd);
+ });
+ _map.on("blur", () => {
+ _map.off("moveend", onMapMoveEnd);
+ boundsChangedFromMap = false;
+ });
+
+ function updateLayers(geoJson: any, data: any, options: any) {
+ _map.eachLayer(layer => _map.removeLayer(layer));
+ _map.removeControl(_legend);
+
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'features' does not exist on type 'object... Remove this comment to see the full error message
+ if (!isObject(geoJson) || !isArray(geoJson.features)) {
+ _choropleth = null;
+ // @ts-expect-error ts-migrate(2345) FIXME: Argument of type 'null' is not assignable to param... Remove this comment to see the full error message
+ _map.setMaxBounds(null);
+ return;
+ }
+
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'features' does not exist on type 'object... Remove this comment to see the full error message
+ const { limits, colors, legend } = createScale(geoJson.features, data, options);
+ const formatValue = createNumberFormatter(options.valueFormat, options.noValuePlaceholder);
+
+ // @ts-expect-error ts-migrate(2345) FIXME: Argument of type 'object' is not assignable to par... Remove this comment to see the full error message
+ _choropleth = L.geoJSON(geoJson, {
+ onEachFeature(feature, layer) {
+ prepareLayer({ feature, layer, data, options, limits, colors, formatValue });
+ },
+ }).addTo(_map);
+
+ const mapBounds = _choropleth.getBounds();
+ const bounds = validateBounds(options.bounds, mapBounds);
+ _map.fitBounds(bounds, { animate: false, duration: 0 });
+
+ // equivalent to `_map.setMaxBounds(mapBounds)` but without animation
+ _map.options.maxBounds = mapBounds;
+ _map.panInsideBounds(mapBounds, { animate: false, duration: 0 });
+
+ // update legend
+ if (options.legend.visible && legend.length > 0) {
+ _legend.setPosition(options.legend.position.replace("-", ""));
+ _map.addControl(_legend);
+ ReactDOM.render(
+ // @ts-expect-error ts-migrate(2769) FIXME: No overload matches this call.
+ ({ ...item, text: formatValue(item.limit) }))}
+ alignText={options.legend.alignText}
+ />,
+ _legend.getContainer()
+ );
+ }
+ }
+
+ function updateBounds(bounds: any) {
+ if (!boundsChangedFromMap) {
+ const layerBounds = _choropleth ? _choropleth.getBounds() : _map.getBounds();
+ bounds = validateBounds(bounds, layerBounds);
+ if (bounds) {
+ _map.fitBounds(bounds, { animate: false, duration: 0 });
+ }
+ }
+ }
+
+ const unwatchResize = resizeObserver(container, () => {
+ _map.invalidateSize(false);
+ });
+
+ return {
+ updateLayers,
+ updateBounds,
+ destroy() {
+ unwatchResize();
+ _map.removeControl(_legend); // _map.remove() does not cleanup controls - bug in Leaflet?
+ _map.remove();
+ },
+ };
+}
diff --git a/viz-lib/src/visualizations/choropleth/Renderer/renderer.less b/viz-lib/src/visualizations/choropleth/Renderer/renderer.less
new file mode 100644
index 000000000..64a37072f
--- /dev/null
+++ b/viz-lib/src/visualizations/choropleth/Renderer/renderer.less
@@ -0,0 +1,32 @@
+.choropleth-visualization-legend {
+ padding: 3px;
+ cursor: default;
+
+ > div {
+ line-height: 1;
+ margin: 5px;
+ }
+
+ .legend-item {
+ display: flex;
+ align-items: center;
+
+ .color-swatch {
+ margin-right: 5px;
+ }
+
+ .legend-item-text {
+ flex: 1 1 auto;
+
+ &.text-left {
+ text-align: left;
+ }
+ &.text-center {
+ text-align: center;
+ }
+ &.text-right {
+ text-align: right;
+ }
+ }
+ }
+}
diff --git a/viz-lib/src/visualizations/choropleth/Renderer/utils.ts b/viz-lib/src/visualizations/choropleth/Renderer/utils.ts
new file mode 100644
index 000000000..9c574edad
--- /dev/null
+++ b/viz-lib/src/visualizations/choropleth/Renderer/utils.ts
@@ -0,0 +1,112 @@
+import { isString, isObject, isFinite, each, map, extend, uniq, filter, first } from "lodash";
+import chroma from "chroma-js";
+import { createNumberFormatter as createFormatter } from "@/lib/value-format";
+
+export function darkenColor(color: any) {
+ return chroma(color)
+ .darken()
+ .hex();
+}
+
+export function createNumberFormatter(format: any, placeholder: any) {
+ const formatter = createFormatter(format);
+ return (value: any) => {
+ if (isFinite(value)) {
+ return formatter(value);
+ }
+ return placeholder;
+ };
+}
+
+export function prepareData(data: any, keyColumn: any, valueColumn: any) {
+ if (!keyColumn || !valueColumn) {
+ return {};
+ }
+
+ const result = {};
+ each(data, item => {
+ if (item[keyColumn]) {
+ const value = parseFloat(item[valueColumn]);
+ // @ts-expect-error ts-migrate(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message
+ result[item[keyColumn]] = {
+ code: item[keyColumn],
+ value: isFinite(value) ? value : undefined,
+ item,
+ };
+ }
+ });
+ return result;
+}
+
+export function prepareFeatureProperties(feature: any, valueFormatted: any, data: any, targetField: any) {
+ const result = {};
+ each(feature.properties, (value, key) => {
+ // @ts-expect-error ts-migrate(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message
+ result["@@" + key] = value;
+ });
+ // @ts-expect-error ts-migrate(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message
+ result["@@value"] = valueFormatted;
+ const datum = data[feature.properties[targetField]] || {};
+ return extend(result, datum.item);
+}
+
+export function getValueForFeature(feature: any, data: any, targetField: any) {
+ const code = feature.properties[targetField];
+ if (isString(code) && isObject(data[code])) {
+ return data[code].value;
+ }
+ return undefined;
+}
+
+export function getColorByValue(value: any, limits: any, colors: any, defaultColor: any) {
+ if (isFinite(value)) {
+ for (let i = 0; i < limits.length; i += 1) {
+ if (value <= limits[i]) {
+ return colors[i];
+ }
+ }
+ }
+ return defaultColor;
+}
+
+export function createScale(features: any, data: any, options: any) {
+ // Calculate limits
+ const values = uniq(
+ filter(
+ map(features, feature => getValueForFeature(feature, data, options.targetField)),
+ isFinite
+ )
+ );
+ if (values.length === 0) {
+ return {
+ limits: [],
+ colors: [],
+ legend: [],
+ };
+ }
+ const steps = Math.min(values.length, options.steps);
+ if (steps === 1) {
+ return {
+ limits: values,
+ colors: [options.colors.max],
+ legend: [
+ {
+ color: options.colors.max,
+ limit: first(values),
+ },
+ ],
+ };
+ }
+ const limits = chroma.limits(values, options.clusteringMode, steps - 1);
+
+ // Create color buckets
+ const colors = chroma.scale([options.colors.min, options.colors.max]).colors(limits.length);
+
+ // Group values for legend
+ const legend = map(colors, (color, index) => ({
+ color,
+ limit: limits[index],
+ })).reverse();
+
+ return { limits, colors, legend };
+}
diff --git a/viz-lib/src/visualizations/choropleth/getOptions.ts b/viz-lib/src/visualizations/choropleth/getOptions.ts
new file mode 100644
index 000000000..d9be2af08
--- /dev/null
+++ b/viz-lib/src/visualizations/choropleth/getOptions.ts
@@ -0,0 +1,64 @@
+import { isNil, merge, first, keys, get } from "lodash";
+import { visualizationsSettings } from "@/visualizations/visualizationsSettings";
+import ColorPalette from "./ColorPalette";
+
+function getDefaultMap() {
+ return first(keys(visualizationsSettings.choroplethAvailableMaps)) || null;
+}
+
+const DEFAULT_OPTIONS = {
+ mapType: "countries",
+ keyColumn: null,
+ targetField: null,
+ valueColumn: null,
+ clusteringMode: "e",
+ steps: 5,
+ valueFormat: "0,0.00",
+ noValuePlaceholder: "N/A",
+ colors: {
+ min: ColorPalette["Light Blue"],
+ max: ColorPalette["Dark Blue"],
+ background: ColorPalette.White,
+ borders: ColorPalette.White,
+ noValue: ColorPalette["Light Gray"],
+ },
+ legend: {
+ visible: true,
+ position: "bottom-left",
+ alignText: "right",
+ },
+ tooltip: {
+ enabled: true,
+ template: "{{ @@name }} : {{ @@value }}",
+ },
+ popup: {
+ enabled: true,
+ template: "Country: {{ @@name_long }} ({{ @@iso_a2 }}) \n \nValue: {{ @@value }} ",
+ },
+};
+
+export default function getOptions(options: any) {
+ const result = merge({}, DEFAULT_OPTIONS, options);
+
+ // Both renderer and editor always provide new `bounds` array, so no need to clone it here.
+ // Keeping original object also reduces amount of updates in components
+ result.bounds = get(options, "bounds");
+
+ // @ts-expect-error ts-migrate(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message
+ if (isNil(visualizationsSettings.choroplethAvailableMaps[result.mapType])) {
+ result.mapType = getDefaultMap();
+ }
+
+ // backward compatibility
+ if (!isNil(result.countryCodeColumn)) {
+ result.keyColumn = result.countryCodeColumn;
+ }
+ delete result.countryCodeColumn;
+
+ if (!isNil(result.countryCodeType)) {
+ result.targetField = result.countryCodeType;
+ }
+ delete result.countryCodeType;
+
+ return result;
+}
diff --git a/viz-lib/src/visualizations/choropleth/hooks/useLoadGeoJson.ts b/viz-lib/src/visualizations/choropleth/hooks/useLoadGeoJson.ts
new file mode 100644
index 000000000..b1ca2b4f4
--- /dev/null
+++ b/viz-lib/src/visualizations/choropleth/hooks/useLoadGeoJson.ts
@@ -0,0 +1,40 @@
+import { isString, isObject, get } from "lodash";
+import { useState, useEffect } from "react";
+import axios from "axios";
+import { visualizationsSettings } from "@/visualizations/visualizationsSettings";
+import createReferenceCountingCache from "@/lib/referenceCountingCache";
+
+const cache = createReferenceCountingCache();
+
+export default function useLoadGeoJson(mapType: any) {
+ const [geoJson, setGeoJson] = useState(null);
+ const [isLoading, setIsLoading] = useState(false);
+
+ useEffect(() => {
+ const mapUrl = get(visualizationsSettings, `choroplethAvailableMaps.${mapType}.url`, undefined);
+
+ if (isString(mapUrl)) {
+ setIsLoading(true);
+ let cancelled = false;
+
+ const promise = cache.get(mapUrl, () => axios.get(mapUrl).catch(() => null));
+ promise.then(({ data }: any) => {
+ if (!cancelled) {
+ // @ts-expect-error ts-migrate(2345) FIXME: Argument of type 'object | null' is not assignable... Remove this comment to see the full error message
+ setGeoJson(isObject(data) ? data : null);
+ setIsLoading(false);
+ }
+ });
+
+ return () => {
+ cancelled = true;
+ cache.release(mapUrl);
+ };
+ } else {
+ setGeoJson(null);
+ setIsLoading(false);
+ }
+ }, [mapType]);
+
+ return [geoJson, isLoading];
+}
diff --git a/viz-lib/src/visualizations/choropleth/index.ts b/viz-lib/src/visualizations/choropleth/index.ts
new file mode 100644
index 000000000..1b0f56929
--- /dev/null
+++ b/viz-lib/src/visualizations/choropleth/index.ts
@@ -0,0 +1,15 @@
+import getOptions from "./getOptions";
+import Renderer from "./Renderer";
+import Editor from "./Editor";
+
+export default {
+ type: "CHOROPLETH",
+ name: "Map (Choropleth)",
+ getOptions,
+ Renderer,
+ Editor,
+
+ defaultColumns: 3,
+ defaultRows: 8,
+ minColumns: 2,
+};
diff --git a/viz-lib/src/visualizations/choropleth/maps/convert-projection.ts b/viz-lib/src/visualizations/choropleth/maps/convert-projection.ts
new file mode 100644
index 000000000..afb34aea9
--- /dev/null
+++ b/viz-lib/src/visualizations/choropleth/maps/convert-projection.ts
@@ -0,0 +1,43 @@
+// This helper converts USA map from Mercator projection to Albers (USA)
+// Usage: `node convert-projection.js > usa-albers.geo.json`
+
+const { each, map, filter } = require("lodash");
+// @ts-expect-error ts-migrate(2403) FIXME: Subsequent variable declarations must have the sam... Remove this comment to see the full error message
+const d3 = require("d3");
+
+// @ts-expect-error ts-migrate(2339) FIXME: Property 'geo' does not exist on type 'typeof impo... Remove this comment to see the full error message
+const albersUSA = d3.geo.albersUsa();
+// @ts-expect-error ts-migrate(2339) FIXME: Property 'geo' does not exist on type 'typeof impo... Remove this comment to see the full error message
+const mercator = d3.geo.mercator();
+
+const geojson = require("./usa.geo.json");
+
+function convertPoint(coord: any) {
+ const pt = albersUSA(coord);
+ return pt ? mercator.invert(pt) : null;
+}
+
+function convertLineString(points: any) {
+ return filter(map(points, convertPoint));
+}
+
+function convertPolygon(polygon: any) {
+ return map(polygon, convertLineString);
+}
+
+function convertMultiPolygon(multiPolygon: any) {
+ return map(multiPolygon, convertPolygon);
+}
+
+each(geojson.features, (feature: any) => {
+ switch (feature.geometry.type) {
+ case "Polygon":
+ feature.geometry.coordinates = convertPolygon(feature.geometry.coordinates);
+ break;
+ case "MultiPolygon":
+ feature.geometry.coordinates = convertMultiPolygon(feature.geometry.coordinates);
+ break;
+ }
+});
+
+console.log(JSON.stringify(geojson));
diff --git a/viz-lib/src/visualizations/choropleth/maps/countries.geo.json b/viz-lib/src/visualizations/choropleth/maps/countries.geo.json
new file mode 100644
index 000000000..d124a70d9
--- /dev/null
+++ b/viz-lib/src/visualizations/choropleth/maps/countries.geo.json
@@ -0,0 +1 @@
+{"type":"FeatureCollection","features":[{"type":"Feature","properties":{"abbrev":"Belize","name":"Belize","name_long":"Belize","iso_a2":"BZ","iso_a3":"BLZ","iso_n3":"084"},"geometry":{"type":"Polygon","coordinates":[[[-89.14308041050332,17.80831899664932],[-89.15090938999553,17.95546763760042],[-89.02985734735182,18.001511338772488],[-88.84834387892661,17.883198147040233],[-88.49012285027935,18.486830552641603],[-88.3000310940937,18.4999822046599],[-88.29633622918482,18.35327281338327],[-88.10681291375437,18.348673610909287],[-88.1234785631685,18.07667470954101],[-88.2853549873228,17.644142971258034],[-88.19786678745265,17.489475409408456],[-88.30264075392444,17.131693630435663],[-88.23951799187991,17.036066392479555],[-88.35542822951057,16.530774237529627],[-88.55182451043585,16.265467434143147],[-88.73243364129594,16.233634751851355],[-88.93061275913527,15.887273464415074],[-89.22912167026928,15.88693756760517],[-89.15080603713095,17.015576687075836],[-89.14308041050332,17.80831899664932]]]}},{"type":"Feature","properties":{"abbrev":"Can.","name":"Canada","name_long":"Canada","iso_a2":"CA","iso_a3":"CAN","iso_n3":"124"},"geometry":{"type":"MultiPolygon","coordinates":[[[[-63.6645,46.55001],[-62.9393,46.41587],[-62.01208,46.44314],[-62.50391,46.03339],[-62.87433,45.96818],[-64.1428,46.39265],[-64.39261,46.72747],[-64.01486,47.03601],[-63.6645,46.55001]]],[[[-61.806305,49.10506],[-62.29318,49.08717],[-63.58926,49.40069],[-64.51912,49.87304],[-64.17322,49.95718],[-62.85829,49.70641],[-61.835585,49.28855],[-61.806305,49.10506]]],[[[-123.51000158755114,48.51001089130344],[-124.0128907883995,48.370846259141416],[-125.65501277733837,48.8250045843385],[-125.95499446679275,49.179995835967645],[-126.85000443587187,49.53000031188043],[-127.0299934495444,49.81499583597008],[-128.05933630436624,49.9949590114266],[-128.44458410710217,50.539137681676124],[-128.35841365625544,50.770648098343685],[-127.3085810960299,50.55257355407195],[-126.69500097721232,50.400903225295394],[-125.75500667382319,50.29501821552938],[-125.4150015875588,49.95000051533261],[-124.92076818911934,49.475274970083404],[-123.92250870832102,49.06248362893581],[-123.51000158755114,48.51001089130344]]],[[[-56.13403581401712,50.6870097926793],[-56.795881720595276,49.81230866149096],[-56.1431050278843,50.150117499382844],[-55.471492275602934,49.93581533466846],[-55.82240108908093,49.58712860777911],[-54.935142584845664,49.31301097268684],[-54.47377539734378,49.55669118915918],[-53.476549445191324,49.24913890237405],[-53.78601375997124,48.51678050393363],[-53.086133999226256,48.687803656603535],[-52.958648240762244,48.157164211614486],[-52.64809872090419,47.5355484075755],[-53.069158291218336,46.65549876564495],[-53.52145626485304,46.61829173439483],[-54.17893551290254,46.80706574155701],[-53.961868659060485,47.62520701760192],[-54.24048214376214,47.75227936460763],[-55.4007730780115,46.884993801453135],[-55.99748084168584,46.9197203639533],[-55.29121904155278,47.389562486351],[-56.25079871278052,47.63254507098739],[-57.3252292547771,47.572807115258],[-59.26601518414677,47.603347886742505],[-59.419494188053704,47.899453843774864],[-58.796586473207405,48.25152537697949],[-59.231624518456535,48.52318838153781],[-58.39180497906523,49.12558055276418],[-57.35868974468604,50.718274034215845],[-56.73865007183201,51.28743825947853],[-55.870976935435294,51.632094224649194],[-55.406974249886616,51.58827261006573],[-55.60021826844209,51.31707469339793],[-56.13403581401712,50.6870097926793]]],[[[-133.1800040417117,54.16997549093531],[-132.71000788443132,54.040009315423525],[-131.74998958400326,54.12000438090922],[-132.049480347351,52.984621487024526],[-131.1790425218266,52.180432847698285],[-131.57782954982292,52.18237071390925],[-132.18042842677855,52.639707139692405],[-132.54999243231387,53.100014960332146],[-133.05461117875552,53.41146881775537],[-133.2396644827927,53.8510802272624],[-133.1800040417117,54.16997549093531]]],[[[-79.26582,62.158675],[-79.65752,61.63308],[-80.09956,61.7181],[-80.36215,62.01649],[-80.315395,62.085565],[-79.92939,62.3856],[-79.52002,62.36371],[-79.26582,62.158675]]],[[[-81.89825,62.7108],[-83.06857,62.15922],[-83.77462,62.18231],[-83.99367,62.4528],[-83.25048,62.91409],[-81.87699,62.90458],[-81.89825,62.7108]]],[[[-85.16130794954985,65.65728465439281],[-84.97576371940596,65.217518215589],[-84.4640120104195,65.37177236598018],[-83.88262630891975,65.10961782496355],[-82.78757687043877,64.76669302027469],[-81.64201371939254,64.45513580998696],[-81.55344031444425,63.979609280037145],[-80.81736121287886,64.05748566350101],[-80.10345130076661,63.725981350348604],[-80.99101986359568,63.41124603947497],[-82.54717810741701,63.65172231714524],[-83.10879757356506,64.10187571883972],[-84.10041663281388,63.56971181909802],[-85.52340471061902,63.05237905542409],[-85.86676876498237,63.637252916103556],[-87.22198320183674,63.541238104905226],[-86.35275977247127,64.03583323837071],[-86.22488644076513,64.82291697860826],[-85.88384782585487,65.73877838811705],[-85.16130794954985,65.65728465439281]]],[[[-75.86588,67.14886],[-76.98687,67.09873],[-77.2364,67.58809],[-76.81166,68.14856],[-75.89521,68.28721],[-75.1145,68.01036],[-75.10333,67.58202],[-75.21597,67.44425],[-75.86588,67.14886]]],[[[-95.64768120380052,69.10769035832178],[-96.2695212038006,68.75704035832175],[-97.61740120380057,69.0600303583218],[-98.43180120380052,68.9507003583218],[-99.79740120380053,69.4000303583218],[-98.91740120380055,69.7100303583218],[-98.2182612038005,70.14354035832176],[-97.15740120380056,69.86003035832181],[-96.55740120380054,69.68003035832176],[-96.25740120380053,69.49003035832177],[-95.64768120380052,69.10769035832178]]],[[[-90.5471,69.49766],[-90.55151,68.47499],[-89.21515,69.25873],[-88.01966,68.61508],[-88.31749,67.87338],[-87.35017,67.19872],[-86.30607,67.92146],[-85.57664,68.78456],[-85.52197,69.88211],[-84.10081,69.80539],[-82.62258,69.65826],[-81.28043,69.16202],[-81.2202,68.66567],[-81.96436,68.13253],[-81.25928,67.59716],[-81.38653,67.11078],[-83.34456,66.41154],[-84.73542,66.2573],[-85.76943,66.55833],[-86.0676,66.05625],[-87.03143,65.21297],[-87.32324,64.77563],[-88.48296,64.09897],[-89.91444,64.03273],[-90.70398,63.61017],[-90.77004,62.96021],[-91.93342,62.83508],[-93.15698,62.02469],[-94.24153,60.89865],[-94.62931,60.11021],[-94.6846,58.94882],[-93.21502,58.78212],[-92.76462,57.84571],[-92.29703,57.08709],[-90.89769,57.28468],[-89.03953,56.85172],[-88.03978,56.47162],[-87.32421,55.99914],[-86.07121,55.72383],[-85.01181,55.3026],[-83.36055,55.24489],[-82.27285,55.14832],[-82.4362,54.28227],[-82.12502,53.27703],[-81.40075,52.15788],[-79.91289,51.20842],[-79.14301,51.53393],[-78.60191,52.56208],[-79.12421,54.14145],[-79.82958,54.66772],[-78.22874,55.13645],[-77.0956,55.83741],[-76.54137,56.53423],[-76.62319,57.20263],[-77.30226,58.05209],[-78.51688,58.80458],[-77.33676,59.85261],[-77.77272,60.75788],[-78.10687,62.31964],[-77.41067,62.55053],[-75.69621,62.2784],[-74.6682,62.18111],[-73.83988,62.4438],[-72.90853,62.10507],[-71.67708,61.52535],[-71.37369,61.13717],[-69.59042,61.06141],[-69.62033,60.22125],[-69.2879,58.95736],[-68.37455,58.80106],[-67.64976,58.21206],[-66.20178,58.76731],[-65.24517,59.87071],[-64.58352,60.33558],[-63.80475,59.4426],[-62.50236,58.16708],[-61.39655,56.96745],[-61.79866,56.33945],[-60.46853,55.77548],[-59.56962,55.20407],[-57.97508,54.94549],[-57.3332,54.6265],[-56.93689,53.78032],[-56.15811,53.64749],[-55.75632,53.27036],[-55.68338,52.14664],[-56.40916,51.7707],[-57.12691,51.41972],[-58.77482,51.0643],[-60.03309,50.24277],[-61.72366,50.08046],[-63.86251,50.29099],[-65.36331,50.2982],[-66.39905,50.22897],[-67.23631,49.51156],[-68.51114,49.06836],[-69.95362,47.74488],[-71.10458,46.82171],[-70.25522,46.98606],[-68.65,48.3],[-66.55243,49.1331],[-65.05626,49.23278],[-64.17099,48.74248],[-65.11545,48.07085],[-64.79854,46.99297],[-64.47219,46.23849],[-63.17329,45.73902],[-61.52072,45.88377],[-60.51815,47.00793],[-60.4486,46.28264],[-59.80287,45.9204],[-61.03988,45.26525],[-63.25471,44.67014],[-64.24656,44.26553],[-65.36406,43.54523],[-66.1234,43.61867],[-66.16173,44.46512],[-64.42549,45.29204],[-66.02605,45.25931],[-67.13741,45.13753],[-67.79134,45.70281],[-67.79046,47.06636],[-68.23444,47.35486],[-68.905,47.185],[-69.237216,47.447781],[-69.99997,46.69307],[-70.305,45.915],[-70.66,45.46],[-71.08482,45.30524],[-71.405,45.255],[-71.50506,45.0082],[-73.34783,45.00738],[-74.867,45.00048],[-75.31821,44.81645],[-76.375,44.09631],[-76.5,44.01845889375872],[-76.82003414580558,43.628784288093755],[-77.7378850979577,43.629055589363304],[-78.72027991404238,43.625089423184875],[-79.17167355011188,43.46633942318422],[-79.01,43.27],[-78.92,42.965],[-78.9393621487437,42.86361135514804],[-80.24744767934794,42.36619985612259],[-81.27774654816716,42.20902598730686],[-82.43927771679162,41.675105088867156],[-82.69008928092018,41.675105088867156],[-83.02981014680694,41.83279572200584],[-83.14199968131256,41.975681057292825],[-83.12,42.08],[-82.9,42.43],[-82.43,42.98],[-82.1376423815039,43.571087551439916],[-82.33776312543108,44.44],[-82.55092464875818,45.347516587905375],[-83.59285071484308,45.81689362241237],[-83.46955074739463,45.99468638771259],[-83.61613094759059,46.11692698829907],[-83.89076534700575,46.11692698829907],[-84.09185126416148,46.275418606138174],[-84.14211951367338,46.51222585711574],[-84.3367,46.40877],[-84.6049,46.4396],[-84.54374874544587,46.538684190449146],[-84.77923824739992,46.637101955749046],[-84.87607988151485,46.90008331968238],[-85.65236324740343,47.22021881773051],[-86.46199083122826,47.55333801939204],[-87.43979262330024,47.94],[-88.37811418328673,48.302917588893735],[-89.27291744663668,48.019808254582664],[-89.6,48.01],[-90.83,48.27],[-91.64,48.14],[-92.61,48.45],[-93.63087,48.60926],[-94.32914,48.67074],[-94.64,48.84],[-94.81758,49.38905],[-95.15609,49.38425],[-95.15906950917204,49],[-97.22872000000481,49.0007],[-100.65,49],[-104.04826,48.99986],[-107.05,49],[-110.05,49],[-113,49],[-116.04818,49],[-117.03121,49],[-120,49],[-122.84,49],[-122.97421,49.0025377777778],[-124.91024,49.98456],[-125.62461,50.41656],[-127.43561,50.83061],[-127.99276,51.71583],[-127.85032,52.32961],[-129.12979,52.75538],[-129.30523,53.56159],[-130.51497,54.28757],[-130.53611,54.80278],[-129.98,55.285],[-130.00778,55.91583],[-131.70781,56.55212],[-132.73042,57.69289],[-133.35556,58.41028],[-134.27111,58.86111],[-134.945,59.27056],[-135.47583,59.78778],[-136.47972,59.46389],[-137.4525,58.905],[-138.34089,59.56211],[-139.039,60],[-140.013,60.27682],[-140.99778,60.30639],[-140.9925,66.00003],[-140.986,69.712],[-139.12052,69.47102],[-137.54636,68.99002],[-136.50358,68.89804],[-135.62576,69.31512],[-134.41464,69.62743],[-132.92925,69.50534],[-131.43136,69.94451],[-129.79471,70.19369],[-129.10773,69.77927],[-128.36156,70.01286],[-128.13817,70.48384],[-127.44712,70.37721],[-125.75632,69.48058],[-124.42483,70.1584],[-124.28968,69.39969],[-123.06108,69.56372],[-122.6835,69.85553],[-121.47226,69.79778],[-119.94288,69.37786],[-117.60268,69.01128],[-116.22643,68.84151],[-115.2469,68.90591],[-113.89794,68.3989],[-115.30489,67.90261],[-113.49727,67.68815],[-110.798,67.80612],[-109.94619,67.98104],[-108.8802,67.38144],[-107.79239,67.88736],[-108.81299,68.31164],[-108.16721,68.65392],[-106.95,68.7],[-106.15,68.8],[-105.34282,68.56122],[-104.33791,68.018],[-103.22115,68.09775],[-101.45433,67.64689],[-99.90195,67.80566],[-98.4432,67.78165],[-98.5586,68.40394],[-97.66948,68.57864],[-96.11991,68.23939],[-96.12588,67.29338],[-95.48943,68.0907],[-94.685,68.06383],[-94.23282,69.06903],[-95.30408,69.68571],[-96.47131,70.08976],[-96.39115,71.19482],[-95.2088,71.92053],[-93.88997,71.76015],[-92.87818,71.31869],[-91.51964,70.19129],[-92.40692,69.69997],[-90.5471,69.49766]]],[[[-114.1671699999999,73.12145],[-114.66634,72.65277],[-112.44101999999988,72.95540000000011],[-111.05039,72.4504],[-109.92034999999989,72.96113],[-109.00654,72.63335],[-108.18835,71.65089],[-107.68599,72.06548],[-108.39639,73.08953000000011],[-107.51645,73.23598],[-106.52259,73.07601],[-105.40246,72.67259],[-104.77484,71.6984],[-104.46475999999984,70.99297],[-102.78537,70.49776],[-100.9807799999999,70.02432],[-101.08929,69.58447000000012],[-102.73116,69.50402],[-102.09329,69.11962000000011],[-102.43024,68.75282],[-104.24,68.91],[-105.96,69.18000000000015],[-107.12254,69.11922],[-109,68.78],[-111.53414887520013,68.63005915681794],[-113.3132,68.53554],[-113.85495999999983,69.00744000000012],[-115.22,69.28],[-116.10794,69.16821],[-117.34,69.96000000000012],[-116.67472999999988,70.06655],[-115.13112,70.2373],[-113.72141,70.19237],[-112.4161,70.36638],[-114.35,70.6],[-116.48684,70.52045],[-117.9048,70.54056000000014],[-118.43238,70.9092],[-116.11311,71.30918],[-117.65568,71.2952],[-119.40199,71.55859],[-118.56267,72.30785],[-117.86642,72.70594],[-115.18909,73.31459000000012],[-114.1671699999999,73.12145]]],[[[-104.5,73.42],[-105.38,72.76],[-106.94,73.46],[-106.6,73.6],[-105.26,73.64],[-104.5,73.42]]],[[[-76.34,73.10268498995302],[-76.25140380859375,72.82638549804688],[-77.31443786621091,72.85554504394527],[-78.39167022705081,72.87665557861328],[-79.48625183105466,72.74220275878909],[-79.77583312988284,72.80290222167974],[-80.87609863281253,73.3331832885742],[-80.83388519287105,73.69318389892578],[-80.35305786132812,73.75971984863278],[-78.06443786621094,73.65193176269534],[-76.34,73.10268498995302]]],[[[-86.56217851433414,73.15744700793846],[-85.77437130404454,72.53412588163383],[-84.85011247428824,73.34027822538712],[-82.31559017610098,73.75095083281059],[-80.60008765330764,72.71654368762421],[-80.7489416165244,72.06190664335077],[-78.77063859731078,72.35217316353416],[-77.82462398955958,72.74961660429105],[-75.60584469267573,72.24367849393741],[-74.22861609566499,71.7671442735579],[-74.09914079455771,71.33084015571765],[-72.24222571479766,71.5569245469945],[-71.20001542833519,70.92001251899723],[-68.7860542466849,70.52502370877426],[-67.91497046575694,70.12194753689761],[-66.96903337265417,69.18608734809189],[-68.80512285020055,68.72019847276442],[-66.44986609563387,68.06716339789202],[-64.86231441919522,67.84753856065163],[-63.42493445499676,66.92847321234066],[-61.85198137068058,66.86212067327784],[-62.1631768459423,66.16025136988961],[-63.918444383384184,64.99866852483284],[-65.14886023625363,65.42603261988668],[-66.72121904159854,66.3880410834322],[-68.01501603867396,66.26272573512439],[-68.14128740097917,65.68978913030438],[-67.08964616562339,65.108455105237],[-65.73208045109976,64.64840566675863],[-65.32016760930128,64.38273712834606],[-64.66940629744968,63.39292674422748],[-65.01380388045891,62.67418508569599],[-66.27504472519047,62.945098781986076],[-68.78318620469273,63.74567007105181],[-67.36968075221304,62.883965562584876],[-66.3282972886672,62.280074774822054],[-66.16556820338016,61.93089712182589],[-68.87736650254465,62.33014923771282],[-71.02343705919384,62.91070811629584],[-72.235378587519,63.39783600529517],[-71.8862784491713,63.67998932560885],[-73.37830624051838,64.19396312118383],[-74.8344189114226,64.67907562932379],[-74.81850257027673,64.38909332951798],[-77.70997982452005,64.22954234481679],[-78.55594885935417,64.57290639918014],[-77.89728105336192,65.30919220647479],[-76.0182742987972,65.32696889918316],[-73.95979529488272,65.45476471624089],[-74.29388342964964,65.8117713487294],[-73.94491248238265,66.31057811142672],[-72.65116716173941,67.28457550726387],[-72.92605994331609,67.72692576768239],[-73.31161780464575,68.06943716091291],[-74.84330725777681,68.55462718370129],[-76.86910091826674,68.89473562283027],[-76.22864905465735,69.14776927354742],[-77.28736996123712,69.76954010688328],[-78.1686339993266,69.82648753526891],[-78.95724219431673,70.16688019477542],[-79.49245500356366,69.87180776638891],[-81.30547095409176,69.74318512641435],[-84.94470618359847,69.9666340196444],[-87.06000342481789,70.26000112576537],[-88.6817132230015,70.41074127876081],[-89.51341956252304,70.76203766548099],[-88.46772111688075,71.21818553332133],[-89.8881512112875,71.22255219184996],[-90.20516028518202,72.2350743679608],[-89.43657670770494,73.12946421985237],[-88.40824154331281,73.53788890247121],[-85.82615108920092,73.80381582304521],[-86.56217851433414,73.15744700793846]]],[[[-100.35642,73.84389],[-99.16387,73.63339],[-97.38,73.76],[-97.12,73.47],[-98.05359,72.99052],[-96.54,72.56],[-96.72,71.66],[-98.35966,71.27285],[-99.32286,71.35639],[-100.01482,71.73827],[-102.5,72.51],[-102.48,72.83],[-100.43836,72.70588],[-101.54,73.36],[-100.35642,73.84389]]],[[[-93.19629553910022,72.77199249947336],[-94.26904659704726,72.02459625923598],[-95.40985551632266,72.06188080513459],[-96.03374508338246,72.94027680123182],[-96.01826799191099,73.4374299180958],[-95.49579342322403,73.86241689726418],[-94.50365759965234,74.1349067247392],[-92.42001217321177,74.10002513294219],[-90.50979285354259,73.85673248971203],[-92.0039652168299,72.9662442084585],[-93.19629553910022,72.77199249947336]]],[[[-120.46,71.38360179308759],[-123.09219,70.90164],[-123.62,71.34],[-125.92894873747335,71.86868846301141],[-125.5,72.29226081179502],[-124.80729,73.02256],[-123.9399999999999,73.68000000000015],[-124.91775,74.29275000000013],[-121.53788,74.44893],[-120.10978,74.24135],[-117.55563999999987,74.18577],[-116.58442,73.89607],[-115.51081,73.47519],[-116.76793999999988,73.22292],[-119.22,72.52],[-120.46,71.82],[-120.46,71.38360179308759]]],[[[-93.61275590694049,74.97999726022445],[-94.15690873897384,74.59234650338686],[-95.60868058956561,74.66686391875177],[-96.82093217648458,74.92762319609658],[-96.2885874092298,75.37782827422335],[-94.85081987178913,75.6472175157609],[-93.97774654821794,75.29648956979597],[-93.61275590694049,74.97999726022445]]],[[[-98.5,76.72],[-97.735585,76.25656],[-97.704415,75.74344],[-98.16,75],[-99.80874,74.89744],[-100.88366,75.05736],[-100.86292,75.64075],[-102.50209,75.5638],[-102.56552,76.3366],[-101.48973,76.30537],[-99.98349,76.64634],[-98.57699,76.58859],[-98.5,76.72]]],[[[-108.21141,76.20168],[-107.81943,75.84552],[-106.92893,76.01282],[-105.881,75.9694],[-105.70498,75.47951],[-106.31347,75.00527],[-109.7,74.85],[-112.22307,74.41696],[-113.74381,74.39427],[-113.87135,74.72029],[-111.79421,75.1625],[-116.31221,75.04343],[-117.7104,75.2222],[-116.34602,76.19903],[-115.40487,76.47887],[-112.59056,76.14134],[-110.81422,75.54919],[-109.0671,75.47321],[-110.49726,76.42982],[-109.5811,76.79417],[-108.54859,76.67832],[-108.21141,76.20168]]],[[[-94.68408586299947,77.09787832305838],[-93.57392106807313,76.77629588490609],[-91.60502315953661,76.77851797149461],[-90.74184587274922,76.44959747995681],[-90.96966142450799,76.07401317005946],[-89.82223792189927,75.84777374948563],[-89.18708289259979,75.61016551380763],[-87.83827633334963,75.56618886992723],[-86.37919226758868,75.48242137318218],[-84.78962521029061,75.69920400664651],[-82.75344458691006,75.78431509063125],[-81.12853084992437,75.71398346628203],[-80.05751095245915,75.33684886341588],[-79.83393286814832,74.92312734648719],[-80.45777075877584,74.65730377877779],[-81.94884253612554,74.44245901152433],[-83.22889360221143,74.56402781849096],[-86.0974523587333,74.41003205026115],[-88.15035030796022,74.39230703398499],[-89.76472205275837,74.51555532500115],[-92.42244096552943,74.837757880341],[-92.7682854886428,75.38681997344216],[-92.88990597204173,75.88265534128266],[-93.893824022176,76.31924367950054],[-95.96245744503582,76.44138092722247],[-97.12137895382949,76.75107778594761],[-96.74512285031236,77.16138865834515],[-94.68408586299947,77.09787832305838]]],[[[-116.19858659550734,77.64528677032621],[-116.33581336145838,76.87696157501055],[-117.10605058476878,76.53003184681913],[-118.04041215703813,76.4811717800871],[-119.89931758688569,76.05321340606199],[-121.4999950771265,75.9000186225328],[-122.85492448615896,76.11654287383568],[-122.8549252936032,76.11654287383568],[-121.15753536032825,76.86450755482835],[-119.10393897182104,77.51221995717464],[-117.57013078496597,77.4983189968881],[-116.19858659550734,77.64528677032621]]],[[[-93.84000301794399,77.5199972602345],[-94.29560828324526,77.4913426785287],[-96.16965410031008,77.5551113959769],[-96.43630449093612,77.83462921824362],[-94.42257727738638,77.82000478790499],[-93.72065629756588,77.63433136668033],[-93.84000301794399,77.5199972602345]]],[[[-110.18693803591297,77.6970148790503],[-112.05119116905848,77.40922882761686],[-113.53427893761906,77.73220652944116],[-112.72458675825384,78.05105011668195],[-111.26444332563085,78.15295604116156],[-109.8544518705471,77.99632477488484],[-110.18693803591297,77.6970148790503]]],[[[-109.66314571820259,78.60197256134569],[-110.88131425661886,78.40691986766001],[-112.54209143761517,78.4079017198735],[-112.5258908760916,78.55055451121522],[-111.5000103422334,78.84999359813057],[-110.96366065147602,78.80444082306522],[-109.66314571820259,78.60197256134569]]],[[[-95.83029496944934,78.05694122996326],[-97.30984290239799,77.85059723582178],[-98.12428931353396,78.08285696075758],[-98.55286780474664,78.4581053738451],[-98.63198442258552,78.87193024363839],[-97.33723141151262,78.83198436147677],[-96.75439876990879,78.765812689927],[-95.55927792029458,78.41831452098029],[-95.83029496944934,78.05694122996326]]],[[[-100.06019182005214,78.3247543403159],[-99.67093909381362,77.9075446642074],[-101.30394019245301,78.01898489044481],[-102.94980872273305,78.34322866486022],[-105.17613277873154,78.38033234324574],[-104.21042945027716,78.6774201524918],[-105.41958045125854,78.91833567983645],[-105.49228919149316,79.30159393992919],[-103.52928239623793,79.16534902619165],[-100.82515804726881,78.80046173777869],[-100.06019182005214,78.3247543403159]]],[[[-87.02,79.66],[-85.81435,79.3369],[-87.18756,79.0393],[-89.03535,78.28723],[-90.80436,78.21533],[-92.87669,78.34333],[-93.95116,78.75099],[-93.93574,79.11373],[-93.14524,79.3801],[-94.974,79.37248],[-96.07614,79.70502],[-96.70972,80.15777],[-96.01644,80.60233],[-95.32345,80.90729],[-94.29843,80.97727],[-94.73542,81.20646],[-92.40984,81.25739],[-91.13289,80.72345],[-89.45,80.50932203389829],[-87.81,80.32],[-87.02,79.66]]],[[[-68.5,83.10632151676575],[-65.82735,83.02801],[-63.68,82.9],[-61.85,82.6286],[-61.89388,82.36165],[-64.334,81.92775],[-66.75342,81.72527],[-67.65755,81.50141],[-65.48031,81.50657],[-67.84,80.9],[-69.4697,80.61683],[-71.18,79.8],[-73.2428,79.63415],[-73.88,79.43016220480207],[-76.90773,79.32309],[-75.52924,79.19766],[-76.22046,79.01907],[-75.39345,78.52581],[-76.34354,78.18296],[-77.88851,77.89991],[-78.36269,77.50859],[-79.75951,77.20968],[-79.61965,76.98336],[-77.91089,77.022045],[-77.88911,76.777955],[-80.56125,76.17812],[-83.17439,76.45403],[-86.11184,76.29901],[-87.6,76.42],[-89.49068,76.47239],[-89.6161,76.95213],[-87.76739,77.17833],[-88.26,77.9],[-87.65,77.97022222222222],[-84.97634,77.53873],[-86.34,78.18],[-87.96192,78.37181],[-87.15198,78.75867],[-85.37868,78.9969],[-85.09495,79.34543],[-86.50734,79.73624],[-86.93179,80.25145],[-84.19844,80.20836],[-83.40869565217383,80.1],[-81.84823,80.46442],[-84.1,80.58],[-87.59895,80.51627],[-89.36663,80.85569],[-90.2,81.26],[-91.36786,81.5531],[-91.58702,81.89429],[-90.1,82.085],[-88.93227,82.11751],[-86.97024,82.27961],[-85.5,82.65227345805704],[-84.260005,82.6],[-83.18,82.32],[-82.42,82.86],[-81.1,83.02],[-79.30664,83.13056],[-76.25,83.1720588235294],[-75.71878,83.06404],[-72.83153,83.23324],[-70.665765,83.16978075838284],[-68.5,83.10632151676575]]]]}},{"type":"Feature","properties":{"abbrev":"Bhs.","name":"Bahamas","name_long":"Bahamas","iso_a2":"BS","iso_a3":"BHS","iso_n3":"044"},"geometry":{"type":"MultiPolygon","coordinates":[[[[-77.53466,23.75975],[-77.78,23.71],[-78.03405,24.28615],[-78.40848,24.57564],[-78.19087,25.2103],[-77.89,25.17],[-77.54,24.34],[-77.53466,23.75975]]],[[[-77.82,26.58],[-78.91,26.42],[-78.98,26.79],[-78.51,26.87],[-77.85,26.84],[-77.82,26.58]]],[[[-77,26.59],[-77.17255,25.87918],[-77.35641,26.00735],[-77.34,26.53],[-77.78802,26.92516],[-77.79,27.04],[-77,26.59]]]]}},{"type":"Feature","properties":{"abbrev":"C.R.","name":"Costa Rica","name_long":"Costa Rica","iso_a2":"CR","iso_a3":"CRI","iso_n3":"188"},"geometry":{"type":"Polygon","coordinates":[[[-82.96578304719736,8.225027980985985],[-83.50843726269431,8.446926581247283],[-83.71147396516908,8.656836249216866],[-83.59631303580665,8.830443223501419],[-83.63264156770784,9.051385809765321],[-83.90988562695372,9.29080272057358],[-84.30340165885636,9.487354030795714],[-84.64764421256866,9.615537421095707],[-84.71335079622777,9.908051866083852],[-84.97566036654133,10.086723130733006],[-84.91137488477024,9.795991522658923],[-85.11092342806532,9.55703969974131],[-85.33948828809227,9.83454214114866],[-85.66078650586698,9.933347479690724],[-85.79744483106285,10.134885565629034],[-85.79170874707843,10.439337266476613],[-85.65931372754666,10.75433095951172],[-85.94172543002176,10.895278428587801],[-85.7125404528073,11.088444932494824],[-85.56185197624418,11.217119248901597],[-84.90300330273895,10.952303371621896],[-84.67306901725627,11.082657172078143],[-84.35593075228104,10.999225572142905],[-84.19017859570485,10.793450018756674],[-83.89505449088595,10.726839097532446],[-83.65561174186158,10.938764146361422],[-83.40231970898296,10.395438137244652],[-83.01567664257517,9.992982082555555],[-82.54619625520348,9.566134751824677],[-82.93289099804358,9.476812038608173],[-82.92715491405916,9.074330145702916],[-82.71918311230053,8.925708726431495],[-82.86865719270477,8.807266343618522],[-82.82977067740516,8.62629547773237],[-82.91317643912421,8.42351715741907],[-82.96578304719736,8.225027980985985]]]}},{"type":"Feature","properties":{"abbrev":"Grlnd.","name":"Greenland","name_long":"Greenland","iso_a2":"GL","iso_a3":"GRL","iso_n3":"304"},"geometry":{"type":"Polygon","coordinates":[[[-46.76379,82.62796],[-43.40644,83.22516],[-39.89753,83.18018],[-38.62214,83.54905],[-35.08787,83.64513],[-27.10046,83.51966],[-20.84539,82.72669],[-22.69182,82.34165],[-26.51753,82.29765],[-31.9,82.2],[-31.39646,82.02154],[-27.85666,82.13178],[-24.84448,81.78697],[-22.90328,82.09317],[-22.07175,81.73449],[-23.16961,81.15271],[-20.62363,81.52462],[-15.76818,81.91245],[-12.77018,81.71885],[-12.20855,81.29154],[-16.28533,80.58004],[-16.85,80.35],[-20.04624,80.17708],[-17.73035,80.12912],[-18.9,79.4],[-19.70499,78.75128],[-19.67353,77.63859],[-18.47285,76.98565],[-20.03503,76.94434],[-21.67944,76.62795],[-19.83407,76.09808],[-19.59896,75.24838],[-20.66818,75.15585],[-19.37281,74.29561],[-21.59422,74.22382],[-20.43454,73.81713],[-20.76234,73.46436],[-22.17221,73.30955],[-23.56593,73.30663],[-22.31311,72.62928],[-22.29954,72.18409],[-24.27834,72.59788],[-24.79296,72.3302],[-23.44296,72.08016],[-22.13281,71.46898],[-21.75356,70.66369],[-23.53603,70.471],[-24.30702,70.85649],[-25.54341,71.43094],[-25.20135,70.75226],[-26.36276,70.22646],[-23.72742,70.18401],[-22.34902,70.12946],[-25.02927,69.2588],[-27.74737,68.47046],[-30.67371,68.12503],[-31.77665,68.12078],[-32.81105,67.73547],[-34.20196,66.67974],[-36.35284,65.9789],[-37.04378,65.93768],[-38.37505,65.69213],[-39.81222,65.45848],[-40.66899,64.83997],[-40.68281,64.13902],[-41.1887,63.48246],[-42.81938,62.68233],[-42.41666,61.90093],[-42.86619,61.07404],[-43.3784,60.09772],[-44.7875,60.03676],[-46.26364,60.85328],[-48.26294,60.85843],[-49.23308,61.40681],[-49.90039,62.38336],[-51.63325,63.62691],[-52.14014,64.27842],[-52.27659,65.1767],[-53.66166,66.09957],[-53.30161,66.8365],[-53.96911,67.18899],[-52.9804,68.35759],[-51.47536,68.72958],[-51.08041,69.14781],[-50.87122,69.9291],[-52.013585,69.574925],[-52.55792,69.42616],[-53.45629,69.283625],[-54.68336,69.61003],[-54.75001,70.28932],[-54.35884,70.821315],[-53.431315,70.835755],[-51.39014,70.56978],[-53.10937,71.20485],[-54.00422,71.54719],[-55,71.40653696727257],[-55.83468,71.65444],[-54.71819,72.58625],[-55.32634,72.95861],[-56.12003,73.64977],[-57.32363,74.71026],[-58.59679,75.09861],[-58.58516,75.51727],[-61.26861,76.10238],[-63.39165,76.1752],[-66.06427,76.13486],[-68.50438,76.06141],[-69.66485,76.37975],[-71.40257,77.00857],[-68.77671,77.32312],[-66.76397,77.37595],[-71.04293,77.63595],[-73.297,78.04419],[-73.15938,78.43271],[-69.37345,78.91388],[-65.7107,79.39436],[-65.3239,79.75814],[-68.02298,80.11721],[-67.15129,80.51582],[-63.68925,81.21396],[-62.23444,81.3211],[-62.65116,81.77042],[-60.28249,82.03363],[-57.20744,82.19074],[-54.13442,82.19962],[-53.04328,81.88833],[-50.39061,82.43883],[-48.00386,82.06481],[-46.59984,81.985945],[-44.523,81.6607],[-46.9007,82.19979],[-46.76379,82.62796]]]}},{"type":"Feature","properties":{"abbrev":"Dom. Rep.","name":"Dominican Rep.","name_long":"Dominican Republic","iso_a2":"DO","iso_a3":"DOM","iso_n3":"214"},"geometry":{"type":"Polygon","coordinates":[[[-71.71236141629296,19.714455878167357],[-71.58730445014663,19.8849105900821],[-70.80670610216174,19.880285549391985],[-70.21436499701613,19.62288524014616],[-69.95081519232758,19.647999986240006],[-69.76925004747008,19.293267116772437],[-69.22212582057988,19.313214219637103],[-69.25434607611385,19.015196234609874],[-68.80941199408083,18.979074408437853],[-68.31794328476897,18.612197577381693],[-68.68931596543452,18.205142320218613],[-69.16494584824892,18.42264842373511],[-69.62398759629764,18.380712998930246],[-69.95293392605154,18.42830699307106],[-70.1332329983179,18.245915025296895],[-70.51713721381422,18.184290879788833],[-70.66929846869763,18.426885891183034],[-70.99995012071719,18.283328762276213],[-71.4002099270339,17.5985643579766],[-71.65766191271202,17.7575727401387],[-71.70830481635805,18.04499705654609],[-71.68773759630587,18.31666006110447],[-71.94511206733556,18.61690013272026],[-71.70130265978248,18.78541697842405],[-71.62487321642283,19.169837958243306],[-71.71236141629296,19.714455878167357]]]}},{"type":"Feature","properties":{"abbrev":"Cuba","name":"Cuba","name_long":"Cuba","iso_a2":"CU","iso_a3":"CUB","iso_n3":"192"},"geometry":{"type":"Polygon","coordinates":[[[-82.26815121125706,23.188610744717703],[-81.40445716014683,23.11727142993878],[-80.6187686835812,23.105980129483],[-79.67952368846025,22.76530324959883],[-79.28148596873207,22.399201565027056],[-78.34743445505649,22.512166246017088],[-77.99329586456028,22.277193508385935],[-77.14642249216105,21.657851467367834],[-76.52382483590856,21.206819566324373],[-76.19462012399319,21.220565497314013],[-75.59822241891267,21.016624457274133],[-75.67106035022806,20.735091254148],[-74.9338960435845,20.693905137611385],[-74.17802486845126,20.28462779385974],[-74.29664811877724,20.05037852628068],[-74.96159461129294,19.92343537035569],[-75.63468014189459,19.873774318923196],[-76.323656175426,19.95289093676206],[-77.75548092315306,19.855480861891873],[-77.08510840524674,20.413353786698792],[-77.49265458851661,20.67310537361389],[-78.13729224314159,20.73994883878343],[-78.48282670766119,21.02861338956585],[-78.71986650258401,21.598113511638434],[-79.28499996612794,21.5591753199065],[-80.21747534861865,21.827324327069036],[-80.51753455272141,22.03707896574176],[-81.82094336620318,22.19205658618507],[-82.16999182811864,22.38710927987075],[-81.79500179719267,22.636964830001958],[-82.77589799674084,22.688150336187064],[-83.49445878775936,22.16851797127613],[-83.90880042187563,22.154565334557333],[-84.05215084505326,21.910575059491254],[-84.54703019889638,21.801227728761642],[-84.97491105827311,21.89602814380109],[-84.44706214062776,22.204949856041907],[-84.23035702181178,22.565754706303764],[-83.7782399156902,22.788118394455694],[-83.26754757356575,22.983041897060644],[-82.51043616405751,23.078746649665188],[-82.26815121125706,23.188610744717703]]]}},{"type":"Feature","properties":{"abbrev":"Hond.","name":"Honduras","name_long":"Honduras","iso_a2":"HN","iso_a3":"HND","iso_n3":"340"},"geometry":{"type":"Polygon","coordinates":[[[-87.31665442579549,12.984685777229004],[-87.48940873894713,13.297534898323931],[-87.79311113152653,13.384480495655168],[-87.72350297722932,13.785050360565606],[-87.85951534702161,13.893312486217097],[-88.06534257684012,13.96462596277979],[-88.50399797234962,13.845485948130943],[-88.54123084181595,13.980154730683523],[-88.84307288283276,14.140506700085211],[-89.05851192905766,14.340029405164215],[-89.35332597528281,14.424132798719086],[-89.14553504103719,14.678019110569153],[-89.22522009963124,14.874286200413678],[-89.15481096063353,15.066419175674866],[-88.6806796943556,15.34624705653539],[-88.22502275262195,15.72772247971403],[-88.12115312371537,15.688655096901359],[-87.90181250685241,15.864458319558196],[-87.61568010125234,15.8787985295192],[-87.52292090528846,15.797278957578783],[-87.36776241733213,15.84694000901129],[-86.90319129102818,15.756712958229569],[-86.44094560417739,15.78283539475319],[-86.11923397494434,15.893448798073962],[-86.00195431185784,16.00540578863439],[-85.68331743034628,15.953651841693953],[-85.44400387240256,15.885749009662446],[-85.18244361035721,15.90915843349063],[-84.98372188997882,15.995923163308701],[-84.52697974316715,15.857223619037427],[-84.36825558138258,15.835157782448732],[-84.06305457226682,15.648244126849136],[-83.77397661002612,15.42407176356687],[-83.41038123242036,15.270902818253774],[-83.14721900097413,14.99582916916421],[-83.48998877636602,15.016267198135663],[-83.62858496777288,14.880073960830371],[-83.97572140169359,14.749435939996486],[-84.22834164095241,14.74876414637663],[-84.4493359036486,14.621614284722511],[-84.64958207877963,14.666805324761867],[-84.8200367906943,14.81958669683263],[-84.92450069857233,14.790492865452336],[-85.05278744173688,14.551541042534723],[-85.14875057650288,14.560196844943619],[-85.16536454948482,14.35436961512505],[-85.51441301140028,14.079011745657908],[-85.69866533073696,13.960078436738002],[-85.8012947252685,13.836054999237604],[-86.09626380079061,14.038187364147234],[-86.31214209668985,13.771356106008225],[-86.52070817741992,13.778487453664468],[-86.75508663607962,13.75484548589094],[-86.73382178419149,13.263092556201398],[-86.88055701368438,13.254204209847217],[-87.00576900912743,13.025794379117258],[-87.31665442579549,12.984685777229004]]]}},{"type":"Feature","properties":{"abbrev":"Guat.","name":"Guatemala","name_long":"Guatemala","iso_a2":"GT","iso_a3":"GTM","iso_n3":"320"},"geometry":{"type":"Polygon","coordinates":[[[-90.09555457229098,13.735337632700734],[-90.60862403030085,13.909771429901951],[-91.23241024449605,13.927832342987957],[-91.68974667027912,14.126218166556455],[-92.22775000686983,14.538828640190928],[-92.20322953974731,14.830102850804069],[-92.08721594925207,15.06458466232844],[-92.22924862340628,15.25144664149586],[-91.74796017125591,16.066564846251723],[-90.46447262242265,16.069562079324655],[-90.43886695022204,16.410109768128095],[-90.60084672724092,16.47077789963876],[-90.71182186558772,16.687483018454728],[-91.08167009150065,16.918476670799404],[-91.45392127151516,17.252177232324172],[-91.0022692532842,17.25465770107418],[-91.00151994501596,17.81759491624571],[-90.06793351923098,17.819326076727474],[-89.14308041050332,17.80831899664932],[-89.15080603713095,17.015576687075836],[-89.22912167026928,15.88693756760517],[-88.93061275913527,15.887273464415074],[-88.60458614780583,15.70638011317736],[-88.51836402052686,15.855389105690975],[-88.22502275262202,15.727722479713902],[-88.68067969435563,15.346247056535304],[-89.15481096063357,15.06641917567481],[-89.22522009963127,14.874286200413621],[-89.14553504103718,14.678019110569084],[-89.35332597528279,14.424132798719116],[-89.58734269891654,14.362586167859488],[-89.53421932652051,14.244815578666305],[-89.72193396682073,14.134228013561694],[-90.0646779039966,13.881969509328924],[-90.09555457229098,13.735337632700734]]]}},{"type":"Feature","properties":{"abbrev":"Haiti","name":"Haiti","name_long":"Haiti","iso_a2":"HT","iso_a3":"HTI","iso_n3":"332"},"geometry":{"type":"Polygon","coordinates":[[[-73.18979061551762,19.915683905511912],[-72.57967281766362,19.871500555902358],[-71.71236141629296,19.714455878167357],[-71.62487321642283,19.169837958243306],[-71.70130265978248,18.78541697842405],[-71.94511206733556,18.61690013272026],[-71.68773759630587,18.31666006110447],[-71.70830481635805,18.04499705654609],[-72.37247616238935,18.21496084235406],[-72.84441118029488,18.14561107021836],[-73.45455481636503,18.217906398994696],[-73.92243323433566,18.030992743395004],[-74.45803361682478,18.342549953682706],[-74.36992529976713,18.66490753831941],[-73.44954220243272,18.526052964751145],[-72.69493709989064,18.445799465401862],[-72.334881557897,18.668421535715254],[-72.79164954292489,19.10162506761803],[-72.78410478381028,19.48359141690341],[-73.41502234566175,19.639550889560283],[-73.18979061551762,19.915683905511912]]]}},{"type":"Feature","properties":{"abbrev":"Mex.","name":"Mexico","name_long":"Mexico","iso_a2":"MX","iso_a3":"MEX","iso_n3":"484"},"geometry":{"type":"Polygon","coordinates":[[[-97.14000830767071,25.869997463478395],[-97.52807247596655,24.992144069920297],[-97.70294552284223,24.272343044526735],[-97.77604183631905,22.932579860927657],[-97.87236670611111,22.44421173755336],[-97.69904395220419,21.898689480064263],[-97.38895952023677,21.411018988525825],[-97.18933346229329,20.635433254473128],[-96.52557552772032,19.890930894444068],[-96.29212724484177,19.320371405509547],[-95.90088497595995,18.82802419684873],[-94.83906348344271,18.562717393462208],[-94.4257295397562,18.144370835843347],[-93.5486512926824,18.423836981677937],[-92.7861138577835,18.52483856859226],[-92.0373481920904,18.704569200103432],[-91.40790340855926,18.87608327888023],[-90.77186987991087,19.28412038825678],[-90.53358985061305,19.8674181177513],[-90.45147599970124,20.707521877520435],[-90.27861833368489,20.99985545499555],[-89.60132117385149,21.26172577563449],[-88.54386633986284,21.49367544197662],[-87.65841651075772,21.458845526611977],[-87.05189022494807,21.543543199138295],[-86.81198238803296,21.331514797444754],[-86.84590796583262,20.849864610268355],[-87.38329118523586,20.25540477139873],[-87.62105445021075,19.64655304613592],[-87.43675045444176,19.47240346931227],[-87.58656043165593,19.04013011319074],[-87.83719112827151,18.25981598558343],[-88.09066402866318,18.51664785407405],[-88.30003109409364,18.49998220466],[-88.4901228502793,18.48683055264172],[-88.84834387892658,17.883198147040332],[-89.02985734735176,18.00151133877256],[-89.15090938999549,17.955467637600407],[-89.14308041050333,17.808318996649405],[-90.0679335192309,17.81932607672752],[-91.00151994501596,17.817594916245696],[-91.00226925328417,17.25465770107428],[-91.45392127151511,17.252177232324186],[-91.0816700915006,16.91847667079952],[-90.71182186558764,16.687483018454767],[-90.60084672724093,16.47077789963879],[-90.438866950222,16.41010976812811],[-90.46447262242265,16.069562079324726],[-91.74796017125595,16.066564846251765],[-92.2292486234063,15.251446641495873],[-92.08721594925203,15.064584662328512],[-92.20322953974727,14.83010285080411],[-92.22775000686983,14.538828640190957],[-93.35946387406176,15.615429592343672],[-93.87516883011851,15.940164292865914],[-94.69165646033014,16.200975246642884],[-95.25022701697304,16.128318182840644],[-96.05338212765331,15.752087917539596],[-96.55743404822829,15.65351512294279],[-97.26359249549665,15.917064927631316],[-98.01302995480961,16.107311713113912],[-98.94767574745651,16.566043402568763],[-99.69739742714705,16.70616404872817],[-100.82949886758131,17.17107107184205],[-101.66608862995446,17.649026394109626],[-101.91852800170022,17.916090196193977],[-102.47813208698891,17.975750637275098],[-103.50098954955808,18.29229462327885],[-103.91752743204682,18.74857168220001],[-104.9920096504755,19.316133938061682],[-105.49303849976144,19.946767279535436],[-105.73139604370766,20.434101874264115],[-105.39777299683135,20.531718654863425],[-105.50066077352443,20.81689504646613],[-105.27075232625793,21.07628489835514],[-105.26581722697402,21.42210358325235],[-105.6031609769754,21.871145941652568],[-105.69341386597313,22.269080308516152],[-106.02871639689897,22.773752346278627],[-106.90998043498837,23.767774359628902],[-107.91544877809139,24.54891531015295],[-108.40190487347098,25.17231395110593],[-109.26019873740665,25.58060944264406],[-109.44408932171734,25.824883938087677],[-109.29164384645627,26.442934068298428],[-109.80145768923182,26.676175645447927],[-110.3917317370857,27.16211497650454],[-110.64101884646163,27.859876003525528],[-111.17891883018785,27.941240546169066],[-111.75960689985163,28.46795258230395],[-112.2282346260904,28.95440867768349],[-112.27182369672869,29.266844387320074],[-112.80959448937398,30.021113593052345],[-113.16381059451868,30.78688080496943],[-113.14866939985717,31.17096588797892],[-113.87188106978186,31.567608344035193],[-114.2057366606035,31.52404511161313],[-114.77645117883503,31.799532172161147],[-114.93669979537212,31.3934846054276],[-114.77123185917351,30.913617255165267],[-114.67389929895177,30.162681179315992],[-114.33097449426292,29.75043244070741],[-113.58887508833544,29.061611436473015],[-113.42405310754054,28.82617361095123],[-113.27196936730553,28.7547826197399],[-113.14003943566439,28.411289374295958],[-112.9622983467965,28.42519033458251],[-112.76158708377488,27.780216783147523],[-112.45791052941166,27.52581370697476],[-112.2449519519368,27.17172679291076],[-111.6164890206192,26.662817287700477],[-111.28467464887302,25.732589830014433],[-110.98781938357239,25.294606228124564],[-110.71000688357134,24.82600434010186],[-110.65504899782887,24.298594672131117],[-110.17285620811343,24.265547593680424],[-109.77184709352855,23.811182562754198],[-109.4091043770557,23.36467234953625],[-109.43339230023292,23.1855876734287],[-109.85421932660171,22.818271592698068],[-110.03139197471444,22.823077500901206],[-110.29507097048366,23.43097321216669],[-110.94950130902805,24.00096426034599],[-111.67056840701268,24.484423122652515],[-112.18203589562147,24.738412787367167],[-112.14898881717085,25.47012523040405],[-112.3007108223797,26.012004299416613],[-112.77729671919155,26.32195954030317],[-113.46467078332194,26.768185533143424],[-113.59672990604383,26.639459540304472],[-113.84893673384424,26.90006378835244],[-114.46574662968003,27.142090358991368],[-115.055142178185,27.72272675222291],[-114.98225257043741,27.798200181585116],[-114.57036556685495,27.74148529714489],[-114.19932878299925,28.115002549750553],[-114.16201839888463,28.566111965442303],[-114.93184221073663,29.279479275015486],[-115.518653937627,29.556361599235398],[-115.88736528202958,30.180793768834178],[-116.25835038945293,30.83646434175358],[-116.72152625208498,31.635743720012044],[-117.12775999999985,32.53534],[-115.99135,32.61239000000012],[-114.72139,32.72083],[-114.815,32.52528],[-113.30498,32.03914],[-111.02361,31.33472],[-109.035,31.341940000000136],[-108.24194,31.34222],[-108.24,31.75485371816637],[-106.50759,31.75452],[-106.1429,31.39995],[-105.63159,31.08383],[-105.03737,30.64402],[-104.70575,30.12173],[-104.4569699999999,29.57196],[-103.94,29.27],[-103.11,28.97],[-102.48,29.76],[-101.6624,29.7793],[-100.9576,29.380710000000132],[-100.45584,28.696120000000118],[-100.11,28.110000000000127],[-99.52,27.54],[-99.3,26.84],[-99.02,26.37],[-98.24,26.06],[-97.53,25.84],[-97.14000830767071,25.869997463478395]]]}},{"type":"Feature","properties":{"abbrev":"Jam.","name":"Jamaica","name_long":"Jamaica","iso_a2":"JM","iso_a3":"JAM","iso_n3":"388"},"geometry":{"type":"Polygon","coordinates":[[[-77.56960079619921,18.490525417550487],[-76.89661861846211,18.400866807524082],[-76.36535905628554,18.160700588447597],[-76.19965857614164,17.886867173732966],[-76.9025614081757,17.868237819891746],[-77.20634131540348,17.70111623785982],[-77.76602291534061,17.86159739834224],[-78.33771928578561,18.225967922432233],[-78.21772661000388,18.454532782459193],[-77.79736467152563,18.524218451404778],[-77.56960079619921,18.490525417550487]]]}},{"type":"Feature","properties":{"abbrev":"P.R.","name":"Puerto Rico","name_long":"Puerto Rico","iso_a2":"PR","iso_a3":"PRI","iso_n3":"630"},"geometry":{"type":"Polygon","coordinates":[[[-66.28243445500821,18.514761664295364],[-65.7713028632093,18.426679185453878],[-65.59100379094295,18.228034979723915],[-65.84716386581377,17.97590566657186],[-66.59993445500949,17.981822618069273],[-67.18416236028527,17.946553453030077],[-67.24242753769435,18.374460150622937],[-67.10067908391774,18.52060110114435],[-66.28243445500821,18.514761664295364]]]}},{"type":"Feature","properties":{"abbrev":"Pan.","name":"Panama","name_long":"Panama","iso_a2":"PA","iso_a3":"PAN","iso_n3":"591"},"geometry":{"type":"Polygon","coordinates":[[[-77.88157141794525,7.223771267114785],[-78.21493608266012,7.512254950384161],[-78.42916073272607,8.052041123888927],[-78.18209570993864,8.319182440621773],[-78.4354652574657,8.38770538984079],[-78.62212053090394,8.718124497915028],[-79.12030717641375,8.996092027213022],[-79.55787736684519,8.932374986197146],[-79.76057817251004,8.5845150822244],[-80.16448116730334,8.333315944853595],[-80.38265906443961,8.298408514840432],[-80.4806892564973,8.09030752200107],[-80.00368994822716,7.547524115423371],[-80.276670701809,7.419754136581715],[-80.42115800649708,7.271571966984764],[-80.8864009264208,7.220541490096537],[-81.05954281281473,7.817921047390596],[-81.18971574575795,7.647905585150339],[-81.51951473664468,7.706610012233909],[-81.72131120474445,8.108962714058435],[-82.13144120962892,8.175392767769635],[-82.39093441438257,8.29236237226229],[-82.82008134635042,8.290863755725823],[-82.85095801464482,8.073822740099956],[-82.96578304719736,8.225027980985985],[-82.91317643912421,8.42351715741907],[-82.82977067740516,8.62629547773237],[-82.86865719270477,8.807266343618522],[-82.71918311230053,8.925708726431495],[-82.92715491405916,9.074330145702916],[-82.93289099804358,9.476812038608173],[-82.54619625520348,9.566134751824677],[-82.18712256542341,9.20744863528678],[-82.20758643261095,8.9955752628901],[-81.80856686066929,8.950616766796173],[-81.71415401887204,9.031955471223583],[-81.43928707551154,8.786234035675719],[-80.94730160187676,8.858503526235905],[-80.52190121125008,9.111072089062432],[-79.91459977895599,9.31276520429762],[-79.57330278188431,9.611610012241526],[-79.02119177927793,9.552931423374105],[-79.05845048696037,9.454565334506526],[-78.50088762074719,9.420458889193881],[-78.05592770049802,9.2477304142583],[-77.72951351592641,8.946844387238869],[-77.35336076527385,8.67050466555807],[-77.47472286651133,8.524286200388218],[-77.24256649444008,7.935278225125444],[-77.43110795765699,7.638061224798735],[-77.75341386586139,7.709839789252142],[-77.88157141794525,7.223771267114785]]]}},{"type":"Feature","properties":{"abbrev":"Nic.","name":"Nicaragua","name_long":"Nicaragua","iso_a2":"NI","iso_a3":"NIC","iso_n3":"558"},"geometry":{"type":"Polygon","coordinates":[[[-85.7125404528073,11.088444932494824],[-86.05848832878526,11.403438625529944],[-86.52584998243296,11.806876532432597],[-86.74599158399633,12.143961900272487],[-87.16751624220116,12.458257961471656],[-87.66849341505471,12.909909979702633],[-87.5574666002756,13.064551703336065],[-87.39238623731923,12.914018256069838],[-87.31665442579549,12.984685777228975],[-87.00576900912756,13.025794379117157],[-86.88055701368437,13.254204209847245],[-86.7338217841916,13.263092556201443],[-86.7550866360797,13.754845485890913],[-86.5207081774199,13.77848745366444],[-86.31214209668993,13.77135610600817],[-86.0962638007906,14.038187364147248],[-85.80129472526859,13.83605499923759],[-85.69866533073693,13.960078436738087],[-85.51441301140025,14.079011745657837],[-85.1653645494848,14.354369615125078],[-85.14875057650296,14.560196844943619],[-85.05278744173692,14.551541042534723],[-84.9245006985724,14.790492865452352],[-84.82003679069435,14.819586696832669],[-84.64958207877962,14.666805324761754],[-84.4493359036486,14.621614284722495],[-84.22834164095241,14.748764146376658],[-83.97572140169359,14.749435939996461],[-83.62858496777292,14.880073960830302],[-83.48998877636612,15.016267198135536],[-83.14721900097413,14.99582916916411],[-83.23323442252394,14.899866034398102],[-83.2841615465476,14.6766238468972],[-83.18212643098728,14.31070302983845],[-83.41249996614445,13.970077826386557],[-83.51983191601468,13.567699286345883],[-83.55220720084554,13.127054348193086],[-83.49851538769427,12.869292303921227],[-83.47332312695198,12.419087225794428],[-83.62610449902292,12.320850328007566],[-83.71961300325506,11.893124497927726],[-83.65085751009072,11.629032090700118],[-83.8554703437504,11.373311265503787],[-83.80893571647155,11.103043524617274],[-83.65561174186158,10.938764146361422],[-83.89505449088595,10.726839097532446],[-84.19017859570485,10.793450018756674],[-84.35593075228104,10.999225572142905],[-84.67306901725627,11.082657172078143],[-84.90300330273895,10.952303371621896],[-85.56185197624418,11.217119248901597],[-85.7125404528073,11.088444932494824]]]}},{"type":"Feature","properties":{"abbrev":"El. S.","name":"El Salvador","name_long":"El Salvador","iso_a2":"SV","iso_a3":"SLV","iso_n3":"222"},"geometry":{"type":"Polygon","coordinates":[[[-87.79311113152657,13.384480495655055],[-87.90411210808952,13.149016831917137],[-88.48330156121682,13.163951320849492],[-88.8432279121297,13.259733588102478],[-89.2567427233293,13.458532823129303],[-89.81239356154767,13.520622056527998],[-90.09555457229098,13.735337632700734],[-90.0646779039966,13.881969509328924],[-89.72193396682073,14.134228013561694],[-89.53421932652051,14.244815578666305],[-89.58734269891654,14.362586167859488],[-89.35332597528279,14.424132798719116],[-89.05851192905766,14.340029405164085],[-88.84307288283284,14.140506700085169],[-88.541230841816,13.980154730683479],[-88.50399797234971,13.845485948130857],[-88.06534257684012,13.964625962779778],[-87.8595153470216,13.893312486216983],[-87.72350297722939,13.785050360565506],[-87.79311113152657,13.384480495655055]]]}},{"type":"Feature","properties":{"abbrev":"Tr.T.","name":"Trinidad and Tobago","name_long":"Trinidad and Tobago","iso_a2":"TT","iso_a3":"TTO","iso_n3":"780"},"geometry":{"type":"Polygon","coordinates":[[[-61.68,10.76],[-61.105,10.89],[-60.895,10.855],[-60.935,10.11],[-61.77,10],[-61.95,10.09],[-61.66,10.365],[-61.68,10.76]]]}},{"type":"Feature","properties":{"abbrev":"U.S.A.","name":"United States","name_long":"United States","iso_a2":"US","iso_a3":"USA","iso_n3":"840"},"geometry":{"type":"MultiPolygon","coordinates":[[[[-155.54211,19.08348],[-155.68817,18.91619],[-155.93665,19.05939],[-155.90806,19.33888],[-156.07347,19.70294],[-156.02368,19.81422],[-155.85008,19.97729],[-155.91907,20.17395],[-155.86108,20.26721],[-155.78505,20.2487],[-155.40214,20.07975],[-155.22452,19.99302],[-155.06226,19.8591],[-154.80741,19.50871],[-154.83147,19.45328],[-155.22217,19.23972],[-155.54211,19.08348]]],[[[-156.07926,20.64397],[-156.41445,20.57241],[-156.58673,20.783],[-156.70167,20.8643],[-156.71055,20.92676],[-156.61258,21.01249],[-156.25711,20.91745],[-155.99566,20.76404],[-156.07926,20.64397]]],[[[-156.75824,21.17684],[-156.78933,21.06873],[-157.32521,21.09777],[-157.25027,21.21958],[-156.75824,21.17684]]],[[[-157.65283,21.32217],[-157.70703,21.26442],[-157.7786,21.27729],[-158.12667,21.31244],[-158.2538,21.53919],[-158.29265,21.57912],[-158.0252,21.71696],[-157.94161,21.65272],[-157.65283,21.32217]]],[[[-159.34512,21.982],[-159.46372,21.88299],[-159.80051,22.06533],[-159.74877,22.1382],[-159.5962,22.23618],[-159.36569,22.21494],[-159.34512,21.982]]],[[[-94.81758,49.38905],[-94.63999999999987,48.84000000000012],[-94.32914,48.67074000000011],[-93.63087,48.60926],[-92.61,48.45],[-91.64,48.14],[-90.82999999999986,48.27],[-89.6,48.010000000000105],[-89.27291744663668,48.01980825458284],[-88.37811418328653,48.30291758889382],[-87.43979262330024,47.94],[-86.46199083122815,47.55333801939204],[-85.65236324740323,47.22021881773051],[-84.87607988151485,46.90008331968238],[-84.77923824739983,46.63710195574913],[-84.54374874544567,46.53868419044923],[-84.6049,46.4396],[-84.3367,46.40877000000011],[-84.1421195136733,46.51222585711574],[-84.09185126416148,46.27541860613826],[-83.89076534700567,46.116926988299156],[-83.6161309475905,46.116926988299156],[-83.46955074739463,45.99468638771259],[-83.59285071484308,45.81689362241255],[-82.55092464875818,45.34751658790545],[-82.33776312543108,44.44],[-82.13764238150397,43.57108755144],[-82.43,42.9800000000001],[-82.89999999999989,42.43000000000015],[-83.11999999999989,42.08],[-83.14199968131256,41.975681057293],[-83.02981014680694,41.83279572200601],[-82.69008928092018,41.675105088867326],[-82.43927771679162,41.675105088867326],[-81.27774654816707,42.20902598730686],[-80.24744767934784,42.36619985612267],[-78.9393621487437,42.86361135514812],[-78.92,42.965],[-79.00999999999988,43.27],[-79.17167355011188,43.46633942318431],[-78.72027991404238,43.62508942318496],[-77.73788509795762,43.62905558936339],[-76.82003414580558,43.628784288093755],[-76.5,44.018458893758606],[-76.375,44.09631],[-75.31821,44.816450000000174],[-74.867,45.000480000000124],[-73.34783,45.00738],[-71.50505999999987,45.0082000000001],[-71.405,45.25500000000014],[-71.08482,45.30524000000017],[-70.6599999999998,45.46],[-70.305,45.915],[-69.99997,46.69307],[-69.237216,47.447781],[-68.905,47.185],[-68.23444,47.35486],[-67.79046,47.06636],[-67.79134,45.70281000000014],[-67.13741,45.13753],[-66.96466,44.80970000000016],[-68.03252,44.3252],[-69.05999999999989,43.98],[-70.11617,43.684050000000155],[-70.645475633411,43.09023834896405],[-70.81489,42.8653],[-70.825,42.335],[-70.495,41.805],[-70.08,41.78],[-70.185,42.145],[-69.88497,41.92283000000012],[-69.96503,41.63717000000017],[-70.64,41.475],[-71.12039,41.49445000000017],[-71.85999999999984,41.32],[-72.295,41.27],[-72.87643,41.22065],[-73.71,40.93110235165449],[-72.24126,41.11948000000015],[-71.94499999999982,40.93],[-73.345,40.63],[-73.982,40.628],[-73.952325,40.75075],[-74.25671,40.47351],[-73.96244,40.42763],[-74.17838,39.70926],[-74.90604,38.93954],[-74.98041,39.1964],[-75.20002,39.248450000000105],[-75.52805,39.4985],[-75.32,38.96],[-75.0718347647898,38.78203223017928],[-75.05673,38.40412000000012],[-75.37747,38.01551],[-75.94023,37.21689],[-76.03127,37.2566],[-75.72204999999978,37.93705000000011],[-76.23287,38.319215],[-76.35,39.15],[-76.542725,38.71761500000011],[-76.32933,38.08326],[-76.98999793161354,38.23999176691339],[-76.30162,37.917945],[-76.25874,36.96640000000011],[-75.9718,36.89726],[-75.86803999999984,36.55125],[-75.72749,35.55074000000013],[-76.36318,34.80854000000013],[-77.39763499999988,34.51201],[-78.05496,33.92547],[-78.55434999999983,33.86133000000012],[-79.06067,33.49395],[-79.20357,33.15839],[-80.301325,32.509355],[-80.86498,32.0333],[-81.33629,31.44049],[-81.49042,30.72999000000013],[-81.31371,30.035520000000105],[-80.98,29.180000000000117],[-80.53558499999988,28.47213],[-80.5299999999998,28.040000000000106],[-80.05653928497756,26.880000000000138],[-80.088015,26.205765],[-80.13155999999987,25.816775],[-80.38103,25.20616],[-80.67999999999988,25.08],[-81.17213,25.201260000000133],[-81.33,25.64],[-81.70999999999981,25.87],[-82.24,26.730000000000132],[-82.70515,27.49504],[-82.85526,27.88624],[-82.65,28.550000000000153],[-82.92999999999988,29.100000000000136],[-83.70959,29.93656],[-84.1,30.090000000000117],[-85.10882,29.63615],[-85.28784,29.68612000000013],[-85.7731,30.152610000000124],[-86.39999999999988,30.40000000000012],[-87.53036,30.27433],[-88.41782,30.3849],[-89.18048999999984,30.31598],[-89.59383117841978,30.15999400483685],[-89.413735,29.89419],[-89.43,29.48864],[-89.21767,29.29108],[-89.40823,29.15961],[-89.77928,29.307140000000143],[-90.15463,29.11743],[-90.880225,29.148535000000123],[-91.62678499999987,29.67700000000013],[-92.49906,29.5523],[-93.22637,29.78375],[-93.84842,29.71363],[-94.69,29.480000000000132],[-95.60026,28.73863],[-96.59404,28.30748],[-97.13999999999982,27.83],[-97.37,27.38],[-97.37999999999987,26.69],[-97.33,26.21000000000012],[-97.13999999999982,25.87],[-97.52999999999989,25.84],[-98.24,26.060000000000116],[-99.01999999999988,26.37],[-99.3,26.84],[-99.51999999999987,27.54],[-100.11,28.110000000000127],[-100.45584,28.696120000000118],[-100.9576,29.380710000000132],[-101.6624,29.779300000000116],[-102.48,29.76],[-103.11,28.97],[-103.94,29.27],[-104.45696999999984,29.57196],[-104.70575,30.12173],[-105.03737,30.64402],[-105.63159,31.08383000000012],[-106.1429,31.39995],[-106.50758999999982,31.75452],[-108.24,31.7548537181664],[-108.24194,31.34222],[-109.035,31.34194000000016],[-111.02361,31.33472],[-113.30498,32.03914],[-114.815,32.52528],[-114.72138999999986,32.72083],[-115.9913499999999,32.61239000000014],[-117.12775999999978,32.53534],[-117.29593769127388,33.04622461520389],[-117.944,33.621236431201396],[-118.41060227589749,33.740909223124504],[-118.51989482279971,34.02778157757575],[-119.081,34.078],[-119.43884064201669,34.3484771782843],[-120.36778,34.44711],[-120.62286,34.60855],[-120.74433,35.15686000000011],[-121.71456999999988,36.16153],[-122.54747,37.551760000000115],[-122.51201,37.78339000000013],[-122.95319,38.11371000000011],[-123.7272,38.95166000000012],[-123.86517,39.76699000000013],[-124.39807,40.3132],[-124.17886,41.142020000000116],[-124.2137,41.99964000000014],[-124.53284,42.7659900000001],[-124.14214,43.70838],[-124.020535,44.615895],[-123.89893,45.52341],[-124.079635,46.86475],[-124.39567,47.72017000000011],[-124.68721008300783,48.18443298339855],[-124.56610107421876,48.3797149658204],[-123.12,48.04],[-122.58736,47.096],[-122.34,47.36],[-122.5,48.18],[-122.84,49.000000000000114],[-120,49.000000000000114],[-117.03121,49.000000000000114],[-116.04818,49.000000000000114],[-113,49.000000000000114],[-110.04999999999983,49.000000000000114],[-107.05,49.000000000000114],[-104.04826,48.99986],[-100.65,49.000000000000114],[-97.22872000000471,49.00070000000011],[-95.15906950917196,49.000000000000114],[-95.15609,49.38425],[-94.81758,49.38905]]],[[[-153.0063140533369,57.11584219016589],[-154.0050902984581,56.73467682558106],[-154.5164027577701,56.9927489284467],[-154.67099280497115,57.46119578717249],[-153.76277950744148,57.81657461204377],[-153.2287294179211,57.968968410872435],[-152.56479061583514,57.901427313866975],[-152.1411472239063,57.59105866152199],[-153.0063140533369,57.11584219016589]]],[[[-165.57916419173358,59.90998688418755],[-166.19277014876727,59.754440822988975],[-166.848337368822,59.94140615502096],[-167.45527706609008,60.21306915957938],[-166.46779212142462,60.38416982689778],[-165.67442969466367,60.293606879306246],[-165.57916419173358,59.90998688418755]]],[[[-171.7316568675394,63.78251536727592],[-171.1144335602452,63.592191067144995],[-170.4911124339407,63.69497549097352],[-169.68250545965358,63.431115627691156],[-168.6894394603007,63.2975062120006],[-168.7719408844546,63.18859813094545],[-169.52943986720504,62.9769314642779],[-170.29055620021597,63.194437567794466],[-170.67138566799088,63.37582184513897],[-171.55306311753867,63.317789211675084],[-171.7911106028912,63.405845852300494],[-171.7316568675394,63.78251536727592]]],[[[-155.06779029032424,71.1477763943237],[-154.34416520894123,70.6964085964702],[-153.90000627339262,70.8899885118357],[-152.2100060699353,70.82999217394485],[-152.27000240782615,70.60000621202985],[-150.73999243874454,70.43001658800571],[-149.72000301816752,70.53001048449045],[-147.61336157935708,70.2140349392418],[-145.6899898002253,70.12000967068676],[-144.92001095907642,69.9899917670405],[-143.5894461804252,70.15251414659832],[-142.07251034871342,69.85193817817265],[-140.98598752156073,69.71199839952638],[-140.9859883290049,69.71199839952638],[-140.9924987520294,66.00002859156868],[-140.99776974812312,60.30639679629861],[-140.0129978161531,60.27683787702759],[-139.03900042031586,60.000007229240026],[-138.34089,59.56211000000016],[-137.4525,58.905000000000115],[-136.4797200000001,59.46389],[-135.47583,59.78778],[-134.945,59.27056000000013],[-134.27111,58.86111],[-133.35554888220722,58.410285142645165],[-132.73042,57.69289000000011],[-131.70780999999988,56.55212],[-130.00778,55.91583],[-129.9799942633583,55.28499787049722],[-130.53611018946725,54.8027534043494],[-131.08581823797215,55.17890615500204],[-131.9672114671423,55.49777558045906],[-132.25001074285947,56.36999624289746],[-133.53918108435641,57.17888743756214],[-134.07806292029605,58.1230675319669],[-135.03821103227907,58.18771474876393],[-136.62806230995466,58.21220937767046],[-137.80000627968604,58.49999542910379],[-139.867787041413,59.53776154238915],[-140.82527381713305,59.727517401765084],[-142.57444353556446,60.08444651960499],[-143.9588809948799,59.9991804063234],[-145.92555681682785,60.45860972761429],[-147.11437394914668,60.88465607364463],[-148.22430620012767,60.672989406977166],[-148.01806555885076,59.97832896589363],[-148.5708225168609,59.914172675203304],[-149.72785783587585,59.70565827090556],[-150.60824337461645,59.36821116803949],[-151.71639278868332,59.15582103131999],[-151.85943315326716,59.744984035879604],[-151.4097190012472,60.72580272077939],[-150.34694149473253,61.03358755150986],[-150.62111080625698,61.284424953854455],[-151.89583919981686,60.72719798445129],[-152.5783298410956,60.06165721296429],[-154.01917212625762,59.35027944603428],[-153.28751135965317,58.8647276882198],[-154.2324924387585,58.14637360293054],[-155.30749142151024,57.72779450136633],[-156.3083347239231,57.42277435976365],[-156.55609737854633,56.979984849670636],[-158.11721655986776,56.46360809999419],[-158.43332129619716,55.99415355083855],[-159.60332739971744,55.56668610292012],[-160.2897196116342,55.643580634170576],[-161.2230476552578,55.364734605523495],[-162.23776607974108,55.02418691672011],[-163.06944658104638,54.68973704692717],[-164.7855692210272,54.40417308208217],[-164.94222632552004,54.57222483989534],[-163.84833960676568,55.03943146424612],[-162.87000139061593,55.348043117893205],[-161.80417497459604,55.89498647727043],[-160.56360470278116,56.00805451112504],[-160.0705598622845,56.41805532492876],[-158.68444291891944,57.01667511659787],[-158.46109737855394,57.21692129172888],[-157.7227703521839,57.57000051536306],[-157.55027442119356,58.32832632103023],[-157.041674974577,58.91888458926172],[-158.19473120830548,58.61580231386984],[-158.5172179840231,58.78778148053732],[-159.05860612692874,58.424186102931685],[-159.71166704001735,58.93139028587634],[-159.9812888255002,58.57254914004164],[-160.35527116599653,59.07112335879364],[-161.35500342511506,58.670837714260756],[-161.96889360252635,58.67166453717738],[-162.05498653872468,59.26692536074745],[-161.87417070213536,59.6336213242906],[-162.5180590484921,59.98972361921391],[-163.81834143782015,59.79805573184339],[-164.66221757714646,60.26748444278265],[-165.34638770247483,60.50749563256241],[-165.35083187565186,61.07389516869751],[-166.12137915755596,61.500019029376226],[-165.73445187077053,62.074996853271806],[-164.91917863671785,62.63307648380793],[-164.56250790103934,63.14637848576305],[-163.75333248599702,63.21944896102377],[-163.0672244944579,63.05945872664802],[-162.26055538638172,63.54193573674117],[-161.5344498362486,63.455816962326764],[-160.77250668032113,63.766108100023274],[-160.95833513084256,64.22279857040277],[-161.5180684072122,64.40278758407531],[-160.77777767641476,64.78860382756642],[-161.39192623598763,64.77723501246234],[-162.45305009666885,64.55944468856822],[-162.7577860178941,64.33860545516882],[-163.5463942128843,64.5591604681905],[-164.96082984114517,64.44694509546885],[-166.42528825586447,64.68667206487072],[-166.84500423893905,65.08889557561453],[-168.11056006576717,65.66999705673675],[-166.70527116602196,66.0883177761394],[-164.4747096425755,66.5766600612975],[-163.65251176659564,66.5766600612975],[-163.78860165103617,66.07720734319668],[-161.67777442121016,66.11611969671242],[-162.48971452538,66.73556509059512],[-163.71971696679108,67.1163945583701],[-164.4309913808565,67.6163382025778],[-165.39028683170676,68.04277212185025],[-166.76444068099602,68.35887685817968],[-166.20470740462662,68.88303091091618],[-164.4308105133435,68.91553538682774],[-163.16861365461452,69.3711148139129],[-162.93056616926202,69.85806183539927],[-161.90889726463553,70.33332998318764],[-160.9347965159337,70.44768992784958],[-159.03917578838715,70.89164215766894],[-158.11972286683397,70.82472117785105],[-156.58082455139805,71.35776357694175],[-155.06779029032424,71.1477763943237]]]]}},{"type":"Feature","properties":{"abbrev":"Arg.","name":"Argentina","name_long":"Argentina","iso_a2":"AR","iso_a3":"ARG","iso_n3":"032"},"geometry":{"type":"MultiPolygon","coordinates":[[[[-65.5,-55.2],[-66.45,-55.25],[-66.95992,-54.89681],[-67.56244,-54.87001],[-68.63335,-54.8695],[-68.63401022758316,-52.63637045887445],[-68.25,-53.1],[-67.75,-53.85],[-66.45,-54.45],[-65.05,-54.7],[-65.5,-55.2]]],[[[-64.96489213729458,-22.075861504812348],[-64.37702104354227,-22.798091322523547],[-63.98683814152247,-21.993644301035957],[-62.846468471921554,-22.034985446869456],[-62.6850571356579,-22.249029229422405],[-60.84656470400994,-23.8807125790383],[-60.02896603050399,-24.032796319273245],[-58.80712846539495,-24.771459242453275],[-57.77721716981796,-25.16233977630904],[-57.63366004091114,-25.60365650808167],[-58.61817359071972,-27.12371876394712],[-57.60975969097615,-27.395898532828426],[-56.48670162619299,-27.54849903738625],[-55.6958455063982,-27.38783700939082],[-54.78879492859505,-26.621785577096087],[-54.625290696823555,-25.739255466415486],[-54.13004960795441,-25.54763925547725],[-53.62834896504873,-26.124865004177437],[-53.648735317587885,-26.92347258881611],[-54.49072526713553,-27.474756768505767],[-55.1622863429846,-27.88191537853342],[-56.2908996242391,-28.852760512000852],[-57.62513342958291,-30.216294854454244],[-57.87493730328191,-31.016556084926165],[-58.14244035504075,-32.04450367607619],[-58.13264767112142,-33.040566908502015],[-58.34961117209883,-33.263188978815435],[-58.42707414410438,-33.90945444105755],[-58.49544206402654,-34.43148976007011],[-57.225829637263644,-35.28802662530789],[-57.362358771378744,-35.977390232081504],[-56.73748735210546,-36.41312590916658],[-56.78828528504834,-36.901571547189334],[-57.74915686708343,-38.183870538079915],[-59.231857062401865,-38.720220228837206],[-61.23744523786561,-38.928424574541154],[-62.33595699731015,-38.82770720800437],[-62.12576310896293,-39.424104913084875],[-62.330530971919444,-40.17258635840032],[-62.14599443220524,-40.67689666113674],[-62.745802781816984,-41.02876148861209],[-63.77049475773253,-41.166789239263665],[-64.73208980981971,-40.802677097335135],[-65.11803524439159,-41.06431487402888],[-64.97856055363584,-42.05800099056932],[-64.30340796574248,-42.359016208669495],[-63.75594784204235,-42.04368661882451],[-63.45805904809589,-42.563138116222355],[-64.3788038804563,-42.87355844499964],[-65.1818039618397,-43.495380954767796],[-65.32882341171013,-44.501366062193696],[-65.5652689276616,-45.03678557716979],[-66.50996578638936,-45.03962778094584],[-67.29379391139244,-45.5518962542552],[-67.58054643418009,-46.30177296324254],[-66.59706641301726,-47.03392465595381],[-65.64102657740145,-47.236134535511894],[-65.98508826360074,-48.13328907653114],[-67.16617896184766,-48.697337334996945],[-67.81608761256646,-49.86966887797042],[-68.72874508327317,-50.26421843851887],[-69.1385391913478,-50.7325102679478],[-68.81556148952353,-51.771104011594105],[-68.14999487982041,-52.3499834061277],[-68.57154537624135,-52.29944385534626],[-69.49836218939609,-52.14276091263725],[-71.91480383979635,-52.009022305865926],[-72.32940385607404,-51.42595631287241],[-72.30997351753237,-50.677009779666356],[-72.97574683296463,-50.74145029073431],[-73.32805091011448,-50.37878508890987],[-73.41543575712004,-49.31843637471296],[-72.64824744331494,-48.87861825947679],[-72.33116085477195,-48.244238376661826],[-72.44735531278027,-47.73853281025353],[-71.91725847033021,-46.8848381487918],[-71.55200944689125,-45.56073292417713],[-71.65931555854533,-44.97368865334144],[-71.22277889675973,-44.784242852559416],[-71.32980078803621,-44.40752166115169],[-71.79362260607195,-44.20717213315611],[-71.46405615913051,-43.78761117937833],[-71.91542395698391,-43.40856454851742],[-72.14889807807853,-42.25488819760139],[-71.74680375841547,-42.051386407235995],[-71.91573401557756,-40.83233936947073],[-71.68076127794646,-39.80816415787807],[-71.41351660834904,-38.916022230791114],[-70.81466427273472,-38.55299529394074],[-71.11862504747543,-37.5768274879472],[-71.1218806627098,-36.65812387466234],[-70.36476925320167,-36.005088799789945],[-70.38804948594908,-35.16968759535944],[-69.81730912950147,-34.193571465798286],[-69.81477698431921,-33.27388600029985],[-70.07439938015364,-33.09120981214803],[-70.53506893581945,-31.365010267870286],[-69.91900834825192,-30.336339206668313],[-70.01355038112987,-29.36792286551855],[-69.65613033718314,-28.459141127233693],[-69.00123491074828,-27.52121388113613],[-68.2955415513704,-26.89933969493579],[-68.59479977077268,-26.506908868111267],[-68.38600114609736,-26.185016371365233],[-68.41765296087613,-24.518554782816878],[-67.32844295924414,-24.02530323659091],[-66.98523393417764,-22.98634856536283],[-67.10667355006362,-22.7359245744764],[-66.27333940292485,-21.832310479420684],[-64.96489213729458,-22.075861504812348]]]]}},{"type":"Feature","properties":{"abbrev":"Bolivia","name":"Bolivia","name_long":"Bolivia","iso_a2":"BO","iso_a3":"BOL","iso_n3":"068"},"geometry":{"type":"Polygon","coordinates":[[[-62.846468471921554,-22.03498544686945],[-63.98683814152247,-21.99364430103595],[-64.37702104354226,-22.79809132252354],[-64.9648921372946,-22.075861504812327],[-66.27333940292485,-21.83231047942072],[-67.1066735500636,-22.735924574476414],[-67.82817989772273,-22.872918796482175],[-68.21991309271128,-21.494346612231865],[-68.75716712103375,-20.372657972904463],[-68.44222510443092,-19.40506845467143],[-68.96681840684187,-18.981683444904107],[-69.10024695501949,-18.260125420812674],[-69.59042375352405,-17.580011895419332],[-68.9596353827533,-16.50069793057127],[-69.38976416693471,-15.660129082911654],[-69.16034664577495,-15.323973890853019],[-69.33953467474701,-14.953195489158832],[-68.9488866848366,-14.453639418193283],[-68.92922380234954,-13.602683607643007],[-68.88007951523997,-12.899729099176653],[-68.66507971868961,-12.561300144097173],[-69.52967810736496,-10.951734307502194],[-68.78615759954948,-11.03638030359628],[-68.27125362819326,-11.01452117273682],[-68.04819230820539,-10.712059014532485],[-67.17380123561074,-10.30681243249961],[-66.64690833196279,-9.931331475466862],[-65.33843522811642,-9.76198780684639],[-65.44483700220539,-10.511451104375432],[-65.32189876978302,-10.895872084194679],[-65.40228146021303,-11.566270440317153],[-64.3163529120316,-12.461978041232191],[-63.19649878605057,-12.627032565972433],[-62.80306026879638,-13.000653171442686],[-62.127080857986385,-13.198780612849724],[-61.71320431176078,-13.489202162330052],[-61.08412126325565,-13.479383640194598],[-60.503304002511136,-13.775954685117659],[-60.45919816755003,-14.354007256734555],[-60.26432634137736,-14.64597909918364],[-60.251148851142936,-15.077218926659322],[-60.542965664295146,-15.093910414289596],[-60.158389655179036,-16.258283786690082],[-58.24121985536669,-16.299573256091293],[-58.38805843772404,-16.877109063385276],[-58.28080400250226,-17.271710300366017],[-57.734558274961,-17.55246835700777],[-57.498371141170985,-18.174187513911292],[-57.67600887717431,-18.961839694904025],[-57.949997321185826,-19.40000416430682],[-57.85380164247451,-19.969995212486186],[-58.166392381408045,-20.176700941653678],[-58.183471442280506,-19.868399346600363],[-59.115042487206104,-19.356906019775398],[-60.04356462262649,-19.342746677327426],[-61.786326463453776,-19.633736667562964],[-62.26596126977079,-20.513734633061276],[-62.29117936872922,-21.05163461678739],[-62.685057135657885,-22.249029229422387],[-62.846468471921554,-22.03498544686945]]]}},{"type":"Feature","properties":{"abbrev":"Brazil","name":"Brazil","name_long":"Brazil","iso_a2":"BR","iso_a3":"BRA","iso_n3":"076"},"geometry":{"type":"Polygon","coordinates":[[[-57.62513342958296,-30.216294854454258],[-56.29089962423908,-28.85276051200089],[-55.16228634298457,-27.881915378533463],[-54.490725267135524,-27.47475676850579],[-53.648735317587885,-26.923472588816086],[-53.62834896504874,-26.124865004177472],[-54.13004960795439,-25.547639255477254],[-54.625290696823576,-25.73925546641551],[-54.42894609233059,-25.162184747012166],[-54.29347632507745,-24.570799655863965],[-54.29295956075451,-24.02101409271073],[-54.652834235235126,-23.83957813893396],[-55.02790178080954,-24.001273695575225],[-55.40074723979542,-23.956935316668805],[-55.517639329639636,-23.571997572526634],[-55.610682745981144,-22.655619398694842],[-55.79795813660691,-22.356929620047822],[-56.47331743022939,-22.086300144135283],[-56.8815095689029,-22.28215382252148],[-57.937155727761294,-22.090175876557172],[-57.87067399761779,-20.73268767668195],[-58.166392381408045,-20.176700941653678],[-57.85380164247451,-19.969995212486186],[-57.949997321185826,-19.40000416430682],[-57.67600887717431,-18.961839694904025],[-57.498371141170985,-18.174187513911292],[-57.734558274961,-17.55246835700777],[-58.28080400250226,-17.271710300366017],[-58.38805843772404,-16.877109063385276],[-58.24121985536669,-16.299573256091293],[-60.158389655179036,-16.258283786690082],[-60.542965664295146,-15.093910414289596],[-60.251148851142936,-15.077218926659322],[-60.26432634137736,-14.64597909918364],[-60.45919816755003,-14.354007256734555],[-60.503304002511136,-13.775954685117659],[-61.08412126325565,-13.479383640194598],[-61.71320431176078,-13.489202162330052],[-62.127080857986385,-13.198780612849724],[-62.80306026879638,-13.000653171442686],[-63.19649878605057,-12.627032565972433],[-64.3163529120316,-12.461978041232191],[-65.40228146021303,-11.566270440317153],[-65.32189876978302,-10.895872084194679],[-65.44483700220539,-10.511451104375432],[-65.33843522811642,-9.76198780684639],[-66.64690833196279,-9.931331475466862],[-67.17380123561074,-10.30681243249961],[-68.04819230820539,-10.712059014532485],[-68.27125362819326,-11.01452117273682],[-68.78615759954948,-11.03638030359628],[-69.52967810736496,-10.951734307502194],[-70.0937522040469,-11.123971856331012],[-70.54868567572841,-11.009146823778465],[-70.48189388699117,-9.490118096558845],[-71.30241227892154,-10.079436130415374],[-72.18489071316984,-10.053597914269432],[-72.56303300646564,-9.520193780152717],[-73.22671342639016,-9.462212823121234],[-73.01538265653254,-9.03283334720806],[-73.57105933296707,-8.424446709835834],[-73.98723548042966,-7.523829847853064],[-73.7234014553635,-7.340998630404414],[-73.72448666044164,-6.91859547285064],[-73.1200274319236,-6.629930922068239],[-73.21971126981461,-6.089188734566078],[-72.96450720894119,-5.741251315944893],[-72.89192765978726,-5.274561455916981],[-71.74840572781655,-4.593982842633011],[-70.92884334988358,-4.401591485210368],[-70.7947688463023,-4.251264743673303],[-69.89363521999663,-4.298186944194327],[-69.44410193548961,-1.556287123219818],[-69.42048580593223,-1.122618503426409],[-69.5770653957766,-0.549991957200163],[-70.02065589057005,-0.185156345219539],[-70.0155657619893,0.541414292804205],[-69.45239600287246,0.706158758950693],[-69.25243404811906,0.602650865070075],[-69.21863766140018,0.985676581217433],[-69.80459672715773,1.089081122233466],[-69.81697323269162,1.714805202639624],[-67.86856502955884,1.692455145673392],[-67.53781002467468,2.03716278727633],[-67.25999752467358,1.719998684084956],[-67.0650481838525,1.130112209473225],[-66.87632585312258,1.253360500489336],[-66.32576514348496,0.724452215982012],[-65.54826738143757,0.78925446207603],[-65.35471330428837,1.0952822941085],[-64.61101192895985,1.328730576987042],[-64.19930579289051,1.49285492594602],[-64.08308549666609,1.91636912679408],[-63.36878801131166,2.200899562993129],[-63.42286739770512,2.411067613124174],[-64.26999915226578,2.497005520025567],[-64.40882788761792,3.126786200366624],[-64.36849443221409,3.797210394705246],[-64.81606401229402,4.056445217297423],[-64.62865943058755,4.14848094320925],[-63.88834286157416,4.020530096854571],[-63.0931975978991,3.770571193858785],[-62.804533047116706,4.006965033377952],[-62.08542965355914,4.162123521334308],[-60.96689327660153,4.536467596856639],[-60.60117916527194,4.91809804933213],[-60.73357418480372,5.200277207861901],[-60.21368343773133,5.244486395687602],[-59.98095862490488,5.014061184098139],[-60.11100236676737,4.574966538914083],[-59.767405768458715,4.423502915866607],[-59.53803992373123,3.958802598481938],[-59.81541317405786,3.606498521332085],[-59.97452490908456,2.755232652188056],[-59.71854570172674,2.24963043864436],[-59.64604366722126,1.786893825686789],[-59.03086157900265,1.317697658692722],[-58.5400129868783,1.268088283692521],[-58.42947709820596,1.463941962078721],[-58.11344987652502,1.507195135907025],[-57.66097103537737,1.682584947105639],[-57.335822923396904,1.94853770589576],[-56.78270423036083,1.863710842288654],[-56.539385748914555,1.899522609866921],[-55.99569800477175,1.817667141116601],[-55.905600145070885,2.02199575439866],[-56.0733418442903,2.220794989425499],[-55.973322109589375,2.510363877773017],[-55.569755011606,2.421506252447131],[-55.09758744975514,2.523748073736613],[-54.52475419779971,2.311848863123785],[-54.08806250671724,2.105556545414629],[-53.77852067728892,2.376702785650082],[-53.55483924011354,2.334896551925951],[-53.4184651352953,2.053389187015981],[-52.939657151894956,2.124857692875636],[-52.55642473001842,2.504705308437053],[-52.249337531123956,3.241094468596245],[-51.65779741067888,4.156232408053029],[-51.31714636901086,4.203490505383954],[-51.069771287629656,3.650397650564031],[-50.508875291533656,1.901563828942457],[-49.97407589374506,1.736483465986069],[-49.947100796088705,1.046189683431223],[-50.699251268096916,0.222984117021682],[-50.38821082213214,-0.078444512536819],[-48.62056677915631,-0.235489190271821],[-48.58449662941659,-1.237805271005001],[-47.824956427590635,-0.5816179337628],[-46.566583624851226,-0.941027520352776],[-44.905703090990414,-1.551739597178134],[-44.417619187993665,-2.137750339367976],[-44.58158850765578,-2.691308282078524],[-43.418791266440195,-2.383110039889793],[-41.47265682632825,-2.912018324397116],[-39.97866533055404,-2.873054294449041],[-38.50038347019657,-3.700652357603395],[-37.2232521225352,-4.820945733258917],[-36.45293738457639,-5.109403578312153],[-35.59779578301047,-5.149504489770648],[-35.23538896334756,-5.464937432480247],[-34.89602983248683,-6.738193047719711],[-34.729993455533034,-7.343220716992966],[-35.12821204277422,-8.996401462442286],[-35.636966518687714,-9.649281508017815],[-37.046518724097,-11.040721123908801],[-37.68361161960736,-12.171194756725823],[-38.42387651218844,-13.038118584854288],[-38.673887091616514,-13.057652276260619],[-38.953275722802545,-13.793369642800023],[-38.88229814304965,-15.667053724838768],[-39.16109249526431,-17.208406670808472],[-39.2673392400564,-17.867746270420483],[-39.58352149103423,-18.262295830968938],[-39.76082333022764,-19.59911345792741],[-40.77474077001034,-20.904511814052423],[-40.94475623225061,-21.937316989837807],[-41.754164191238225,-22.370675551037458],[-41.98828426773655,-22.970070489190892],[-43.07470374202475,-22.96769337330547],[-44.64781185563781,-23.351959323827842],[-45.35213578955991,-23.796841729428582],[-46.47209326840554,-24.08896860117454],[-47.64897233742066,-24.885199069927722],[-48.4954581365777,-25.877024834905654],[-48.64100480812774,-26.623697605090932],[-48.47473588722865,-27.17591196056189],[-48.661520351747626,-28.186134535435716],[-48.88845740415739,-28.674115085567884],[-49.587329474472675,-29.224469089476337],[-50.696874152211485,-30.984465020472957],[-51.576226162306156,-31.77769825615321],[-52.256081305538046,-32.24536996839466],[-52.712099982297694,-33.19657805759118],[-53.373661668498244,-33.768377780900764],[-53.6505439927181,-33.20200408298183],[-53.209588995971544,-32.727666110974724],[-53.787951626182185,-32.047242526987624],[-54.57245154480512,-31.494511407193748],[-55.601510179249345,-30.853878676071393],[-55.97324459494093,-30.883075860316303],[-56.97602576356473,-30.109686374636127],[-57.62513342958296,-30.216294854454258]]]}},{"type":"Feature","properties":{"abbrev":"Chile","name":"Chile","name_long":"Chile","iso_a2":"CL","iso_a3":"CHL","iso_n3":"152"},"geometry":{"type":"MultiPolygon","coordinates":[[[[-68.63401022758316,-52.63637045887437],[-68.6333499999999,-54.8695],[-67.56244,-54.87001],[-66.95992,-54.89681],[-67.29102999999989,-55.30124],[-68.14862999999986,-55.61183],[-68.63999081081181,-55.58001799908689],[-69.2321,-55.49906],[-69.95809,-55.19843],[-71.00568,-55.05383],[-72.2639,-54.49514],[-73.2852,-53.95751999999989],[-74.66253,-52.83749],[-73.8381,-53.04743],[-72.43418,-53.7154],[-71.10773,-54.07433],[-70.59177999999979,-53.61583],[-70.26748,-52.93123],[-69.34564999999989,-52.5183],[-68.63401022758316,-52.63637045887437]]],[[[-68.21991309271124,-21.494346612231837],[-67.82817989772266,-22.87291879648218],[-67.10667355006362,-22.7359245744764],[-66.98523393417764,-22.98634856536283],[-67.32844295924414,-24.02530323659091],[-68.41765296087613,-24.518554782816878],[-68.38600114609736,-26.185016371365233],[-68.59479977077268,-26.506908868111267],[-68.2955415513704,-26.89933969493579],[-69.00123491074828,-27.52121388113613],[-69.65613033718314,-28.459141127233693],[-70.01355038112987,-29.36792286551855],[-69.91900834825192,-30.336339206668313],[-70.53506893581945,-31.365010267870286],[-70.07439938015364,-33.09120981214803],[-69.81477698431921,-33.27388600029985],[-69.81730912950147,-34.193571465798286],[-70.38804948594908,-35.16968759535944],[-70.36476925320167,-36.005088799789945],[-71.1218806627098,-36.65812387466234],[-71.11862504747543,-37.5768274879472],[-70.81466427273472,-38.55299529394074],[-71.41351660834904,-38.916022230791114],[-71.68076127794646,-39.80816415787807],[-71.91573401557756,-40.83233936947073],[-71.74680375841547,-42.051386407235995],[-72.14889807807853,-42.25488819760139],[-71.91542395698391,-43.40856454851742],[-71.46405615913051,-43.78761117937833],[-71.79362260607195,-44.20717213315611],[-71.32980078803621,-44.40752166115169],[-71.22277889675973,-44.784242852559416],[-71.65931555854533,-44.97368865334144],[-71.55200944689125,-45.56073292417713],[-71.91725847033021,-46.8848381487918],[-72.44735531278027,-47.73853281025353],[-72.33116085477195,-48.244238376661826],[-72.64824744331494,-48.87861825947679],[-73.41543575712004,-49.31843637471296],[-73.32805091011448,-50.37878508890987],[-72.97574683296463,-50.74145029073431],[-72.30997351753237,-50.677009779666356],[-72.32940385607404,-51.42595631287241],[-71.91480383979635,-52.009022305865926],[-69.49836218939609,-52.14276091263725],[-68.57154537624135,-52.29944385534626],[-69.46128434922664,-52.29195077266393],[-69.94277950710614,-52.53793059037325],[-70.84510169135453,-52.899200528525725],[-71.00633216010525,-53.83325204220135],[-71.42979468452094,-53.85645476030039],[-72.55794287788486,-53.531410001184454],[-73.70275672066288,-52.83506926860725],[-73.70275672066288,-52.8350700760515],[-74.94676347522515,-52.26275358841903],[-75.2600260077785,-51.629354750373224],[-74.9766324530898,-51.04339568461569],[-75.4797541978835,-50.37837167745156],[-75.60801510283196,-48.6737728818718],[-75.18276974150213,-47.71191944762316],[-74.1265809801047,-46.9392534319951],[-75.64439531116545,-46.64764332457203],[-74.69215369332306,-45.76397633238098],[-74.35170935738427,-44.103044122087894],[-73.2403560045152,-44.454960625995625],[-72.71780392117978,-42.383355808278985],[-73.38889990913825,-42.11753224056957],[-73.70133561877486,-43.365776462579745],[-74.33194312203258,-43.22495818458441],[-74.01795711942717,-41.794812920906836],[-73.67709937202997,-39.942212823243125],[-73.21759253609068,-39.258688653318515],[-73.50555945503706,-38.28288258235107],[-73.58806087919109,-37.156284681956016],[-73.1667170884993,-37.12378020604435],[-72.55313696968173,-35.508840020491036],[-71.86173214383257,-33.90909270603153],[-71.43845048692992,-32.41889942803083],[-71.66872066922244,-30.92064462659252],[-71.37008256700773,-30.095682061485004],[-71.48989437527646,-28.861442152625912],[-70.90512386746158,-27.6403797340012],[-70.72495398627598,-25.70592416758721],[-70.40396582709505,-23.628996677344542],[-70.09124589708067,-21.393319187101223],[-70.16441972520599,-19.756468194256186],[-70.37257239447774,-18.347975355708883],[-69.85844356960581,-18.092693780187034],[-69.590423753524,-17.58001189541929],[-69.10024695501943,-18.260125420812656],[-68.96681840684184,-18.981683444904093],[-68.44222510443095,-19.405068454671422],[-68.75716712103372,-20.372657972904477],[-68.21991309271124,-21.494346612231837]]]]}},{"type":"Feature","properties":{"abbrev":"Col.","name":"Colombia","name_long":"Colombia","iso_a2":"CO","iso_a3":"COL","iso_n3":"170"},"geometry":{"type":"Polygon","coordinates":[[[-75.37322323271385,-0.15203175212045],[-75.80146582711659,0.084801337073202],[-76.29231441924097,0.416047268064119],[-76.57637976754938,0.256935533037435],[-77.4249843004304,0.395686753741117],[-77.66861284047044,0.825893052570961],[-77.85506140817952,0.809925034992773],[-78.85525875518871,1.380923773601822],[-78.99093522817103,1.691369940595251],[-78.61783138702371,1.766404120283056],[-78.66211808949785,2.267355454920477],[-78.42761043975732,2.629555568854215],[-77.93154252797149,2.696605739752926],[-77.51043128122501,3.325016994638247],[-77.12768978545526,3.849636135265357],[-77.49627193877703,4.087606105969428],[-77.3076012844794,4.667984117039452],[-77.53322058786573,5.582811997902496],[-77.31881507028675,5.84535411216136],[-77.47666073272228,6.691116441266303],[-77.88157141794525,7.223771267114785],[-77.75341386586139,7.709839789252142],[-77.43110795765699,7.638061224798735],[-77.24256649444008,7.935278225125444],[-77.47472286651133,8.524286200388218],[-77.35336076527385,8.67050466555807],[-76.83667395700357,8.638749497914716],[-76.08638383655786,9.336820583529487],[-75.67460018584005,9.443248195834599],[-75.66470414905618,9.774003200718738],[-75.48042599150335,10.618990383339309],[-74.90689510771197,11.083044745320322],[-74.27675269234489,11.102035834187587],[-74.1972226630477,11.310472723836865],[-73.41476396350029,11.22701528568548],[-72.62783525255963,11.731971543825523],[-72.23819495307892,11.955549628136326],[-71.75409013536864,12.437303168177309],[-71.3998223537917,12.376040757695293],[-71.13746110704588,12.112981879113505],[-71.3315836249503,11.776284084515808],[-71.97392167833829,11.60867157637712],[-72.22757544624294,11.10870209395324],[-72.61465776232521,10.821975409381778],[-72.9052860175347,10.450344346554772],[-73.02760413276957,9.736770331252444],[-73.30495154488005,9.151999823437606],[-72.7887298245004,9.085027167187334],[-72.6604947577681,8.625287787302682],[-72.43986223009796,8.405275376820029],[-72.36090064155596,8.002638454617895],[-72.47967892117885,7.632506008327354],[-72.44448727078807,7.423784898300481],[-72.19835242378188,7.340430813013682],[-71.96017574734864,6.991614895043538],[-70.67423356798152,7.087784735538719],[-70.09331295437242,6.96037649172311],[-69.38947994655712,6.099860541198836],[-68.98531856960236,6.206804917826858],[-68.26505245631823,6.153268133972475],[-67.69508724635502,6.267318020040647],[-67.34143958196557,6.095468044454023],[-67.52153194850275,5.556870428891969],[-67.74469662135522,5.221128648291668],[-67.82301225449355,4.503937282728899],[-67.62183590358127,3.839481716319994],[-67.33756384954368,3.542342230641722],[-67.30317318385345,3.31845408773718],[-67.8099381171237,2.820655015469569],[-67.44709204778631,2.600280869960869],[-67.18129431829307,2.250638129074062],[-66.87632585312258,1.253360500489336],[-67.0650481838525,1.130112209473225],[-67.25999752467358,1.719998684084956],[-67.53781002467468,2.03716278727633],[-67.86856502955884,1.692455145673392],[-69.81697323269162,1.714805202639624],[-69.80459672715773,1.089081122233466],[-69.21863766140018,0.985676581217433],[-69.25243404811906,0.602650865070075],[-69.45239600287246,0.706158758950693],[-70.0155657619893,0.541414292804205],[-70.02065589057005,-0.185156345219539],[-69.5770653957766,-0.549991957200163],[-69.42048580593223,-1.122618503426409],[-69.44410193548961,-1.556287123219818],[-69.89363521999663,-4.298186944194327],[-70.39404395209499,-3.766591485207825],[-70.69268205430971,-3.742872002785859],[-70.04770850287485,-2.725156345229699],[-70.81347571479196,-2.256864515800743],[-71.41364579942979,-2.342802422702128],[-71.7747607082854,-2.169789727388938],[-72.32578650581365,-2.434218031426454],[-73.07039221870724,-2.308954359550953],[-73.6595035468346,-1.260491224781134],[-74.12239518908906,-1.002832533373848],[-74.44160051135597,-0.530820000819887],[-75.10662451852008,-0.05720549886486],[-75.37322323271385,-0.15203175212045]]]}},{"type":"Feature","properties":{"abbrev":"Ecu.","name":"Ecuador","name_long":"Ecuador","iso_a2":"EC","iso_a3":"ECU","iso_n3":"218"},"geometry":{"type":"Polygon","coordinates":[[[-80.30256059438722,-3.404856459164713],[-79.77029334178093,-2.65751189535964],[-79.98655921092241,-2.220794366061014],[-80.36878394236925,-2.685158786635788],[-80.96776546906436,-2.246942640800704],[-80.76480628123804,-1.965047702648533],[-80.9336590237517,-1.057454522306358],[-80.58337032746127,-0.906662692878683],[-80.39932471385376,-0.283703301600141],[-80.02089820018037,0.360340074053468],[-80.09060970734211,0.768428859862397],[-79.54276201039978,0.982937730305963],[-78.85525875518871,1.380923773601822],[-77.85506140817952,0.809925034992773],[-77.66861284047044,0.825893052570961],[-77.4249843004304,0.395686753741117],[-76.57637976754938,0.256935533037435],[-76.29231441924097,0.416047268064119],[-75.80146582711659,0.084801337073202],[-75.37322323271385,-0.15203175212045],[-75.23372270374193,-0.911416924649529],[-75.54499569365204,-1.56160979574588],[-76.63539425322672,-2.608677666843818],[-77.83790483265861,-3.003020521663103],[-78.45068396677564,-3.873096612161376],[-78.63989722361234,-4.547784112164074],[-79.20528906931771,-4.959128513207389],[-79.62497921417618,-4.454198093283494],[-80.02890804718561,-4.346090996928893],[-80.44224199087216,-4.425724379090674],[-80.46929460317695,-4.059286797708999],[-80.18401485870967,-3.821161797708044],[-80.30256059438722,-3.404856459164713]]]}},{"type":"Feature","properties":{"abbrev":"Flk. Is.","name":"Falkland Is.","name_long":"Falkland Islands","iso_a2":"FK","iso_a3":"FLK","iso_n3":"238"},"geometry":{"type":"Polygon","coordinates":[[[-61.2,-51.85],[-60,-51.25],[-59.15,-51.5],[-58.55,-51.1],[-57.75,-51.55],[-58.05,-51.9],[-59.4,-52.2],[-59.85,-51.85],[-60.7,-52.3],[-61.2,-51.85]]]}},{"type":"Feature","properties":{"abbrev":"Guy.","name":"Guyana","name_long":"Guyana","iso_a2":"GY","iso_a3":"GUY","iso_n3":"328"},"geometry":{"type":"Polygon","coordinates":[[[-59.758284878159195,8.367034816924047],[-59.101684129458654,7.999201971870492],[-58.482962205628056,7.347691351750697],[-58.45487606467743,6.832787380394463],[-58.07810319683737,6.809093736188643],[-57.542218593970645,6.321268215353356],[-57.14743648947688,5.973149929219161],[-57.307245856339506,5.073566595882227],[-57.91428890647214,4.812626451024414],[-57.86020952007869,4.57680105226045],[-58.04469438336068,4.060863552258382],[-57.60156897645786,3.334654649260685],[-57.2814334784097,3.333491929534119],[-57.150097825739905,2.768926906745406],[-56.539385748914555,1.899522609866921],[-56.78270423036083,1.863710842288654],[-57.335822923396904,1.94853770589576],[-57.66097103537737,1.682584947105639],[-58.11344987652502,1.507195135907025],[-58.42947709820596,1.463941962078721],[-58.5400129868783,1.268088283692521],[-59.03086157900265,1.317697658692722],[-59.64604366722126,1.786893825686789],[-59.71854570172674,2.24963043864436],[-59.97452490908456,2.755232652188056],[-59.81541317405786,3.606498521332085],[-59.53803992373123,3.958802598481938],[-59.767405768458715,4.423502915866607],[-60.11100236676737,4.574966538914083],[-59.98095862490488,5.014061184098139],[-60.21368343773133,5.244486395687602],[-60.73357418480372,5.200277207861901],[-61.410302903881956,5.959068101419618],[-61.13941504580795,6.234296779806144],[-61.15933631045648,6.696077378766319],[-60.54399919294098,6.856584377464883],[-60.29566809756239,7.043911444522919],[-60.637972785063766,7.414999904810855],[-60.55058793805819,7.779602972846178],[-59.758284878159195,8.367034816924047]]]}},{"type":"Feature","properties":{"abbrev":"Para.","name":"Paraguay","name_long":"Paraguay","iso_a2":"PY","iso_a3":"PRY","iso_n3":"600"},"geometry":{"type":"Polygon","coordinates":[[[-62.685057135657885,-22.249029229422387],[-62.29117936872922,-21.05163461678739],[-62.26596126977079,-20.513734633061276],[-61.786326463453776,-19.633736667562964],[-60.04356462262649,-19.342746677327426],[-59.115042487206104,-19.356906019775398],[-58.183471442280506,-19.868399346600363],[-58.166392381408045,-20.176700941653678],[-57.87067399761779,-20.73268767668195],[-57.937155727761294,-22.090175876557172],[-56.8815095689029,-22.28215382252148],[-56.47331743022939,-22.086300144135283],[-55.79795813660691,-22.356929620047822],[-55.610682745981144,-22.655619398694842],[-55.517639329639636,-23.571997572526634],[-55.40074723979542,-23.956935316668805],[-55.02790178080954,-24.001273695575225],[-54.652834235235126,-23.83957813893396],[-54.29295956075451,-24.02101409271073],[-54.29347632507745,-24.570799655863965],[-54.42894609233059,-25.162184747012166],[-54.625290696823576,-25.73925546641551],[-54.78879492859505,-26.621785577096134],[-55.69584550639816,-27.38783700939086],[-56.48670162619299,-27.548499037386293],[-57.60975969097615,-27.395898532828387],[-58.61817359071974,-27.123718763947096],[-57.633660040911124,-25.60365650808164],[-57.77721716981794,-25.16233977630904],[-58.80712846539498,-24.77145924245331],[-60.02896603050402,-24.032796319273274],[-60.84656470400991,-23.880712579038292],[-62.685057135657885,-22.249029229422387]]]}},{"type":"Feature","properties":{"abbrev":"Sur.","name":"Suriname","name_long":"Suriname","iso_a2":"SR","iso_a3":"SUR","iso_n3":"740"},"geometry":{"type":"Polygon","coordinates":[[[-57.14743648947688,5.973149929219161],[-55.9493184067898,5.772877915872002],[-55.841779751190415,5.953125311706059],[-55.033250291551774,6.025291449401664],[-53.958044603070896,5.756548163267765],[-54.47863298197923,4.896755682795586],[-54.399542202356514,4.212611395683466],[-54.00693050801901,3.620037746592558],[-54.181726040246275,3.189779771330421],[-54.2697051662232,2.732391669115046],[-54.52475419779971,2.311848863123785],[-55.09758744975514,2.523748073736613],[-55.569755011606,2.421506252447131],[-55.973322109589375,2.510363877773017],[-56.0733418442903,2.220794989425499],[-55.905600145070885,2.02199575439866],[-55.99569800477175,1.817667141116601],[-56.539385748914555,1.899522609866921],[-57.150097825739905,2.768926906745406],[-57.2814334784097,3.333491929534119],[-57.60156897645786,3.334654649260685],[-58.04469438336068,4.060863552258382],[-57.86020952007869,4.57680105226045],[-57.91428890647214,4.812626451024414],[-57.307245856339506,5.073566595882227],[-57.14743648947688,5.973149929219161]]]}},{"type":"Feature","properties":{"abbrev":"Ury.","name":"Uruguay","name_long":"Uruguay","iso_a2":"UY","iso_a3":"URY","iso_n3":"858"},"geometry":{"type":"Polygon","coordinates":[[[-57.62513342958296,-30.216294854454258],[-56.97602576356473,-30.109686374636127],[-55.97324459494093,-30.883075860316303],[-55.601510179249345,-30.853878676071393],[-54.57245154480512,-31.494511407193748],[-53.787951626182185,-32.047242526987624],[-53.209588995971544,-32.727666110974724],[-53.6505439927181,-33.20200408298183],[-53.373661668498244,-33.768377780900764],[-53.806425950726535,-34.396814874002224],[-54.93586605489773,-34.952646579733624],[-55.67408972840329,-34.75265878676407],[-56.21529700379607,-34.85983570733742],[-57.139685024633096,-34.430456231424245],[-57.8178606838155,-34.4625472958775],[-58.42707414410439,-33.90945444105757],[-58.34961117209887,-33.26318897881541],[-58.13264767112144,-33.040566908502015],[-58.14244035504076,-32.044503676076154],[-57.87493730328188,-31.016556084926208],[-57.62513342958296,-30.216294854454258]]]}},{"type":"Feature","properties":{"abbrev":"Peru","name":"Peru","name_long":"Peru","iso_a2":"PE","iso_a3":"PER","iso_n3":"604"},"geometry":{"type":"Polygon","coordinates":[[[-69.59042375352405,-17.580011895419332],[-69.85844356960587,-18.092693780187012],[-70.37257239447771,-18.34797535570887],[-71.37525021023691,-17.773798516513857],[-71.46204077827112,-17.363487644116383],[-73.44452958850042,-16.359362888252996],[-75.23788265654144,-15.265682875227782],[-76.00920508492995,-14.649286390850321],[-76.42346920439775,-13.82318694423243],[-76.25924150257416,-13.535039157772943],[-77.10619238962184,-12.22271615972082],[-78.09215287953464,-10.377712497604065],[-79.03695309112695,-8.386567884965892],[-79.44592037628485,-7.93083342858386],[-79.76057817251004,-7.194340915560083],[-80.53748165558608,-6.541667575713717],[-81.24999630402642,-6.136834405139183],[-80.92634680858244,-5.690556735866565],[-81.41094255239946,-4.736764825055459],[-81.09966956248937,-4.036394138203697],[-80.30256059438722,-3.404856459164713],[-80.18401485870967,-3.821161797708044],[-80.46929460317695,-4.059286797708999],[-80.44224199087216,-4.425724379090674],[-80.02890804718561,-4.346090996928893],[-79.62497921417618,-4.454198093283494],[-79.20528906931771,-4.959128513207389],[-78.63989722361234,-4.547784112164074],[-78.45068396677564,-3.873096612161376],[-77.83790483265861,-3.003020521663103],[-76.63539425322672,-2.608677666843818],[-75.54499569365204,-1.56160979574588],[-75.23372270374193,-0.911416924649529],[-75.37322323271385,-0.15203175212045],[-75.10662451852008,-0.05720549886486],[-74.44160051135597,-0.530820000819887],[-74.12239518908906,-1.002832533373848],[-73.6595035468346,-1.260491224781134],[-73.07039221870724,-2.308954359550953],[-72.32578650581365,-2.434218031426454],[-71.7747607082854,-2.169789727388938],[-71.41364579942979,-2.342802422702128],[-70.81347571479196,-2.256864515800743],[-70.04770850287485,-2.725156345229699],[-70.69268205430971,-3.742872002785859],[-70.39404395209499,-3.766591485207825],[-69.89363521999663,-4.298186944194327],[-70.7947688463023,-4.251264743673303],[-70.92884334988358,-4.401591485210368],[-71.74840572781655,-4.593982842633011],[-72.89192765978726,-5.274561455916981],[-72.96450720894119,-5.741251315944893],[-73.21971126981461,-6.089188734566078],[-73.1200274319236,-6.629930922068239],[-73.72448666044164,-6.91859547285064],[-73.7234014553635,-7.340998630404414],[-73.98723548042966,-7.523829847853064],[-73.57105933296707,-8.424446709835834],[-73.01538265653254,-9.03283334720806],[-73.22671342639016,-9.462212823121234],[-72.56303300646564,-9.520193780152717],[-72.18489071316984,-10.053597914269432],[-71.30241227892154,-10.079436130415374],[-70.48189388699117,-9.490118096558845],[-70.54868567572841,-11.009146823778465],[-70.0937522040469,-11.123971856331012],[-69.52967810736496,-10.951734307502194],[-68.66507971868961,-12.561300144097173],[-68.88007951523997,-12.899729099176653],[-68.92922380234954,-13.602683607643007],[-68.9488866848366,-14.453639418193283],[-69.33953467474701,-14.953195489158832],[-69.16034664577495,-15.323973890853019],[-69.38976416693471,-15.660129082911654],[-68.9596353827533,-16.50069793057127],[-69.59042375352405,-17.580011895419332]]]}},{"type":"Feature","properties":{"abbrev":"Ven.","name":"Venezuela","name_long":"Venezuela","iso_a2":"VE","iso_a3":"VEN","iso_n3":"862"},"geometry":{"type":"Polygon","coordinates":[[[-71.3315836249503,11.776284084515808],[-71.36000566271082,11.53999359786121],[-71.94704993354651,11.423282375530022],[-71.62086829292019,10.969459947142795],[-71.63306393094108,10.446494452349027],[-72.07417395698451,9.865651353388373],[-71.69564409044654,9.072263088411248],[-71.26455929226773,9.137194525585983],[-71.03999935574339,9.859992784052407],[-71.35008378771079,10.211935126176215],[-71.40062333849224,10.968969021036015],[-70.1552988349065,11.37548167566004],[-70.29384334988103,11.846822414594214],[-69.94324459499683,12.162307033736099],[-69.58430009629747,11.459610907431212],[-68.88299923366445,11.443384507691563],[-68.23327145045873,10.885744126829946],[-68.19412655299763,10.554653225135922],[-67.29624854192633,10.54586823164631],[-66.227864142508,10.648626817258688],[-65.65523759628175,10.200798855017323],[-64.89045223657817,10.0772146671913],[-64.32947872583374,10.38959870039568],[-64.31800655786495,10.64141795495398],[-63.07932247582874,10.7017243514386],[-61.880946010980196,10.715625311725104],[-62.73011898461641,10.420268662960906],[-62.388511928950976,9.94820445397464],[-61.58876746280193,9.873066921422264],[-60.83059668643172,9.38133982994894],[-60.67125240745973,8.580174261911878],[-60.15009558779618,8.602756862823426],[-59.758284878159195,8.367034816924047],[-60.55058793805819,7.779602972846178],[-60.637972785063766,7.414999904810855],[-60.29566809756239,7.043911444522919],[-60.54399919294098,6.856584377464883],[-61.15933631045648,6.696077378766319],[-61.13941504580795,6.234296779806144],[-61.410302903881956,5.959068101419618],[-60.73357418480372,5.200277207861901],[-60.60117916527194,4.91809804933213],[-60.96689327660153,4.536467596856639],[-62.08542965355914,4.162123521334308],[-62.804533047116706,4.006965033377952],[-63.0931975978991,3.770571193858785],[-63.88834286157416,4.020530096854571],[-64.62865943058755,4.14848094320925],[-64.81606401229402,4.056445217297423],[-64.36849443221409,3.797210394705246],[-64.40882788761792,3.126786200366624],[-64.26999915226578,2.497005520025567],[-63.42286739770512,2.411067613124174],[-63.36878801131166,2.200899562993129],[-64.08308549666609,1.91636912679408],[-64.19930579289051,1.49285492594602],[-64.61101192895985,1.328730576987042],[-65.35471330428837,1.0952822941085],[-65.54826738143757,0.78925446207603],[-66.32576514348496,0.724452215982012],[-66.87632585312258,1.253360500489336],[-67.18129431829307,2.250638129074062],[-67.44709204778631,2.600280869960869],[-67.8099381171237,2.820655015469569],[-67.30317318385345,3.31845408773718],[-67.33756384954368,3.542342230641722],[-67.62183590358127,3.839481716319994],[-67.82301225449355,4.503937282728899],[-67.74469662135522,5.221128648291668],[-67.52153194850275,5.556870428891969],[-67.34143958196557,6.095468044454023],[-67.69508724635502,6.267318020040647],[-68.26505245631823,6.153268133972475],[-68.98531856960236,6.206804917826858],[-69.38947994655712,6.099860541198836],[-70.09331295437242,6.96037649172311],[-70.67423356798152,7.087784735538719],[-71.96017574734864,6.991614895043538],[-72.19835242378188,7.340430813013682],[-72.44448727078807,7.423784898300481],[-72.47967892117885,7.632506008327354],[-72.36090064155596,8.002638454617895],[-72.43986223009796,8.405275376820029],[-72.6604947577681,8.625287787302682],[-72.7887298245004,9.085027167187334],[-73.30495154488005,9.151999823437606],[-73.02760413276957,9.736770331252444],[-72.9052860175347,10.450344346554772],[-72.61465776232521,10.821975409381778],[-72.22757544624294,11.10870209395324],[-71.97392167833829,11.60867157637712],[-71.3315836249503,11.776284084515808]]]}},{"type":"Feature","properties":{"abbrev":"Afg.","name":"Afghanistan","name_long":"Afghanistan","iso_a2":"AF","iso_a3":"AFG","iso_n3":"004"},"geometry":{"type":"Polygon","coordinates":[[[61.21081709172574,35.650072333309225],[62.230651483005886,35.270663967422294],[62.9846623065766,35.40404083916762],[63.19353844590035,35.857165635718914],[63.9828959491587,36.0079574651466],[64.5464791197339,36.31207326918427],[64.7461051776774,37.111817735333304],[65.58894778835784,37.30521678318564],[65.74563073106681,37.66116404881207],[66.21738488145932,37.39379018813392],[66.51860680528867,37.36278432875879],[67.07578209825962,37.35614390720929],[67.82999962755952,37.14499400486468],[68.13556237170138,37.0231151393043],[68.85944583524594,37.344335842430596],[69.19627282092438,37.15114350030743],[69.51878543485796,37.60899669041341],[70.11657840361033,37.58822276463209],[70.27057417184014,37.735164699854025],[70.3763041523093,38.13839590102752],[70.80682050973289,38.486281643216415],[71.34813113799026,38.258905341132156],[71.23940392444817,37.95326508234188],[71.54191775908478,37.905774441065645],[71.44869347523024,37.06564484308051],[71.8446382994506,36.73817129164692],[72.1930408059624,36.948287665345674],[72.63688968291729,37.047558091778356],[73.26005577992501,37.495256862939],[73.9486959166465,37.4215662704908],[74.98000247589542,37.419990139305895],[75.15802778514092,37.13303091078912],[74.57589277537298,37.02084137628346],[74.06755171091783,36.83617564548845],[72.92002485544447,36.72000702569632],[71.84629194528392,36.50994232842986],[71.26234826038575,36.074387518857804],[71.49876793812109,35.650563259416],[71.6130762063507,35.153203436822864],[71.11501875192162,34.733125718722235],[71.15677330921346,34.34891144463215],[70.8818030129884,33.98885590263851],[69.9305432473596,34.02012014417511],[70.3235941913716,33.35853261975839],[69.68714725126485,33.105498969041236],[69.26252200712256,32.5019440780883],[69.31776411324255,31.90141225842444],[68.92667687365767,31.620189113892064],[68.55693200060932,31.713310044882018],[67.79268924344478,31.58293040620963],[67.68339358914747,31.30315420178142],[66.93889122911847,31.304911200479353],[66.38145755398602,30.73889923758645],[66.34647260932442,29.887943427036177],[65.0468620136161,29.472180691031905],[64.35041873561852,29.560030625928093],[64.14800215033125,29.340819200145972],[63.55026085801117,29.468330796826162],[62.54985680527278,29.31857249604431],[60.874248488208785,29.829238999952604],[61.781221551363444,30.735850328081234],[61.699314406180825,31.37950613049267],[60.94194461451113,31.548074652628753],[60.863654819588966,32.18291962333443],[60.536077915290775,32.98126882581157],[60.963700392506006,33.52883230237625],[60.52842980331158,33.676446031218006],[60.80319339380745,34.40410187431986],[61.21081709172574,35.650072333309225]]]}},{"type":"Feature","properties":{"abbrev":"U.A.E.","name":"United Arab Emirates","name_long":"United Arab Emirates","iso_a2":"AE","iso_a3":"ARE","iso_n3":"784"},"geometry":{"type":"Polygon","coordinates":[[[51.57951867046327,24.245497137951105],[51.757440626844186,24.29407298430547],[51.794389275932865,24.019826158132506],[52.57708051942561,24.177439276622707],[53.404006788960146,24.15131684009917],[54.00800092958758,24.121757920828212],[54.69302371604863,24.79789236093509],[55.43902469261414,25.43914520924494],[56.07082075381456,26.055464178973978],[56.261041701080956,25.71460643157677],[56.396847365144005,24.924732163995486],[55.88623253766801,24.920830593357444],[55.804118686756226,24.269604193615265],[55.981213820220454,24.130542914317825],[55.52863162620823,23.933604030853502],[55.525841098864475,23.524869289640932],[55.234489373602884,23.11099274341532],[55.20834109886319,22.708329982997046],[55.0068030129249,22.496947536707136],[52.000733270074335,23.00115448657894],[51.61770755392698,24.014219265228828],[51.57951867046327,24.245497137951105]]]}},{"type":"Feature","properties":{"abbrev":"Arm.","name":"Armenia","name_long":"Armenia","iso_a2":"AM","iso_a3":"ARM","iso_n3":"051"},"geometry":{"type":"Polygon","coordinates":[[[43.582745802592726,41.09214325618257],[44.97248009621808,41.248128567055595],[45.17949588397934,40.98535390885141],[45.56035118997045,40.812289537105926],[45.35917483905817,40.56150381119346],[45.89190717955509,40.21847565364],[45.61001224140293,39.89999380142518],[46.034534132680676,39.628020738273065],[46.48349897643246,39.464154771475535],[46.50571984231797,38.770605373686294],[46.14362308124881,38.74120148371222],[45.73537926614301,39.31971914321974],[45.73997846861698,39.47399913182713],[45.298144972521456,39.471751207022436],[45.00198733905674,39.740003567049555],[44.79398969908195,39.71300263117705],[44.4000085792887,40.00500031184228],[43.65643639504094,40.253563951166186],[43.75265791196841,40.74020091405876],[43.582745802592726,41.09214325618257]]]}},{"type":"Feature","properties":{"abbrev":"Aze.","name":"Azerbaijan","name_long":"Azerbaijan","iso_a2":"AZ","iso_a3":"AZE","iso_n3":"031"},"geometry":{"type":"MultiPolygon","coordinates":[[[[45.0019873390568,39.7400035670496],[45.29814497252144,39.471751207022436],[45.739978468617004,39.473999131827156],[45.73537926614309,39.3197191432198],[46.14362308124881,38.74120148371222],[45.457721795438744,38.874139105783115],[44.95268802265028,39.33576467544643],[44.793989699082005,39.713002631177034],[45.0019873390568,39.7400035670496]]],[[[47.373315464066216,41.219732367511256],[47.81566572448472,41.151416124021345],[47.98728315612604,41.40581920019423],[48.58435265482629,41.808869533854676],[49.11026370626067,41.282286688800525],[49.6189148293096,40.57292430272997],[50.0848295428531,40.52615713150578],[50.39282107931271,40.256561184239104],[49.5692021014448,40.17610097916071],[49.39525923035043,39.39948171646225],[49.223228387250714,39.04921885838792],[48.85653242370759,38.81548635513178],[48.88324913920255,38.32024526626264],[48.634375441284845,38.27037750910094],[48.010744256386516,38.794014797514535],[48.355529412637935,39.28876496027689],[48.06009524922527,39.582235419262446],[47.685079380083124,39.50836395930119],[46.50571984231797,38.770605373686266],[46.48349897643246,39.464154771475535],[46.034534132680704,39.62802073827305],[45.61001224140293,39.89999380142518],[45.89190717955515,40.218475653639985],[45.35917483905817,40.56150381119349],[45.560351189970476,40.81228953710595],[45.1794958839794,40.98535390885143],[44.972480096218156,41.24812856705562],[45.21742638528164,41.41145193131405],[45.962600538930445,41.1238725856098],[46.501637404166985,41.06444468847411],[46.637908156120574,41.181672675128226],[46.14543175637899,41.72280243587264],[46.404950799348825,41.86067515722735],[46.68607059101666,41.827137152669906],[47.373315464066216,41.219732367511256]]]]}},{"type":"Feature","properties":{"abbrev":"Brunei","name":"Brunei","name_long":"Brunei Darussalam","iso_a2":"BN","iso_a3":"BRN","iso_n3":"096"},"geometry":{"type":"Polygon","coordinates":[[[114.20401655482837,4.525873928236805],[114.59996137904872,4.900011298029966],[115.45071048386981,5.447729803891534],[115.4057003113436,4.955227565933839],[115.34746097215067,4.316636053887009],[114.8695573263154,4.348313706881925],[114.65959598191353,4.007636826997754],[114.20401655482837,4.525873928236805]]]}},{"type":"Feature","properties":{"abbrev":"Bang.","name":"Bangladesh","name_long":"Bangladesh","iso_a2":"BD","iso_a3":"BGD","iso_n3":"050"},"geometry":{"type":"Polygon","coordinates":[[[92.67272098182556,22.041238918541254],[92.65225711463799,21.324047552978485],[92.30323449093868,21.47548533780982],[92.36855350135562,20.670883287025347],[92.08288618364612,21.19219513598577],[92.02521528520839,21.701569729086767],[91.83489098507744,22.18293569588556],[91.41708702999766,22.76501902922122],[90.49600630082728,22.80501658781513],[90.58695682166098,22.392793687422866],[90.27297081905554,21.83636770272011],[89.84746707556428,22.039146023033425],[89.70204959509493,21.857115790285306],[89.41886274613549,21.9661789006373],[89.03196129756623,22.055708319582976],[88.87631188350309,22.879146429937826],[88.52976972855377,23.631141872649163],[88.69994022009092,24.23371491138856],[88.08442223506242,24.501657212821925],[88.30637251175602,24.866079413344206],[88.93155398962308,25.238692328384776],[88.2097892598025,25.76806570078271],[88.56304935094977,26.44652558034272],[89.35509402868729,26.014407253518073],[89.83248091019962,25.96508209889548],[89.92069258012185,25.26974986419218],[90.8722107279121,25.132600612889547],[91.79959598182207,25.147431748957317],[92.37620161333481,24.976692816664965],[91.91509280799443,24.13041372323711],[91.46772993364367,24.072639471934792],[91.15896325069971,23.50352692310439],[91.70647505083211,22.985263983649183],[91.86992760617132,23.624346421802784],[92.14603478390681,23.627498684172593],[92.67272098182556,22.041238918541254]]]}},{"type":"Feature","properties":{"abbrev":"China","name":"China","name_long":"China","iso_a2":"CN","iso_a3":"CHN","iso_n3":"156"},"geometry":{"type":"MultiPolygon","coordinates":[[[[110.33918786015154,18.678395087147607],[109.4752095886637,18.197700913968614],[108.65520796105616,18.5076819930714],[108.62621748254045,19.367887885001977],[109.11905561730802,19.821038519769385],[110.21159874882285,20.101253973872076],[110.78655073450223,20.07753449145008],[111.01005130416465,19.695929877190736],[110.57064660038682,19.255879218009312],[110.33918786015154,18.678395087147607]]],[[[127.6574072612624,49.76027049417294],[129.39781782442046,49.44060008401544],[130.5822933289824,48.72968740497612],[130.98728152885386,47.790132351261406],[132.50667199109952,47.78896963153488],[133.37359581922803,48.18344167743493],[135.02631147678673,48.47822988544391],[134.50081383681064,47.57843984637785],[134.11236209527263,47.21246735288673],[133.7696439963129,46.11692698829907],[133.09712690646646,45.14406647397217],[131.8834542176596,45.32116160743644],[131.0252120301561,44.96795319272157],[131.28855512911557,44.111519680348266],[131.14468794161488,42.92998973242695],[130.6338664084098,42.90301463477056],[130.64001590385246,42.39500946712528],[129.99426720593326,42.98538686784379],[129.5966687358795,42.42498179785459],[128.05221520397234,41.99428457291799],[128.20843305879075,41.46677155208254],[127.34378299368305,41.50315176041596],[126.86908328664988,41.81656932226616],[126.18204511932946,41.10733612727637],[125.07994184784062,40.569823716792456],[124.26562462778534,39.92849335383414],[122.86757042856104,39.63778758397626],[122.13138797413094,39.17045176854464],[121.05455447803288,38.89747101496291],[121.5859949077225,39.36085358332414],[121.37675703337267,39.750261338859524],[122.16859500538104,40.422442531896046],[121.64035851449356,40.94638987890332],[120.76862877816197,40.5933881699176],[119.63960208544907,39.89805593521421],[119.02346398323304,39.2523330755111],[118.04274865119793,39.20427399347969],[117.53270226447708,38.7376358098841],[118.0596985209897,38.06147553156105],[118.87814985562838,37.8973253443859],[118.91163618375353,37.44846385349874],[119.70280236214207,37.15638865818508],[120.82345747282366,37.87042776137798],[121.71125857959797,37.48112335870718],[122.35793745329848,37.45448415786069],[122.51999474496584,36.930614325501836],[121.10416385303303,36.65132904718044],[120.6370089051146,36.111439520811125],[119.6645618022461,35.609790554337735],[119.1512081238586,34.909859117160465],[120.22752485563375,34.36033193616862],[120.6203690939166,33.37672272392513],[121.22901411345023,32.46031871187719],[121.90814578663006,31.69217438407469],[121.89191938689035,30.949351508095102],[121.26425744027331,30.67626740164872],[121.50351932178475,30.142914943964257],[122.09211388558911,29.832520453403163],[121.93842817595308,29.018022365834806],[121.68443851123847,28.225512600206685],[121.12566124886645,28.135673122667185],[120.39547326058234,27.053206895449392],[119.58549686083958,25.740780544532612],[118.65687137255453,24.547390855400238],[117.28160647997086,23.624501451099718],[115.89073530483515,22.782873236578098],[114.76382734584624,22.66807404224167],[114.15254682826568,22.223760077396207],[113.80677981980075,22.54833974862143],[113.24107791550162,22.05136749927047],[111.84359215703248,21.550493679281512],[110.78546552942414,21.397143866455334],[110.44403934127169,20.341032619706397],[109.88986128137357,20.282457383703445],[109.62765506392466,21.008227037026728],[109.86448815311834,21.395050970947523],[108.52281294152444,21.71521230721183],[108.050180291783,21.552379869060104],[107.04342003787266,21.811898912029903],[106.56727339073537,22.218204860924743],[106.7254032735485,22.79426788989838],[105.81124718630521,22.976892401617903],[105.32920942588666,23.352063300056983],[104.4768583516645,22.81915009204692],[103.50451460166053,22.70375661873922],[102.70699222210018,22.708795070887703],[102.17043582561355,22.464753119389343],[101.65201785686158,22.31819875740956],[101.80311974488292,21.174366766845054],[101.27002566936002,21.20165192309517],[101.18000532430759,21.43657298429406],[101.15003299357826,21.84998444262902],[100.41653771362738,21.558839423096657],[99.98348921102158,21.74293671313646],[99.24089887898722,22.118314317304566],[99.53199222208744,22.949038804612595],[98.89874922078283,23.142722072842588],[98.6602624857558,24.063286037690006],[97.60471967976203,23.897404690033056],[97.72460900267916,25.083637193293043],[98.67183800658924,25.918702500913497],[98.71209394734458,26.74353587494025],[98.68269005737054,27.50881216075066],[98.24623091023338,27.74722138112918],[97.91198774616944,28.335945136014374],[97.32711388549004,28.26158274994634],[96.24883344928784,28.411030992134467],[96.58659061074755,28.83097951915437],[96.11767866413103,29.452802028922516],[95.40480228066465,29.031716620392164],[94.56599043170294,29.277438055939964],[93.41334760943268,28.640629380807237],[92.50311893104364,27.89687632904645],[91.6966565286967,27.771741848251622],[91.25885379431989,28.04061432546635],[90.73051395056783,28.064953925075738],[90.01582889197121,28.296438503527185],[89.47581017452116,28.042758897406372],[88.8142484883206,27.299315904239393],[88.73032596227856,28.08686473236756],[88.12044070836994,27.876541652939576],[86.95451704300065,27.97426178640353],[85.82331994013154,28.20357595469875],[85.01163821812307,28.642773952747376],[84.23457970575018,28.839893703724698],[83.89899295444675,29.32022614187764],[83.33711510613719,29.463731594352193],[82.32751264845089,30.115268052688208],[81.5258044778748,30.422716986608663],[81.11125613802928,30.18348094331341],[79.72136681510712,30.882714748654735],[78.73889448437401,31.51590607352705],[78.45844648632604,32.61816437431273],[79.17612877799556,32.483779812137755],[79.20889163606856,32.99439463961374],[78.81108646028574,33.506198025032404],[78.91226891471322,34.32193634697577],[77.83745079947462,35.49400950778781],[76.19284834178572,35.89840342868786],[75.89689741405019,36.66680613865188],[75.158027785141,37.13303091078916],[74.98000247589542,37.419990139305895],[74.82998579295216,37.99000702570146],[74.8648157083168,38.3788463404816],[74.2575142760227,38.60650686294349],[73.9288521666464,38.50581533462272],[73.67537926625485,39.43123688410557],[73.96001305531846,39.660008449861714],[73.82224368682833,39.89397349706314],[74.77686242055606,40.36642527929163],[75.46782799673073,40.56207225194868],[76.52636803579745,40.42794607193513],[76.90448449087712,41.06648590754966],[78.18719689322606,41.185315863604814],[78.54366092317528,41.58224254003871],[80.11943037305142,42.123940741538235],[80.25999026888533,42.34999929459909],[80.18015018099439,42.92006785742686],[80.86620649610123,43.180362046881015],[79.96610639844144,44.91751699480462],[81.9470707539181,45.31702749285316],[82.45892581576905,45.539649563166506],[83.18048383986054,47.33003123635075],[85.16429039911324,47.00095571551611],[85.7204838398707,47.45296946877309],[85.76823286330838,48.4557506373969],[86.59877648310336,48.54918162698061],[87.35997033076269,49.21498078062916],[87.75126427607668,49.29719798440547],[88.0138322285517,48.5994627956006],[88.85429772334678,48.069081732773014],[90.28082563676392,47.693549099307916],[90.97080936072499,46.888146063822944],[90.58576826371834,45.7197160914875],[90.94553958533433,45.28607330991025],[92.13389082231825,45.115075995456436],[93.48073367714133,44.975472113620015],[94.68892866412537,44.35233185482846],[95.30687544147153,44.24133087826547],[95.7624548685567,43.31944916439462],[96.34939578652782,42.72563528092866],[97.451757440178,42.74888967546008],[99.51581749878002,42.524691473961695],[100.8458655131083,42.663804429691425],[101.83304039917995,42.51487295182628],[103.31227827353482,41.90746816666763],[104.52228193564903,41.90834666601663],[104.96499393109346,41.59740957291635],[106.12931562706169,42.1343277044289],[107.744772576938,42.481515814781915],[109.24359581913146,42.51944631608416],[110.4121033061153,42.87123362891103],[111.12968224492023,43.40683401140018],[111.8295878438814,43.74311839453949],[111.66773725794323,44.07317576758771],[111.34837690637946,44.45744171811006],[111.87330610560028,45.10207937273512],[112.43606245325887,45.01164561622426],[113.46390669154422,44.80889313412711],[114.46033165899607,45.33981679949389],[115.98509647020013,45.72723501238602],[116.71786828009888,46.388202419615254],[117.42170128791425,46.67273285581421],[118.87432579963873,46.80541209572365],[119.66326989143877,46.69267995867895],[119.77282392789756,47.04805878355015],[118.86657433479498,47.74706004494621],[118.06414269416675,48.06673045510374],[117.29550744025747,47.6977090521074],[116.30895267137325,47.853410142602826],[115.74283735561575,47.72654450132629],[115.48528201707305,48.135382595403456],[116.19180219936761,49.13459809019906],[116.67880089728621,49.888531399121405],[117.87924441942639,49.51098338479696],[119.28846072802585,50.14288279886205],[119.27936567594239,50.582907619827296],[120.18204959521695,51.64356639261803],[120.738191359542,51.964115302124554],[120.725789015792,52.516226304730814],[120.1770886577169,52.75388621684121],[121.00308475147024,53.25140106873124],[122.24574791879289,53.43172597921369],[123.57150678924087,53.45880442973464],[125.06821129771045,53.161044826868846],[125.94634891164618,52.79279857035695],[126.56439904185699,51.7842554795327],[126.93915652883769,51.3538941514059],[127.28745568248493,50.73979726826545],[127.6574072612624,49.76027049417294]]]]}},{"type":"Feature","properties":{"abbrev":"Bhutan","name":"Bhutan","name_long":"Bhutan","iso_a2":"BT","iso_a3":"BTN","iso_n3":"064"},"geometry":{"type":"Polygon","coordinates":[[[91.69665652869668,27.77174184825166],[92.10371178585973,27.452614040633208],[92.03348351437509,26.83831045176356],[91.21751264848643,26.808648179628022],[90.37327477413407,26.87572418874288],[89.74452762243884,26.719402981059957],[88.83564253128938,27.098966376243762],[88.81424848832054,27.29931590423936],[89.47581017452111,28.042758897406397],[90.01582889197118,28.296438503527217],[90.7305139505678,28.064953925075756],[91.25885379431992,28.040614325466294],[91.69665652869668,27.77174184825166]]]}},{"type":"Feature","properties":{"abbrev":"N. Cy.","name":"N. Cyprus","name_long":"Northern Cyprus","iso_a2":null,"iso_a3":null,"iso_n3":null},"geometry":{"type":"Polygon","coordinates":[[[32.73178022637745,35.14002594658844],[32.80247358575275,35.14550364841138],[32.946960890440806,35.3867033961337],[33.667227003724946,35.37321584730551],[34.57647382990046,35.67159556735879],[33.900804477684204,35.245755927057616],[33.97361657078346,35.058506374648],[33.86643965021011,35.09359467217419],[33.675391880027064,35.01786286065045],[33.5256852556775,35.03868846286407],[33.475817498515845,35.000344550103506],[33.45592207208347,35.10142365166641],[33.3838334490363,35.16271190036457],[33.19097700372305,35.17312470147138],[32.919572381326134,35.08783274997364],[32.73178022637745,35.14002594658844]]]}},{"type":"Feature","properties":{"abbrev":"Cyp.","name":"Cyprus","name_long":"Cyprus","iso_a2":"CY","iso_a3":"CYP","iso_n3":"196"},"geometry":{"type":"Polygon","coordinates":[[[33.97361657078346,35.058506374648],[34.00488081232004,34.97809784600186],[32.97982710137845,34.57186941175544],[32.49029625827753,34.701654771456475],[32.25666710788596,35.10323232679663],[32.73178022637745,35.14002594658844],[32.919572381326134,35.08783274997364],[33.19097700372305,35.17312470147138],[33.3838334490363,35.16271190036457],[33.45592207208347,35.10142365166641],[33.475817498515845,35.000344550103506],[33.5256852556775,35.03868846286407],[33.675391880027064,35.01786286065045],[33.86643965021011,35.09359467217419],[33.97361657078346,35.058506374648]]]}},{"type":"Feature","properties":{"abbrev":"Geo.","name":"Georgia","name_long":"Georgia","iso_a2":"GE","iso_a3":"GEO","iso_n3":"268"},"geometry":{"type":"Polygon","coordinates":[[[41.55408410011065,41.53565623632757],[41.70317060727271,41.96294281673292],[41.45347008643839,42.64512339941794],[40.87546919125379,43.013628038091284],[40.32139448422032,43.128633938156845],[39.955008579270924,43.43499766699922],[40.07696495947977,43.55310415300231],[40.922184686045625,43.38215851498079],[42.39439456560882,43.22030792904263],[43.75601688006739,42.74082815202249],[43.931199985536836,42.55497386328477],[44.537622918481986,42.71199270280363],[45.47027916848572,42.50278066666998],[45.77641035338277,42.09244395605636],[46.404950799348825,41.860675157227305],[46.14543175637902,41.72280243587258],[46.63790815612058,41.181672675128226],[46.50163740416693,41.06444468847411],[45.96260053893039,41.123872585609774],[45.217426385281584,41.41145193131405],[44.97248009621808,41.248128567055595],[43.582745802592726,41.09214325618257],[42.61954878110449,41.58317271581994],[41.55408410011065,41.53565623632757]]]}},{"type":"Feature","properties":{"abbrev":"Indo.","name":"Indonesia","name_long":"Indonesia","iso_a2":"ID","iso_a3":"IDN","iso_n3":"360"},"geometry":{"type":"MultiPolygon","coordinates":[[[[120.71560875863044,-10.239581394087864],[120.2950142762069,-10.258649997603525],[118.96780846565471,-9.557969252158031],[119.90030968636161,-9.361340427287516],[120.42575564990543,-9.665921319215798],[120.77550174365675,-9.969675388227456],[120.71560875863044,-10.239581394087864]]],[[[124.43595014861941,-10.140000909061442],[123.57998172413673,-10.359987481327963],[123.45998904835503,-10.239994805546175],[123.55000939340746,-9.90001555749798],[123.98000898650811,-9.290026950724695],[124.96868248911622,-8.892790215697048],[125.07001997284064,-9.089987481322837],[125.08852013560109,-9.393173109579322],[124.43595014861941,-10.140000909061442]]],[[[117.90001834520777,-8.095681247594925],[118.2606164897405,-8.362383314653329],[118.87845991422215,-8.28068287519983],[119.12650678922309,-8.705824883665073],[117.9704016459893,-8.906639499551261],[117.27773074754903,-9.040894870645559],[116.74014082241663,-9.03293670007264],[117.08373742072533,-8.457157891476541],[117.63202436734215,-8.449303073768192],[117.90001834520777,-8.095681247594925]]],[[[122.90353722543611,-8.094234307490737],[122.75698286345632,-8.64980763106064],[121.25449059457013,-8.933666273639943],[119.9243909038096,-8.810417982623875],[119.92092858284613,-8.444858900591072],[120.71509199430757,-8.236964613480865],[121.34166873584658,-8.536739597206022],[122.00736453663043,-8.460620212440162],[122.90353722543611,-8.094234307490737]]],[[[108.62347863162894,-6.777673841990676],[110.53922732955331,-6.877357679881683],[110.75957563684594,-6.465186455921752],[112.61481123255638,-6.946035658397591],[112.97876834518812,-7.59421314863458],[114.47893517462117,-7.776527601760279],[115.70552697150109,-8.370806573116866],[114.56451134649652,-8.751816908404834],[113.4647335144609,-8.348947442257426],[112.55967247930103,-8.376180922075164],[111.52206139531248,-8.302128594600957],[110.58614953007432,-8.122604668819022],[109.4276672709552,-7.740664157749761],[108.69365522668133,-7.641600437046221],[108.27776329959632,-7.766657403192581],[106.45410200401615,-7.354899590690947],[106.28062422081231,-6.924899997590202],[105.36548628135554,-6.85141611087117],[106.05164594932707,-5.8959188777945],[107.2650085795402,-5.954985039904059],[108.0720910990747,-6.345762220895239],[108.48684614464926,-6.421984958525768],[108.62347863162894,-6.777673841990676]]],[[[134.72462446506668,-6.214400730009287],[134.21013390516893,-6.895237725454706],[134.112775506731,-6.142467136259014],[134.2903357280858,-5.783057549669039],[134.49962527886788,-5.445042006047899],[134.72700158095213,-5.73758228925216],[134.72462446506668,-6.214400730009287]]],[[[127.24921512258892,-3.45906503663889],[126.87492272349888,-3.79098276124958],[126.18380211802733,-3.607376397316556],[125.98903364471929,-3.177273451351325],[127.00065148326499,-3.12931772218441],[127.24921512258892,-3.45906503663889]]],[[[130.4713440288518,-3.09376433676762],[130.8348360535928,-3.858472181822762],[129.99054650280814,-3.446300957862817],[129.15524865124243,-3.362636813982249],[128.59068362845366,-3.428679294451257],[127.89889122936236,-3.393435967628193],[128.1358793478528,-2.843650404474914],[129.37099775606092,-2.802154229344552],[130.4713440288518,-3.09376433676762]]],[[[134.1433679546478,-1.151867364103595],[134.42262739475305,-2.769184665542383],[135.4576029806947,-3.367752780779114],[136.2933142437188,-2.30704233155609],[137.44073774632753,-1.703513278819372],[138.3297274110448,-1.70268645590265],[139.18492068904297,-2.051295668143638],[139.92668419816042,-2.409051608900284],[141.00021040259188,-2.600151055515624],[141.01705691951904,-5.859021905138022],[141.0338517600139,-9.117892754760419],[140.14341515519257,-8.297167657100957],[139.12776655492812,-8.096042982620942],[138.88147667862498,-8.380935153846096],[137.61447391169284,-8.411682631059762],[138.0390991558352,-7.597882175327356],[138.6686214540148,-7.320224704623072],[138.40791385310237,-6.232849216337484],[137.92783979711086,-5.393365573756],[135.98925011611348,-4.546543877789048],[135.16459760959972,-4.462931410340772],[133.6628804871979,-3.538853448097527],[133.3677047059468,-4.024818617370315],[132.98395551974735,-4.112978610860281],[132.756940952689,-3.74628264731713],[132.75378869031923,-3.311787204607072],[131.9898043153162,-2.820551039240456],[133.0668445171435,-2.460417982598443],[133.78003095920351,-2.47984832114021],[133.69621178602614,-2.214541517753688],[132.23237348849423,-2.212526136894326],[131.8362219585447,-1.617161960459597],[130.94283979708283,-1.432522067880797],[130.51955814018007,-0.937720228686075],[131.86753787651364,-0.695461114101818],[132.3801164084168,-0.369537855636977],[133.98554813042844,-0.780210463060442],[134.1433679546478,-1.151867364103595]]],[[[125.24050052297159,1.419836127117605],[124.43703535369737,0.427881171058971],[123.68550499887672,0.235593166500877],[122.72308312387288,0.431136786293337],[121.0567248881891,0.381217352699451],[120.18308312386276,0.23724681233422],[120.04086958219548,-0.519657891444851],[120.93590538949073,-1.408905938323372],[121.4758207540762,-0.955962009285116],[123.34056481332848,-0.615672702643081],[123.2583992859845,-1.076213067228338],[122.82271528533161,-0.930950616055881],[122.38852990121539,-1.516858005381124],[121.50827355355548,-1.904482924002423],[122.4545723816843,-3.186058444840882],[122.27189619353257,-3.529500013852697],[123.17096276254657,-4.683693129091708],[123.16233279835379,-5.340603936385961],[122.62851525277871,-5.634591159694494],[122.23639448454806,-5.282933037948283],[122.71956912647707,-4.46417164471579],[121.73823367725439,-4.8513314754465],[121.48946333220127,-4.574552504091216],[121.61917117725388,-4.188477878438674],[120.89818159391771,-3.602105401222829],[120.97238895068877,-2.62764291749491],[120.30545291552991,-2.931603692235726],[120.39004723519176,-4.097579034037224],[120.43071658740539,-5.528241062037779],[119.79654341031952,-5.673400160345651],[119.36690555224496,-5.379878024927805],[119.65360639860013,-4.459417412944958],[119.49883548388597,-3.49441171632651],[119.078344354327,-3.487021986508765],[118.7677689962529,-2.801999200047689],[119.18097374885869,-2.147103773612798],[119.32339399625508,-1.353147067880471],[119.82599897672586,0.154254462073496],[120.03570193896637,0.566477362465804],[120.8857792501677,1.309222723796836],[121.666816847827,1.013943589681077],[122.92756676645185,0.875192368977466],[124.07752241424285,0.917101955566139],[125.06598921112183,1.643259182131558],[125.24050052297159,1.419836127117605]]],[[[128.68824873262074,1.132385972494106],[128.63595218314137,0.258485826006179],[128.12016971243617,0.356412665199286],[127.96803429576887,-0.252077325037533],[128.37999881399972,-0.780003757331286],[128.10001590384232,-0.899996433112975],[127.69647464407504,-0.266598402511505],[127.39949018769377,1.011721503092573],[127.60051150930907,1.810690822757181],[127.93237755748751,2.174596258956555],[128.00415612194084,1.628531398928331],[128.59455936087548,1.540810655112864],[128.68824873262074,1.132385972494106]]],[[[117.87562706916603,1.827640692548911],[118.99674726773819,0.902219143066048],[117.81185835171779,0.784241848143722],[117.47833865770608,0.102474676917026],[117.52164350796662,-0.803723239753211],[116.56004845587952,-1.487660821136231],[116.53379682827519,-2.483517347832901],[116.14808393764864,-4.012726332214015],[116.0008577820491,-3.657037448749008],[114.86480309454454,-4.106984144714417],[114.46865156459509,-3.495703627133821],[113.75567182826413,-3.43916961020652],[113.25699425664757,-3.118775729996855],[112.06812625534067,-3.478392022316072],[111.70329064336002,-2.994442233902632],[111.04824018762824,-3.049425957861189],[110.223846063276,-2.934032484553484],[110.07093550012436,-1.592874037282414],[109.57194786991406,-1.314906507984489],[109.09187381392253,-0.459506524257051],[108.95265750532816,0.415375474444346],[109.06913618371404,1.341933905437642],[109.66326012577375,2.006466986494985],[109.83022667850886,1.338135687664192],[110.51406090702713,0.773131415200993],[111.15913781132659,0.976478176269509],[111.79754845586044,0.904441229654651],[112.38025190638368,1.410120957846758],[112.8598091980522,1.497790025229946],[113.80584964401956,1.217548732911041],[114.6213554220175,1.430688177898887],[115.13403730678523,2.821481838386219],[115.51907840379201,3.169238389494396],[115.86551720587677,4.306559149590157],[117.01521447150637,4.306094061699469],[117.88203494677019,4.137551377779488],[117.31323245653354,3.234428208830579],[118.04832970588538,2.287690131027361],[117.87562706916603,1.827640692548911]]],[[[105.81765506390936,-5.852355645372413],[104.71038414919151,-5.873284600450646],[103.86821333213074,-5.037314955264975],[102.58426069540693,-4.220258884298204],[102.15617313030103,-3.614146009946765],[101.39911339722508,-2.799777113459172],[100.90250288290017,-2.05026213949786],[100.14198082886062,-0.650347588710957],[99.26373986206025,0.183141587724663],[98.97001102091333,1.042882391764536],[98.60135135294311,1.823506577965617],[97.6995976094499,2.453183905442117],[97.1769421732499,3.30879059489861],[96.42401655475734,3.868859768077911],[95.38087609251347,4.970782172053673],[95.29302615761733,5.479820868344817],[95.93686282754176,5.439513251157109],[97.4848820332771,5.246320909034011],[98.36916914265569,4.268370266126368],[99.14255862833582,3.590349636240916],[99.69399783732243,3.174328518075157],[100.64143354696168,2.099381211755798],[101.65801232300734,2.083697414555189],[102.49827111207324,1.398700466310217],[103.07684044801303,0.561361395668854],[103.83839603069835,0.104541734208667],[103.43764529827497,-0.711945896002845],[104.01078860882402,-1.059211521004229],[104.3699914896849,-1.084843031421016],[104.53949018760218,-1.782371514496716],[104.88789269411402,-2.340425306816655],[105.622111444117,-2.42884368246807],[106.10859337771271,-3.06177662517895],[105.85744591677414,-4.305524997579724],[105.81765506390936,-5.852355645372413]]]]}},{"type":"Feature","properties":{"abbrev":"India","name":"India","name_long":"India","iso_a2":"IN","iso_a3":"IND","iso_n3":"356"},"geometry":{"type":"Polygon","coordinates":[[[77.83745079947457,35.494009507787766],[78.91226891471322,34.32193634697579],[78.81108646028574,33.50619802503242],[79.20889163606857,32.994394639613716],[79.17612877799553,32.48377981213771],[78.45844648632601,32.61816437431273],[78.73889448437401,31.515906073527063],[79.7213668151071,30.882714748654728],[81.11125613802932,30.183480943313402],[80.4767212259174,29.72986522065534],[80.08842451367627,28.79447011974014],[81.05720258985203,28.416095282499043],[81.99998742058497,27.925479234319994],[83.30424889519955,27.36450572357556],[84.6750179381738,27.234901231387536],[85.25177859898338,26.72619843190634],[86.02439293817918,26.63098460540857],[87.22747195836628,26.397898057556077],[88.06023766474982,26.41461538340249],[88.17480431514092,26.81040517832595],[88.04313276566123,27.445818589786825],[88.12044070836987,27.876541652939594],[88.73032596227856,28.086864732367516],[88.81424848832054,27.29931590423936],[88.83564253128938,27.098966376243762],[89.74452762243884,26.719402981059957],[90.37327477413407,26.87572418874288],[91.21751264848643,26.808648179628022],[92.03348351437509,26.83831045176356],[92.10371178585973,27.452614040633208],[91.69665652869668,27.77174184825166],[92.50311893104364,27.89687632904645],[93.41334760943268,28.640629380807226],[94.56599043170294,29.277438055939985],[95.40480228066464,29.03171662039213],[96.11767866413103,29.452802028922466],[96.58659061074749,28.830979519154344],[96.24883344928779,28.41103099213444],[97.32711388549004,28.26158274994634],[97.40256147663612,27.88253611908544],[97.0519885599681,27.69905894623315],[97.1339990580153,27.083773505149964],[96.41936567585097,27.264589341739224],[95.12476769407496,26.5735720891323],[95.1551534362626,26.001307277932085],[94.60324913938538,25.162495428970402],[94.55265791217164,24.675238348890332],[94.10674197792505,23.85074087167348],[93.3251876159428,24.078556423432204],[93.28632693885928,23.043658352139005],[93.06029422401463,22.70311066333557],[93.16612755734836,22.278459580977103],[92.67272098182556,22.041238918541254],[92.14603478390681,23.627498684172593],[91.86992760617132,23.624346421802784],[91.70647505083211,22.985263983649183],[91.15896325069971,23.50352692310439],[91.46772993364367,24.072639471934792],[91.91509280799443,24.13041372323711],[92.37620161333481,24.976692816664965],[91.79959598182207,25.147431748957317],[90.8722107279121,25.132600612889547],[89.92069258012185,25.26974986419218],[89.83248091019962,25.96508209889548],[89.35509402868729,26.014407253518073],[88.56304935094977,26.44652558034272],[88.2097892598025,25.76806570078271],[88.93155398962308,25.238692328384776],[88.30637251175602,24.866079413344206],[88.08442223506242,24.501657212821925],[88.69994022009092,24.23371491138856],[88.52976972855377,23.631141872649163],[88.87631188350309,22.879146429937826],[89.03196129756623,22.055708319582976],[88.88876590368542,21.690588487224748],[88.20849734899521,21.703171698487807],[86.97570438024027,21.49556163175521],[87.03316857294887,20.743307806882413],[86.49935102737378,20.151638495356607],[85.0602657409097,19.4785788029711],[83.94100589390001,18.302009792549725],[83.18921715691785,17.67122142177898],[82.19279218946592,17.016636053937813],[82.19124189649719,16.556664130107848],[81.69271935417748,16.310219224507904],[80.79199913933014,15.951972357644491],[80.32489586784388,15.899184882058348],[80.02506920768644,15.136414903214147],[80.2332735533904,13.835770778859981],[80.28629357292186,13.006260687710833],[79.8625468281285,12.056215318240888],[79.85799930208682,10.35727509199711],[79.340511509116,10.30885427493962],[78.88534549348918,9.546135972527722],[79.18971967968828,9.216543687370148],[78.2779407083305,8.933046779816934],[77.94116539908435,8.252959092639742],[77.53989790233794,7.965534776232333],[76.59297895702167,8.89927623131419],[76.13006147655108,10.299630031775521],[75.74646731964849,11.308250637248307],[75.39610110870957,11.781245022015824],[74.86481570831681,12.741935736537897],[74.61671715688354,13.99258291264968],[74.44385949086723,14.617221787977696],[73.5341992532334,15.99065216721496],[73.11990929554943,17.928570054592498],[72.82090945830865,19.208233547436166],[72.8244751321368,20.419503282141534],[72.6305334817454,21.356009426351008],[71.17527347197395,20.757441311114235],[70.4704586119451,20.877330634031384],[69.16413008003883,22.0892980005727],[69.64492760608239,22.450774644454338],[69.34959679553435,22.84317963306269],[68.1766451353734,23.69196503345671],[68.84259931831878,24.35913361256094],[71.04324018746823,24.3565239527302],[70.84469933460284,25.21510203704352],[70.28287316272558,25.72222870533983],[70.16892662952202,26.491871649678842],[69.51439293811312,26.940965684511372],[70.61649620960193,27.989196275335868],[71.77766564320032,27.913180243434525],[72.8237516620847,28.961591701772054],[73.45063846221743,29.97641347911987],[74.42138024282026,30.979814764931177],[74.40592898956501,31.69263947196528],[75.25864179881322,32.2711054550405],[74.45155927927871,32.7648996038055],[74.10429365427734,33.44147329358685],[73.74994835805195,34.31769887952785],[74.24020267120497,34.74888703057125],[75.75706098826834,34.50492259372132],[76.87172163280403,34.65354401299274],[77.83745079947457,35.494009507787766]]]}},{"type":"Feature","properties":{"abbrev":"Iran","name":"Iran","name_long":"Iran","iso_a2":"IR","iso_a3":"IRN","iso_n3":"364"},"geometry":{"type":"Polygon","coordinates":[[[53.92159793479556,37.19891836196126],[54.800303989486565,37.392420762678185],[55.51157840355191,37.96411713312317],[56.18037479027333,37.93512665460742],[56.61936608259282,38.121394354803485],[57.33043379092898,38.02922943781094],[58.4361544126782,37.522309475243794],[59.23476199731681,37.412987982730336],[60.37763797388387,36.52738312432837],[61.123070509694145,36.49159719496624],[61.21081709172574,35.650072333309225],[60.80319339380745,34.40410187431986],[60.52842980331158,33.676446031218006],[60.963700392506006,33.52883230237625],[60.536077915290775,32.98126882581157],[60.863654819588966,32.18291962333443],[60.94194461451113,31.548074652628753],[61.699314406180825,31.37950613049267],[61.781221551363444,30.735850328081234],[60.874248488208785,29.829238999952604],[61.36930870956494,29.303276272085924],[61.77186811711863,28.699333807890795],[62.72783043808598,28.25964488373539],[62.755425652929866,27.378923448184985],[63.233897739520295,27.21704702403071],[63.31663170761959,26.756532497661667],[61.87418745305655,26.239974880472104],[61.49736290878419,25.0782370061185],[59.61613406763084,25.380156561783778],[58.5257613462723,25.60996165618573],[57.397251417882394,25.73990204518364],[56.970765822177555,26.96610626882136],[56.492138706290206,27.143304755150197],[55.72371015811006,26.96463349050104],[54.71508955263727,26.480657863871514],[53.49309695823135,26.81236888275305],[52.48359785340961,27.580849107365495],[51.52076256694741,27.865689602158298],[50.85294803243954,28.814520575469384],[50.115008579311585,30.147772528599717],[49.576850213423995,29.985715236932407],[48.94133344909855,30.317090359004037],[48.567971225789755,29.926778265903522],[48.0145683123761,30.452456773392598],[48.004698113808324,30.985137437457244],[47.68528608581227,30.98485321707963],[47.8492037290421,31.70917593029867],[47.3346614927119,32.469155381799105],[46.10936160663932,33.017287299119005],[45.41669070819904,33.967797756479584],[45.64845950702809,34.748137722303014],[46.15178795755093,35.09325877536429],[46.0763403664048,35.67738332777549],[45.4206181170532,35.97754588474282],[44.77267,37.17045],[44.22575564960053,37.97158437758935],[44.421402622257546,38.28128123631454],[44.10922529478234,39.4281362981681],[44.79398969908195,39.71300263117705],[44.95268802265031,39.33576467544637],[45.45772179543877,38.87413910578306],[46.14362308124881,38.74120148371222],[46.50571984231797,38.770605373686294],[47.685079380083096,39.508363959301214],[48.06009524922524,39.58223541926246],[48.35552941263788,39.28876496027691],[48.01074425638648,38.79401479751452],[48.63437544128481,38.27037750910097],[48.88324913920249,38.32024526626262],[49.19961225769334,37.58287425388988],[50.14777143738462,37.37456655532134],[50.84235436381971,36.8728142359834],[52.264024692601424,36.7004216578577],[53.82578982932642,36.965030829408235],[53.92159793479556,37.19891836196126]]]}},{"type":"Feature","properties":{"abbrev":"Jord.","name":"Jordan","name_long":"Jordan","iso_a2":"JO","iso_a3":"JOR","iso_n3":"400"},"geometry":{"type":"Polygon","coordinates":[[[35.54566531753454,32.393992011030576],[35.71991824722275,32.709192409794866],[36.834062127435544,32.312937526980775],[38.792340529136084,33.378686428352225],[39.19546837744497,32.16100881604267],[39.00488569515255,32.01021698661498],[37.00216556168101,31.508412990844743],[37.998848911294374,30.50849986421313],[37.66811974462638,30.3386652694859],[37.503581984209035,30.003776150018403],[36.74052778498725,29.86528331147619],[36.50121422704358,29.5052536076987],[36.06894087092206,29.197494615184457],[34.95603722508426,29.35655467377884],[34.92260257339142,29.501326198844524],[35.420918409981965,31.100065822874356],[35.397560662586045,31.48908600516758],[35.5452519060762,31.78250478772084],[35.54566531753454,32.393992011030576]]]}},{"type":"Feature","properties":{"abbrev":"Isr.","name":"Israel","name_long":"Israel","iso_a2":"IL","iso_a3":"ISR","iso_n3":"376"},"geometry":{"type":"Polygon","coordinates":[[[35.71991824722275,32.709192409794866],[35.54566531753454,32.393992011030576],[35.183930291491436,32.53251068778894],[34.97464074070933,31.86658234305972],[35.22589155451242,31.754341132121766],[34.970506626125996,31.616778469360806],[34.92740848159457,31.353435370401414],[35.397560662586045,31.48908600516758],[35.420918409981965,31.100065822874356],[34.92260257339142,29.501326198844524],[34.26543338393568,31.219360866820153],[34.55637169773891,31.548823960896996],[34.48810713068136,31.60553884533732],[34.752587111151165,32.07292633720117],[34.95541710789677,32.82737641044638],[35.098457472480675,33.080539252244265],[35.126052687324545,33.09090037691878],[35.460709262846706,33.08904002535628],[35.55279666519081,33.26427480725802],[35.82110070165024,33.2774264592763],[35.836396925608625,32.86812327730851],[35.700797967274745,32.71601369885738],[35.71991824722275,32.709192409794866]]]}},{"type":"Feature","properties":{"abbrev":"Japan","name":"Japan","name_long":"Japan","iso_a2":"JP","iso_a3":"JPN","iso_n3":"392"},"geometry":{"type":"MultiPolygon","coordinates":[[[[134.63842817600388,34.14923371025642],[134.7663790223585,33.80633474378368],[134.20341596897086,33.20117788342964],[133.7929500672765,33.5219851750976],[133.28026818250888,33.28957042086495],[133.01485802625788,32.70456736910478],[132.3631148621927,32.98938202568137],[132.37117638563018,33.46364248304007],[132.9243725933148,34.06029857028204],[133.49296837782222,33.9446208765967],[133.90410607313638,34.36493113864262],[134.63842817600388,34.14923371025642]]],[[[140.9763875673053,37.14207428644016],[140.59976972876214,36.343983466124534],[140.77407433488264,35.84287710219024],[140.25327925024513,35.13811391859365],[138.97552778539622,34.66760000257611],[137.21759891169123,34.60628591566186],[135.7929830262689,33.46480520276663],[135.12098270074543,33.84907115328906],[135.07943484918272,34.59654490817482],[133.340316196832,34.37593821872076],[132.15677086805132,33.90493337659652],[130.98614464734348,33.88576142021628],[132.00003624891005,33.149992377244615],[131.33279015515737,31.450354519164843],[130.68631798718596,31.029579169228242],[130.20241987520498,31.418237616495418],[130.44767622286216,32.319474595665724],[129.8146916037189,32.61030955660439],[129.40846316947258,33.29605581311759],[130.35393517468466,33.6041507024417],[130.87845096244715,34.232742824840045],[131.88422936414392,34.74971385348791],[132.61767296766251,35.43339305270942],[134.6083008159778,35.73161774346582],[135.67753787652893,35.527134100886826],[136.72383060114245,37.30498423924038],[137.3906116070045,36.827390651998826],[138.85760216690628,37.82748464614346],[139.4264046571429,38.21596222589764],[140.0547900738121,39.438807481436385],[139.88337934789988,40.563312486323696],[140.30578250545372,41.19500519465956],[141.3689734234267,41.37855988216029],[141.91426313697048,39.99161611587868],[141.884600864835,39.180864569651504],[140.9594893739458,38.17400096287658],[140.9763875673053,37.14207428644016]]],[[[143.9101619813795,44.17409983985373],[144.61342654843963,43.960882880217525],[145.3208252300831,44.38473297787544],[145.54313724180278,43.262088324550604],[144.0596618999999,42.98835826270056],[143.18384972551732,41.9952147486992],[141.61149092017249,42.67879059505608],[141.06728641170665,41.58459381770799],[139.95510623592108,41.569555975911044],[139.81754357315995,42.5637588567744],[140.31208703019323,43.33327261003265],[141.38054894426003,43.388824774746496],[141.67195234595394,44.77212535255148],[141.967644891528,45.55148346616135],[143.14287031470982,44.510358384776964],[143.9101619813795,44.17409983985373]]]]}},{"type":"Feature","properties":{"abbrev":"Iraq","name":"Iraq","name_long":"Iraq","iso_a2":"IQ","iso_a3":"IRQ","iso_n3":"368"},"geometry":{"type":"Polygon","coordinates":[[[45.4206181170532,35.97754588474282],[46.0763403664048,35.67738332777549],[46.15178795755093,35.09325877536429],[45.64845950702809,34.748137722303014],[45.41669070819904,33.967797756479584],[46.10936160663932,33.017287299119005],[47.3346614927119,32.469155381799105],[47.8492037290421,31.70917593029867],[47.68528608581227,30.98485321707963],[48.004698113808324,30.985137437457244],[48.0145683123761,30.452456773392598],[48.567971225789755,29.926778265903522],[47.974519077349896,29.9758192001485],[47.30262210469096,30.05906993257072],[46.568713413281756,29.09902517345229],[44.70949873228474,29.178891099559383],[41.889980910007836,31.190008653278365],[40.399994337736246,31.889991766887935],[39.19546837744497,32.16100881604267],[38.792340529136084,33.378686428352225],[41.006158888519934,34.41937226006212],[41.383965285005814,35.628316555314356],[41.289707472505455,36.35881460219227],[41.83706424334096,36.605853786763575],[42.34959109881177,37.2298725449041],[42.77912560402182,37.385263576805755],[43.9422587420473,37.25622752537295],[44.29345177590286,37.0015143906063],[44.772699008977696,37.170444647768434],[45.4206181170532,35.97754588474282]]]}},{"type":"Feature","properties":{"abbrev":"Kaz.","name":"Kazakhstan","name_long":"Kazakhstan","iso_a2":"KZ","iso_a3":"KAZ","iso_n3":"398"},"geometry":{"type":"Polygon","coordinates":[[[70.96231489449929,42.26615428320554],[70.3889648782208,42.081307684897524],[69.07002729683524,41.38424428971234],[68.63248294462005,40.66868073176687],[68.25989586779565,40.6623245305949],[67.98585574735182,41.135990708982206],[66.7140470722166,41.168443508461564],[66.51064863471572,41.987644151368556],[66.02339155463562,41.99464630794404],[66.0980123228652,42.99766002051308],[64.90082441595933,43.728080552742654],[63.185786981056594,43.650074978198006],[62.01330040878628,43.50447663021566],[61.0583199400325,44.40581696225058],[60.23997195825847,44.784036770194746],[58.6899890480958,45.50001373959873],[58.50312706892844,45.586804307632974],[55.92891727074118,44.99585846615918],[55.968191359283026,41.30864166926938],[55.45525109235381,41.25985911718584],[54.75534549339267,42.04397146256662],[54.07941775901497,42.32410940202084],[52.94429324729174,42.11603424739758],[52.50245975119628,41.78331553808647],[52.44633914572722,42.027150783855575],[52.692112257707265,42.44389537207337],[52.50142622255032,42.7922978785852],[51.342427199108215,43.132974758469345],[50.89129194520024,44.03103363705378],[50.339129266161365,44.284015611338475],[50.305642938036264,44.609835516938915],[51.278503452363225,44.51485423438646],[51.316899041556034,45.2459982366679],[52.16738976421573,45.40839142514511],[53.0408764992452,45.25904653582177],[53.220865512917726,46.234645901059935],[53.042736850807785,46.853006089864486],[52.04202273947561,46.80463694923924],[51.191945428274266,47.048704738953916],[50.03408328634248,46.60898997658222],[49.10116000000011,46.399330000000134],[48.593241001180495,46.56103424741547],[48.694733514201744,47.07562816017793],[48.05725304544927,47.74375275327952],[47.31523115417024,47.715847479841955],[46.46644575377627,48.39415233010493],[47.043671502476506,49.152038886097614],[46.75159630716274,49.35600576435377],[47.5494804217493,50.454698391311126],[48.57784142435752,49.87475962991567],[48.70238162618102,50.60512848571284],[50.76664839051215,51.6927623561599],[52.32872358583097,51.718652248738124],[54.532878452376224,51.02623973245932],[55.716940545479815,50.62171662047853],[56.777961053296565,51.04355133727705],[58.36329064314674,51.06365346943858],[59.6422823423706,50.545442206415714],[59.93280724471549,50.842194118851864],[61.337424350840934,50.79907013610426],[61.58800337102417,51.272658799843214],[59.96753380721554,51.9604204372157],[60.92726850774027,52.44754832621504],[60.73999311711459,52.71998647725775],[61.6999861998006,52.97999644633427],[60.97806644068316,53.66499339457914],[61.436591424409066,54.00626455343479],[65.17853356309593,54.35422781027211],[65.666875848254,54.60126699484345],[68.16910037625883,54.97039175070432],[69.06816694527288,55.38525014914353],[70.86526655465514,55.169733588270105],[71.18013105660941,54.133285224008254],[72.22415001820218,54.376655381886735],[73.5085160663844,54.035616766976595],[73.42567874542043,53.489810289109755],[74.38484500519007,53.54686107036008],[76.89110029491343,54.49052440044193],[76.52517947785473,54.177003485727134],[77.80091556184425,53.404414984747575],[80.03555952344169,50.86475088154725],[80.56844689323549,51.38833649352847],[81.94598554883993,50.81219594990637],[83.38300377801238,51.069182847693924],[83.93511478061885,50.88924551045358],[84.41637739455308,50.311399644565824],[85.11555952346203,50.11730296487763],[85.54126997268247,49.69285858824816],[86.82935672398963,49.82667470966817],[87.35997033076268,49.21498078062916],[86.59877648310339,48.54918162698061],[85.7682328633083,48.45575063739698],[85.72048383987072,47.45296946877312],[85.16429039911338,47.00095571551611],[83.18048383986047,47.330031236350855],[82.45892581576913,45.539649563166506],[81.94707075391813,45.31702749285324],[79.96610639844141,44.91751699480466],[80.86620649610137,43.18036204688104],[80.1801501809943,42.92006785742694],[80.25999026888536,42.349999294599115],[79.64364546094015,42.496682847659656],[79.1421773619798,42.856092434249604],[77.6583919615832,42.960685533208334],[76.00035363149857,42.98802236589063],[75.6369649596221,42.87789988867678],[74.21286583852259,43.29833934180351],[73.64530358266092,43.09127187760987],[73.48975752146237,42.50089447689129],[71.84463829945065,42.845395412765185],[71.18628055205227,42.70429291439223],[70.96231489449929,42.26615428320554]]]}},{"type":"Feature","properties":{"abbrev":"Kgz.","name":"Kyrgyzstan","name_long":"Kyrgyzstan","iso_a2":"KG","iso_a3":"KGZ","iso_n3":"417"},"geometry":{"type":"Polygon","coordinates":[[[70.96231489449914,42.26615428320549],[71.18628055205212,42.70429291439214],[71.8446382994506,42.84539541276509],[73.48975752146237,42.50089447689132],[73.64530358266092,43.09127187760982],[74.21286583852256,43.29833934180337],[75.636964959622,42.87789988867668],[76.00035363149846,42.98802236589067],[77.6583919615832,42.96068553320826],[79.14217736197978,42.85609243424952],[79.64364546094012,42.49668284765953],[80.2599902688853,42.34999929459906],[80.11943037305139,42.12394074153825],[78.54366092317531,41.58224254003869],[78.18719689322597,41.18531586360481],[76.90448449087708,41.06648590754964],[76.52636803579745,40.42794607193512],[75.4678279967307,40.56207225194867],[74.77686242055606,40.36642527929163],[73.8222436868283,39.893973497063186],[73.96001305531843,39.660008449861735],[73.6753792662548,39.4312368841056],[71.784693637992,39.27946320246437],[70.54916181832562,39.6041979029865],[69.46488691597753,39.5266832545487],[69.55960981636852,40.10321137141298],[70.64801883329997,39.93575389257117],[71.01419803252017,40.24436554621823],[71.77487511585656,40.14584442805378],[73.05541710804917,40.866033026689465],[71.87011478057047,41.392900092121266],[71.1578585142916,41.14358714452912],[70.42002241402821,41.51999827734314],[71.25924767444822,42.16771067968946],[70.96231489449914,42.26615428320549]]]}},{"type":"Feature","properties":{"abbrev":"S.K.","name":"Korea","name_long":"Republic of Korea","iso_a2":"KR","iso_a3":"KOR","iso_n3":"410"},"geometry":{"type":"Polygon","coordinates":[[[128.34971642467661,38.61224294692785],[129.21291954968007,37.43239248305595],[129.46044966035817,36.78418915460282],[129.4683044780665,35.63214061130395],[129.0913765809296,35.082484239231434],[128.1858504578791,34.89037710218639],[127.38651940318839,34.47567373304412],[126.48574751190874,34.39004588473648],[126.37391971242913,34.934560451795946],[126.5592313986278,35.6845405136479],[126.11739790253229,36.72548472751926],[126.86014326386339,36.893924058574626],[126.17475874237624,37.74968577732804],[126.23733890188176,37.84037791600028],[126.68371992401892,37.80477285415118],[127.07330854706737,38.2561148137884],[127.780035435091,38.30453563084589],[128.20574588431145,38.37039724380189],[128.34971642467661,38.61224294692785]]]}},{"type":"Feature","properties":{"abbrev":"Camb.","name":"Cambodia","name_long":"Cambodia","iso_a2":"KH","iso_a3":"KHM","iso_n3":"116"},"geometry":{"type":"Polygon","coordinates":[[[103.4972799011397,10.632555446815928],[103.09068973186724,11.153660590047165],[102.5849324890267,12.186594956913282],[102.348099399833,13.394247341358223],[102.98842207236163,14.225721136934467],[104.28141808473661,14.416743068901367],[105.21877689007887,14.273211778210694],[106.04394616091552,13.881091009979954],[106.49637332563087,14.570583807834282],[107.38272749230109,14.202440904186972],[107.61454796756243,13.535530707244206],[107.49140302941089,12.337205918827946],[105.81052371625313,11.567614650921227],[106.24967003786946,10.961811835163587],[105.19991499229235,10.889309800658097],[104.33433475140347,10.48654368737523],[103.4972799011397,10.632555446815928]]]}},{"type":"Feature","properties":{"abbrev":"Kwt.","name":"Kuwait","name_long":"Kuwait","iso_a2":"KW","iso_a3":"KWT","iso_n3":"414"},"geometry":{"type":"Polygon","coordinates":[[[47.974519077349896,29.9758192001485],[48.18318851094448,29.534476630159766],[48.09394331237642,29.306299343375002],[48.416094191283946,28.55200429942667],[47.708850538937384,28.526062730416143],[47.45982181172283,29.002519436147224],[46.568713413281756,29.09902517345229],[47.30262210469096,30.05906993257072],[47.974519077349896,29.9758192001485]]]}},{"type":"Feature","properties":{"abbrev":"Laos","name":"Lao PDR","name_long":"Lao PDR","iso_a2":"LA","iso_a3":"LAO","iso_n3":"418"},"geometry":{"type":"Polygon","coordinates":[[[105.21877689007887,14.273211778210694],[105.54433841351769,14.723933620660416],[105.58903852745016,15.570316066952858],[104.7793205098688,16.44186493577145],[104.7169470560925,17.42885895433008],[103.95647667848529,18.24095408779688],[103.20019209189373,18.309632066312773],[102.9987056823877,17.9616946476916],[102.41300499879162,17.932781683824288],[102.11359175009248,18.109101670804165],[101.05954756063517,17.51249725999449],[101.03593143107777,18.408928330961615],[101.2820146016517,19.462584947176765],[100.60629357300316,19.508344427971224],[100.54888105672688,20.109237982661128],[100.11598758341783,20.417849636308187],[100.32910119018952,20.786121731036232],[101.18000532430754,21.436572984294024],[101.27002566935997,21.201651923095184],[101.80311974488292,21.17436676684507],[101.65201785686152,22.318198757409547],[102.17043582561358,22.464753119389304],[102.75489627483466,21.675137233969465],[103.20386111858645,20.766562201413745],[104.43500044150805,20.75873322192153],[104.8225736836971,19.886641750563882],[104.18338789267894,19.62466807706022],[103.8965320170267,19.265180975821806],[105.09459842328152,18.66697459561108],[105.92576216026403,17.48531545660896],[106.55600792849569,16.604283962464805],[107.3127059265456,15.90853831630318],[107.5645251811039,15.202173163305558],[107.38272749230109,14.202440904186972],[106.49637332563087,14.570583807834282],[106.04394616091552,13.881091009979954],[105.21877689007887,14.273211778210694]]]}},{"type":"Feature","properties":{"abbrev":"Leb.","name":"Lebanon","name_long":"Lebanon","iso_a2":"LB","iso_a3":"LBN","iso_n3":"422"},"geometry":{"type":"Polygon","coordinates":[[[35.82110070165024,33.2774264592763],[35.55279666519081,33.26427480725802],[35.460709262846706,33.08904002535628],[35.126052687324545,33.09090037691878],[35.48220665868013,33.90545014091944],[35.9795923194894,34.61005829521913],[35.99840254084364,34.644914048800004],[36.4481942075121,34.59393524834407],[36.61175011571589,34.201788641897174],[36.066460402172055,33.82491242119255],[35.82110070165024,33.2774264592763]]]}},{"type":"Feature","properties":{"abbrev":"Sri L.","name":"Sri Lanka","name_long":"Sri Lanka","iso_a2":"LK","iso_a3":"LKA","iso_n3":"144"},"geometry":{"type":"Polygon","coordinates":[[[81.7879590188914,7.523055324733164],[81.63732221876059,6.481775214051921],[81.21801964714433,6.197141424988288],[80.34835696810441,5.968369859232155],[79.87246870312853,6.76346344647493],[79.69516686393513,8.200843410673386],[80.14780073437964,9.824077663609557],[80.83881798698656,9.268426825391188],[81.30431928907177,8.56420624433369],[81.7879590188914,7.523055324733164]]]}},{"type":"Feature","properties":{"abbrev":"Myan.","name":"Myanmar","name_long":"Myanmar","iso_a2":"MM","iso_a3":"MMR","iso_n3":"104"},"geometry":{"type":"Polygon","coordinates":[[[99.54330936075931,20.186597601802063],[98.95967573445488,19.752980658440947],[98.25372399291561,19.708203029860044],[97.7977828308044,18.627080389881755],[97.37589643757354,18.445437730375815],[97.85912275593486,17.567946071843664],[98.49376102091135,16.83783559820793],[98.90334842325676,16.177824204976115],[98.53737592976572,15.308497422746084],[98.1920740091914,15.12370250087035],[98.43081912637987,14.622027696180835],[99.09775516153876,13.827502549693278],[99.21201175333609,13.269293728076464],[99.19635379435167,12.80474843998867],[99.58728600463972,11.892762762901697],[99.03812055867398,10.960545762572437],[98.55355065307305,9.932959906448545],[98.45717410684871,10.67526601810515],[98.76454552612077,11.441291612183749],[98.42833865762985,12.032986761925683],[98.50957400919268,13.122377631070677],[98.1036039571077,13.640459703012851],[97.77773237507517,14.837285874892642],[97.59707156778276,16.10056793869977],[97.1645398294998,16.928734442609336],[96.505768670643,16.42724050543285],[95.3693522481124,15.7143899601826],[94.80840457558412,15.80345429123764],[94.18880415240454,16.037936102762018],[94.53348595579135,17.277240301985728],[94.32481652219674,18.2135139022499],[93.54098839719364,19.36649262133002],[93.66325483599621,19.726961574781996],[93.07827762245219,19.855144965081976],[92.36855350135562,20.670883287025347],[92.30323449093868,21.47548533780982],[92.65225711463799,21.324047552978485],[92.67272098182556,22.041238918541254],[93.16612755734836,22.278459580977103],[93.06029422401463,22.70311066333557],[93.28632693885928,23.043658352139005],[93.3251876159428,24.078556423432204],[94.10674197792505,23.85074087167348],[94.55265791217164,24.675238348890332],[94.60324913938538,25.162495428970402],[95.1551534362626,26.001307277932085],[95.12476769407496,26.5735720891323],[96.41936567585097,27.264589341739224],[97.1339990580153,27.083773505149964],[97.0519885599681,27.69905894623315],[97.40256147663612,27.88253611908544],[97.32711388549004,28.26158274994634],[97.91198774616944,28.335945136014345],[98.2462309102333,27.74722138112918],[98.68269005737046,27.50881216075062],[98.71209394734451,26.743535874940264],[98.67183800658916,25.918702500913525],[97.72460900267914,25.083637193293],[97.60471967976198,23.897404690033042],[98.66026248575577,24.063286037689966],[98.89874922078276,23.14272207284253],[99.5319922220874,22.94903880461258],[99.24089887898725,22.11831431730458],[99.98348921102149,21.7429367131364],[100.41653771362738,21.558839423096614],[101.15003299357825,21.84998444262902],[101.18000532430754,21.436572984294024],[100.32910119018952,20.786121731036232],[100.11598758341783,20.417849636308187],[99.54330936075931,20.186597601802063]]]}},{"type":"Feature","properties":{"abbrev":"Mong.","name":"Mongolia","name_long":"Mongolia","iso_a2":"MN","iso_a3":"MNG","iso_n3":"496"},"geometry":{"type":"Polygon","coordinates":[[[87.7512642760767,49.29719798440548],[88.80556684769552,49.47052073831242],[90.71366743364067,50.33181183532109],[92.23471154171968,50.80217072204172],[93.10421919146269,50.49529022887643],[94.14756635943561,50.48053660745709],[94.81594933469873,50.01343333597085],[95.81402794798399,49.977466539095715],[97.25972781778141,49.72606069599574],[98.23176150919156,50.422400621128745],[97.8257397806743,51.01099518493318],[98.86149051310034,52.047366034546684],[99.98173221232354,51.63400625264399],[100.88948042196262,51.51685578063832],[102.06522260946733,51.259920559283124],[102.25590864462431,50.51056061461868],[103.67654544476022,50.089966132195116],[104.6215523620817,50.275329494826074],[105.88659142458675,50.406019192092224],[106.88880415245534,50.27429596618023],[107.86817589725094,49.793705145865815],[108.47516727095127,49.28254771585074],[109.40244917199666,49.29296051695755],[110.66201053267876,49.13012807880587],[111.58123091028662,49.37796824807769],[112.89773969935439,49.54356537535699],[114.36245649623527,50.24830272073741],[114.96210981655018,50.140247300815126],[115.48569542853141,49.805177313834605],[116.67880089728618,49.88853139912139],[116.19180219936757,49.134598090199106],[115.48528201707305,48.13538259540344],[115.74283735561578,47.72654450132629],[116.30895267137323,47.85341014260284],[117.29550744025741,47.69770905210743],[118.06414269416672,48.06673045510368],[118.86657433479495,47.74706004494617],[119.7728239278975,47.048058783550125],[119.66326989143874,46.69267995867892],[118.87432579963873,46.80541209572365],[117.42170128791419,46.67273285581426],[116.71786828009886,46.38820241961521],[115.98509647020008,45.727235012386004],[114.46033165899607,45.339816799493825],[113.46390669154417,44.80889313412711],[112.43606245325881,45.01164561622429],[111.87330610560029,45.10207937273506],[111.34837690637946,44.45744171811009],[111.66773725794323,44.07317576758771],[111.82958784388137,43.743118394539515],[111.12968224492022,43.40683401140015],[110.41210330611528,42.87123362891103],[109.24359581913146,42.5194463160841],[107.74477257693795,42.48151581478187],[106.12931562706169,42.13432770442891],[104.96499393109347,41.59740957291635],[104.52228193564899,41.908346666016556],[103.31227827353482,41.9074681666676],[101.83304039917994,42.51487295182628],[100.84586551310827,42.66380442969145],[99.51581749878004,42.52469147396172],[97.45175744017801,42.74888967546002],[96.34939578652781,42.725635280928685],[95.76245486855669,43.319449164394605],[95.30687544147153,44.24133087826547],[94.68892866412533,44.352331854828414],[93.4807336771413,44.975472113619965],[92.13389082231822,45.11507599545646],[90.9455395853343,45.28607330991028],[90.58576826371828,45.71971609148753],[90.97080936072501,46.88814606382293],[90.28082563676392,47.69354909930793],[88.85429772334676,48.06908173277296],[88.01383222855173,48.599462795600616],[87.7512642760767,49.29719798440548]]]}},{"type":"Feature","properties":{"abbrev":"Malay.","name":"Malaysia","name_long":"Malaysia","iso_a2":"MY","iso_a3":"MYS","iso_n3":"458"},"geometry":{"type":"MultiPolygon","coordinates":[[[[101.07551557821333,6.204867051615892],[101.15421878459384,5.691384182147715],[101.81428185425804,5.810808417174228],[102.14118696493645,6.221636053894656],[102.37114708863524,6.12820506431096],[102.9617053568667,5.524495144061078],[103.38121463421217,4.855001125503748],[103.4385754740562,4.181605536308382],[103.33212202353488,3.726697902842971],[103.42942874554055,3.38286876058902],[103.50244754436889,2.791018581550205],[103.85467410687036,2.515454006353763],[104.24793175661151,1.631141058759056],[104.22881147666354,1.293048000489534],[103.51970747275443,1.226333726400682],[102.57361535035479,1.967115383304744],[101.39063846232918,2.760813706875624],[101.27353966675585,3.270291652841181],[100.6954354187067,3.93913971599487],[100.55740766805509,4.76728038168828],[100.19670617065773,5.31249258058368],[100.30626020711652,6.040561835143876],[100.08575687052709,6.46448944745029],[100.25959638875692,6.642824815289572],[101.07551557821333,6.204867051615892]]],[[[118.61832075406485,4.478202419447541],[117.88203494677019,4.137551377779488],[117.01521447150637,4.306094061699469],[115.86551720587677,4.306559149590157],[115.51907840379201,3.169238389494396],[115.13403730678523,2.821481838386219],[114.6213554220175,1.430688177898887],[113.80584964401956,1.217548732911041],[112.8598091980522,1.497790025229946],[112.38025190638368,1.410120957846758],[111.79754845586044,0.904441229654651],[111.15913781132659,0.976478176269509],[110.51406090702713,0.773131415200993],[109.83022667850886,1.338135687664192],[109.66326012577375,2.006466986494985],[110.39613528853707,1.663774725751395],[111.1688529805975,1.850636704918784],[111.3700810079421,2.697303371588873],[111.79692833867287,2.885896511238073],[112.99561486211527,3.102394924324869],[113.71293541875873,3.893509426281128],[114.20401655482843,4.52587392823682],[114.65959598191355,4.00763682699781],[114.8695573263154,4.348313706881952],[115.34746097215069,4.316636053887009],[115.40570031134362,4.955227565933825],[115.45071048386981,5.447729803891561],[116.22074100145099,6.143191229675621],[116.72510298061978,6.924771429873998],[117.12962609260049,6.928052883324567],[117.64339318244633,6.422166449403306],[117.68907514859237,5.987490139180181],[118.3476912781522,5.708695786965464],[119.18190392463994,5.407835598162251],[119.11069380094172,5.016128241389865],[118.43972700406411,4.96651886638962],[118.61832075406485,4.478202419447541]]]]}},{"type":"Feature","properties":{"abbrev":"Nepal","name":"Nepal","name_long":"Nepal","iso_a2":"NP","iso_a3":"NPL","iso_n3":"524"},"geometry":{"type":"Polygon","coordinates":[[[88.12044070836987,27.876541652939594],[88.04313276566123,27.445818589786825],[88.17480431514092,26.81040517832595],[88.06023766474982,26.41461538340249],[87.22747195836628,26.397898057556077],[86.02439293817918,26.63098460540857],[85.25177859898338,26.72619843190634],[84.6750179381738,27.234901231387536],[83.30424889519955,27.36450572357556],[81.99998742058497,27.925479234319994],[81.05720258985203,28.416095282499043],[80.08842451367627,28.79447011974014],[80.4767212259174,29.72986522065534],[81.11125613802932,30.183480943313402],[81.52580447787474,30.42271698660863],[82.32751264845088,30.115268052688133],[83.33711510613719,29.463731594352193],[83.89899295444673,29.320226141877658],[84.23457970575015,28.839893703724698],[85.01163821812304,28.642773952747344],[85.82331994013151,28.203575954698703],[86.9545170430006,27.974261786403517],[88.12044070836987,27.876541652939594]]]}},{"type":"Feature","properties":{"abbrev":"Oman","name":"Oman","name_long":"Oman","iso_a2":"OM","iso_a3":"OMN","iso_n3":"512"},"geometry":{"type":"MultiPolygon","coordinates":[[[[58.86114139184659,21.114034532144302],[58.48798587426696,20.42898590746711],[58.034318475176605,20.48143748624335],[57.82637251163411,20.24300242764863],[57.665762160070955,19.736004950433113],[57.788700392493375,19.06757029873765],[57.69439090356068,18.944709580963803],[57.234263950433814,18.947991034414258],[56.609650913321985,18.57426707607948],[56.512189162019496,18.087113348863937],[56.28352094912801,17.87606679938395],[55.6614917336307,17.88412832282154],[55.2699394061552,17.632309068263197],[55.274900343655105,17.228354397037663],[54.79100223167413,16.950696926333364],[54.239252964093765,17.044980577049984],[53.570508253804604,16.707662665264678],[53.10857262554751,16.65105113368898],[52.78218427919207,17.349742336491232],[52.00000980002224,19.000003363516072],[54.99998172386242,19.99999400479612],[55.66665937685988,22.00000112557231],[55.2083410988632,22.70832998299701],[55.234489373602884,23.11099274341535],[55.5258410988645,23.524869289640918],[55.52863162620829,23.933604030853502],[55.98121382022052,24.130542914317854],[55.80411868675625,24.269604193615294],[55.886232537668064,24.920830593357493],[56.396847365144,24.924732163995515],[56.84514041527606,24.241673081961494],[57.40345258975744,23.87859446867884],[58.13694786970834,23.74793060962884],[58.72921146020544,23.565667832935418],[59.18050174341036,22.99239533130546],[59.45009769067703,22.6602709009656],[59.80806033716286,22.533611965418203],[59.8061483091681,22.31052480721419],[59.44219119653641,21.714540513592084],[59.282407667889885,21.433885809814882],[58.86114139184659,21.114034532144302]]],[[[56.39142133975341,25.89599070892126],[56.26104170108093,25.71460643157675],[56.07082075381456,26.05546417897395],[56.36201744977936,26.395934353128947],[56.48567915225382,26.309117946878672],[56.39142133975341,25.89599070892126]]]]}},{"type":"Feature","properties":{"abbrev":"Pak.","name":"Pakistan","name_long":"Pakistan","iso_a2":"PK","iso_a3":"PAK","iso_n3":"586"},"geometry":{"type":"Polygon","coordinates":[[[75.15802778514092,37.13303091078912],[75.89689741405013,36.666806138651836],[76.19284834178569,35.89840342868782],[77.83745079947457,35.494009507787766],[76.87172163280403,34.65354401299274],[75.75706098826834,34.50492259372132],[74.24020267120497,34.74888703057125],[73.74994835805195,34.31769887952785],[74.10429365427734,33.44147329358685],[74.45155927927871,32.7648996038055],[75.25864179881322,32.2711054550405],[74.40592898956501,31.69263947196528],[74.42138024282026,30.979814764931177],[73.45063846221743,29.97641347911987],[72.8237516620847,28.961591701772054],[71.77766564320032,27.913180243434525],[70.61649620960193,27.989196275335868],[69.51439293811312,26.940965684511372],[70.16892662952202,26.491871649678842],[70.28287316272558,25.72222870533983],[70.84469933460284,25.21510203704352],[71.04324018746823,24.3565239527302],[68.84259931831878,24.35913361256094],[68.1766451353734,23.69196503345671],[67.44366661974547,23.94484365487699],[67.14544192898907,24.663611151624647],[66.37282758979326,25.425140896093847],[64.53040774929113,25.23703868255143],[62.9057007180346,25.21840932871021],[61.49736290878419,25.0782370061185],[61.87418745305655,26.239974880472104],[63.31663170761959,26.756532497661667],[63.233897739520295,27.21704702403071],[62.755425652929866,27.378923448184985],[62.72783043808598,28.25964488373539],[61.77186811711863,28.699333807890795],[61.36930870956494,29.303276272085924],[60.874248488208785,29.829238999952604],[62.54985680527278,29.31857249604431],[63.55026085801117,29.468330796826162],[64.14800215033125,29.340819200145972],[64.35041873561852,29.560030625928093],[65.0468620136161,29.472180691031905],[66.34647260932442,29.887943427036177],[66.38145755398602,30.73889923758645],[66.93889122911847,31.304911200479353],[67.68339358914747,31.30315420178142],[67.79268924344478,31.58293040620963],[68.55693200060932,31.713310044882018],[68.92667687365767,31.620189113892064],[69.31776411324255,31.90141225842444],[69.26252200712256,32.5019440780883],[69.68714725126485,33.105498969041236],[70.3235941913716,33.35853261975839],[69.9305432473596,34.02012014417511],[70.8818030129884,33.98885590263851],[71.15677330921346,34.34891144463215],[71.11501875192162,34.733125718722235],[71.6130762063507,35.153203436822864],[71.49876793812109,35.650563259416],[71.26234826038575,36.074387518857804],[71.84629194528392,36.50994232842986],[72.92002485544447,36.72000702569632],[74.06755171091783,36.83617564548845],[74.57589277537298,37.02084137628346],[75.15802778514092,37.13303091078912]]]}},{"type":"Feature","properties":{"abbrev":"Phil.","name":"Philippines","name_long":"Philippines","iso_a2":"PH","iso_a3":"PHL","iso_n3":"608"},"geometry":{"type":"MultiPolygon","coordinates":[[[[126.37681359263748,8.414706325713354],[126.4785128113879,7.750354112168978],[126.53742394420063,7.189380601424574],[126.19677290253256,6.27429433840004],[125.83142052622911,7.293715318221857],[125.3638521668523,6.786485297060992],[125.68316084198372,6.049656887227258],[125.39651167206064,5.58100332277229],[124.21978763234236,6.161355495626182],[123.93871951710695,6.885135606306122],[124.24366214406135,7.360610459823661],[123.61021243702757,7.833527329942754],[123.2960714051252,7.418875637232787],[122.82550581267542,7.457374579290217],[122.08549930225577,6.899424139834849],[121.91992801319263,7.192119452336072],[122.31235884001714,8.034962063016508],[122.94239790251966,8.316236883981174],[123.48768761606352,8.693009751821194],[123.84115441293984,8.240324204944386],[124.60146976125023,8.514157619659017],[124.76461225799564,8.96040945071546],[125.47139082245157,8.986996975129642],[125.41211795461278,9.760334784377548],[126.22271447154318,9.28607432701885],[126.3066369975851,8.782487494334575],[126.37681359263748,8.414706325713354]]],[[[123.98243777882583,10.278778591345812],[123.62318322153278,9.950090643753299],[123.30992068897936,9.318268744336676],[122.99588300994164,9.0221886255204],[122.38005496631948,9.713360907424203],[122.5860889018671,9.981044826696104],[122.83708133350873,10.261156927934238],[122.94741051645192,10.881868394408029],[123.49884972543848,10.940624497923949],[123.33777428598475,10.267383938025446],[124.07793582570125,11.23272553145371],[123.98243777882583,10.278778591345812]]],[[[118.50458092659035,9.31638255455809],[117.1742745301007,8.367499904814665],[117.66447716682138,9.066888739452935],[118.38691369026175,9.684499619989225],[118.98734215706108,10.376292019080509],[119.51149620979756,11.369668077027214],[119.68967654833992,10.554291490109875],[119.029458449379,10.003653265823871],[118.50458092659035,9.31638255455809]]],[[[121.88354780485913,11.89175507247198],[122.48382124236147,11.582187404827508],[123.12021650603597,11.58366018314787],[123.10083784392647,11.16593374271649],[122.6377136577267,10.741308498574227],[122.00261030485957,10.441016750526087],[121.96736697803655,10.905691229694623],[122.03837039600555,11.41584096928004],[121.88354780485913,11.89175507247198]]],[[[125.50255171112352,12.162694606978349],[125.78346479706218,11.046121934447768],[125.01188398651229,11.31145457605038],[125.03276126515814,10.975816148314706],[125.27744917206027,10.358722032101312],[124.80181928924573,10.134678859899893],[124.76016808481849,10.837995103392302],[124.45910119028606,10.889929917845635],[124.30252160044172,11.495370998577227],[124.8910128113816,11.415582587118593],[124.87799035044398,11.79418996830499],[124.26676150929572,12.557760931849685],[125.22711632700785,12.535720933477194],[125.50255171112352,12.162694606978349]]],[[[121.52739383350351,13.06959015548452],[121.26219038298157,12.205560207564403],[120.83389611214656,12.70449616134242],[120.3234363139675,13.46641347905387],[121.18012820850217,13.429697373910443],[121.52739383350351,13.06959015548452]]],[[[121.32130822152358,18.504064642811016],[121.9376013530364,18.218552354398383],[122.24600630095429,18.478949896717097],[122.336956821788,18.224882717354177],[122.1742794129332,17.810282701076375],[122.51565392465336,17.093504746971973],[122.2523108256939,16.262444362854126],[121.66278608610828,15.931017564350128],[121.5050696147534,15.124813544164622],[121.72882856657728,14.328376369682246],[122.25892540902734,14.218202216035976],[122.70127566944566,14.33654124598442],[123.95029503794026,13.78213064214107],[123.85510704965863,13.237771104378467],[124.1812886902849,12.997527370653472],[124.07741906137825,12.536676947474575],[123.29803510955227,13.027525539598981],[122.92865197152993,13.552919826710408],[122.67135501514869,13.185836289925135],[122.03464969288055,13.784481919810347],[121.1263847189186,13.63668732345556],[120.62863732308331,13.857655747935652],[120.67938357959385,14.271015529838323],[120.99181928923055,14.525392767795083],[120.69333621631272,14.756670640517285],[120.564145135583,14.396279201713822],[120.0704285014664,14.970869452367097],[119.92092858284613,15.406346747290739],[119.88377322802826,16.363704331929966],[120.28648766487882,16.03462881109533],[120.39004723519176,17.59908112229951],[120.71586714079191,18.50522736253754],[121.32130822152358,18.504064642811016]]]]}},{"type":"Feature","properties":{"abbrev":"N.K.","name":"Dem. Rep. Korea","name_long":"Dem. Rep. Korea","iso_a2":"KP","iso_a3":"PRK","iso_n3":"408"},"geometry":{"type":"Polygon","coordinates":[[[130.6400159038524,42.39500946712528],[130.78000735893113,42.22000722916885],[130.40003055228902,42.28000356705971],[129.96594852103726,41.94136790625105],[129.66736209525482,41.60110443782523],[129.70518924369247,40.88282786718433],[129.18811486218,40.66180776627199],[129.01039961152821,40.485436102859815],[128.63336836152672,40.18984691015031],[127.96741417858135,40.02541250259756],[127.53343550019417,39.7568500839767],[127.5021195822253,39.32393077245153],[127.38543419811029,39.213472398427655],[127.78334272675772,39.05089834243742],[128.34971642467661,38.61224294692785],[128.20574588431145,38.37039724380189],[127.780035435091,38.30453563084589],[127.07330854706737,38.2561148137884],[126.68371992401892,37.80477285415118],[126.23733890188176,37.84037791600028],[126.17475874237624,37.74968577732804],[125.6891036316972,37.940010077459014],[125.56843916229569,37.75208873142962],[125.2753304383362,37.669070542952724],[125.24008711151315,37.85722443292744],[124.98103315643398,37.94882090916478],[124.71216067921938,38.10834605564979],[124.98599409393398,38.54847422947968],[125.2219486837787,38.66585724543067],[125.13285851450752,38.84855927179859],[125.3865897970606,39.387957872061165],[125.3211157573468,39.5513845891842],[124.7374821310424,39.66034434667162],[124.26562462778531,39.928493353834156],[125.07994184784063,40.56982371679245],[126.18204511932943,41.10733612727637],[126.86908328664985,41.81656932226619],[127.34378299368302,41.50315176041597],[128.20843305879066,41.46677155208249],[128.0522152039723,41.99428457291795],[129.59666873587952,42.42498179785456],[129.99426720593323,42.985386867843786],[130.6400159038524,42.39500946712528]]]}},{"type":"Feature","properties":{"abbrev":"Pal.","name":"Palestine","name_long":"Palestine","iso_a2":"PS","iso_a3":"PSE","iso_n3":"275"},"geometry":{"type":"Polygon","coordinates":[[[35.54566531753454,32.393992011030576],[35.5452519060762,31.78250478772084],[35.397560662586045,31.48908600516758],[34.92740848159457,31.353435370401414],[34.970506626125996,31.616778469360806],[35.22589155451242,31.754341132121766],[34.97464074070933,31.86658234305972],[35.183930291491436,32.53251068778894],[35.54566531753454,32.393992011030576]]]}},{"type":"Feature","properties":{"abbrev":"Qatar","name":"Qatar","name_long":"Qatar","iso_a2":"QA","iso_a3":"QAT","iso_n3":"634"},"geometry":{"type":"Polygon","coordinates":[[[50.81010827006958,24.754742539971378],[50.74391076030369,25.482424221289396],[51.01335167827349,26.00699168548419],[51.28646162293606,26.11458201751587],[51.58907881043726,25.80111277923338],[51.60670047384881,25.21567047779874],[51.38960778179063,24.62738597258806],[51.11241539897702,24.556330878186724],[50.81010827006958,24.754742539971378]]]}},{"type":"Feature","properties":{"abbrev":"Syria","name":"Syria","name_long":"Syria","iso_a2":"SY","iso_a3":"SYR","iso_n3":"760"},"geometry":{"type":"Polygon","coordinates":[[[38.792340529136084,33.378686428352225],[36.834062127435544,32.312937526980775],[35.71991824722275,32.709192409794866],[35.700797967274745,32.71601369885738],[35.836396925608625,32.86812327730851],[35.82110070165024,33.2774264592763],[36.066460402172055,33.82491242119255],[36.61175011571589,34.201788641897174],[36.4481942075121,34.59393524834407],[35.99840254084364,34.644914048800004],[35.905023227692226,35.410009467097325],[36.149762811026534,35.82153473565367],[36.417550083163036,36.04061697035506],[36.6853890317318,36.25969920505646],[36.7394942563414,36.81752045343109],[37.06676110204583,36.62303620050062],[38.1677274920242,36.90121043552777],[38.6998913917659,36.71292735447234],[39.52258019385255,36.71605377862599],[40.67325931169569,37.09127635349729],[41.21208947120305,37.074352321921694],[42.34959109881177,37.2298725449041],[41.83706424334096,36.605853786763575],[41.289707472505455,36.35881460219227],[41.383965285005814,35.628316555314356],[41.006158888519934,34.41937226006212],[38.792340529136084,33.378686428352225]]]}},{"type":"Feature","properties":{"abbrev":"Saud.","name":"Saudi Arabia","name_long":"Saudi Arabia","iso_a2":"SA","iso_a3":"SAU","iso_n3":"682"},"geometry":{"type":"Polygon","coordinates":[[[42.77933230975097,16.347891343648683],[42.649572788266084,16.774635321514964],[42.347989129410706,17.075805568912003],[42.270887892431226,17.474721787989125],[41.75438195167396,17.833046169500975],[41.22139122901558,18.671599636301206],[40.93934126156654,19.486485297111756],[40.247652215339826,20.17463450772649],[39.80168460466095,20.338862209550054],[39.139399448408284,21.29190481209293],[39.023695916506796,21.986875311770195],[39.06632897314759,22.57965566659027],[38.49277225114008,23.688451036060854],[38.02386030452362,24.07868561451293],[37.483634881344386,24.285494696545015],[37.154817742671185,24.85848297779731],[37.209491408036,25.084541530858104],[36.93162723160259,25.602959499610176],[36.63960371272122,25.82622752532722],[36.249136590323815,26.57013560638488],[35.64018151219639,27.37652049408342],[35.13018680190788,28.06335195567472],[34.63233605320798,28.058546047471566],[34.787778761541944,28.6074272730597],[34.832220493312946,28.957483425404845],[34.95603722508426,29.35655467377884],[36.06894087092206,29.197494615184457],[36.50121422704358,29.5052536076987],[36.74052778498725,29.86528331147619],[37.503581984209035,30.003776150018403],[37.66811974462638,30.3386652694859],[37.998848911294374,30.50849986421313],[37.00216556168101,31.508412990844743],[39.00488569515255,32.01021698661498],[39.19546837744497,32.16100881604267],[40.399994337736246,31.889991766887935],[41.889980910007836,31.190008653278365],[44.70949873228474,29.178891099559383],[46.568713413281756,29.09902517345229],[47.45982181172283,29.002519436147224],[47.708850538937384,28.526062730416143],[48.416094191283946,28.55200429942667],[48.80759484232718,27.689627997339883],[49.29955447774582,27.46121816660981],[49.470913527225655,27.10999929453808],[50.15242231629088,26.689663194275997],[50.212935418504685,26.277026882425375],[50.11330325704594,25.943972276304248],[50.239858839728754,25.608049628190926],[50.52738650900073,25.3278083358721],[50.66055667501689,24.99989553476402],[50.81010827006958,24.754742539971378],[51.11241539897702,24.556330878186724],[51.38960778179063,24.62738597258806],[51.57951867046327,24.245497137951105],[51.61770755392698,24.014219265228828],[52.000733270074335,23.00115448657894],[55.0068030129249,22.496947536707136],[55.20834109886319,22.708329982997046],[55.666659376859826,22.00000112557234],[54.99998172386236,19.999994004796108],[52.00000980002224,19.000003363516058],[49.11667158386487,18.616667588774945],[48.18334354024134,18.166669216377315],[47.46669477721763,17.116681626854884],[47.000004917189756,16.949999294497445],[46.74999433776165,17.283338120996177],[46.366658563020536,17.233315334537636],[45.39999922056875,17.333335069238558],[45.21665123879718,17.43332896572333],[44.06261315285508,17.410358791569593],[43.79151858905192,17.31997671149111],[43.380794305196105,17.57998668056767],[43.11579756040335,17.088440456607373],[43.21837527850275,16.66688996018641],[42.77933230975097,16.347891343648683]]]}},{"type":"Feature","properties":{"abbrev":"Thai.","name":"Thailand","name_long":"Thailand","iso_a2":"TH","iso_a3":"THA","iso_n3":"764"},"geometry":{"type":"Polygon","coordinates":[[[102.5849324890267,12.186594956913282],[101.68715783081996,12.645740057826572],[100.83180952352487,12.627084865769206],[100.9784672383692,13.412721665902566],[100.0977974792511,13.406856390837433],[100.01873253784456,12.307001044153354],[99.47892052612363,10.846366685423547],[99.15377241414316,9.963061428258554],[99.22239871622676,9.239255479362427],[99.87383182169813,9.20786204674512],[100.27964684448622,8.295152899606052],[100.45927412313276,7.429572658717177],[101.01732791545273,6.856868597842478],[101.62307905477806,6.74062246340192],[102.14118696493638,6.221636053894628],[101.81428185425798,5.810808417174242],[101.15421878459387,5.691384182147715],[101.07551557821336,6.204867051615921],[100.25959638875696,6.642824815289543],[100.0857568705271,6.46448944745029],[99.69069054565574,6.848212795433597],[99.51964155476963,7.34345388430276],[98.9882528015123,7.907993068875327],[98.503786248776,8.382305202666288],[98.339661899817,7.794511623562386],[98.15000939330581,8.350007432483878],[98.25915001830624,8.973922837759801],[98.55355065307305,9.932959906448545],[99.03812055867398,10.960545762572437],[99.58728600463972,11.892762762901697],[99.19635379435167,12.80474843998867],[99.21201175333609,13.269293728076464],[99.09775516153876,13.827502549693278],[98.43081912637987,14.622027696180835],[98.1920740091914,15.12370250087035],[98.53737592976572,15.308497422746084],[98.90334842325676,16.177824204976115],[98.49376102091135,16.83783559820793],[97.85912275593486,17.567946071843664],[97.37589643757354,18.445437730375815],[97.7977828308044,18.627080389881755],[98.25372399291561,19.708203029860044],[98.95967573445488,19.752980658440947],[99.54330936075931,20.186597601802063],[100.11598758341783,20.417849636308187],[100.54888105672688,20.109237982661128],[100.60629357300316,19.508344427971224],[101.2820146016517,19.462584947176765],[101.03593143107777,18.408928330961615],[101.05954756063517,17.51249725999449],[102.11359175009248,18.109101670804165],[102.41300499879162,17.932781683824288],[102.9987056823877,17.9616946476916],[103.20019209189373,18.309632066312773],[103.95647667848529,18.24095408779688],[104.7169470560925,17.42885895433008],[104.7793205098688,16.44186493577145],[105.58903852745016,15.570316066952858],[105.54433841351769,14.723933620660416],[105.21877689007887,14.273211778210694],[104.28141808473661,14.416743068901367],[102.98842207236163,14.225721136934467],[102.348099399833,13.394247341358223],[102.5849324890267,12.186594956913282]]]}},{"type":"Feature","properties":{"abbrev":"Tjk.","name":"Tajikistan","name_long":"Tajikistan","iso_a2":"TJ","iso_a3":"TJK","iso_n3":"762"},"geometry":{"type":"Polygon","coordinates":[[[71.01419803252017,40.24436554621823],[70.64801883329997,39.93575389257117],[69.55960981636852,40.10321137141298],[69.46488691597753,39.5266832545487],[70.54916181832562,39.6041979029865],[71.784693637992,39.27946320246437],[73.6753792662548,39.4312368841056],[73.92885216664644,38.50581533462274],[74.25751427602273,38.60650686294345],[74.86481570831681,38.3788463404816],[74.8299857929521,37.9900070257014],[74.98000247589542,37.419990139305895],[73.9486959166465,37.4215662704908],[73.26005577992501,37.495256862939],[72.63688968291729,37.047558091778356],[72.1930408059624,36.948287665345674],[71.8446382994506,36.73817129164692],[71.44869347523024,37.06564484308051],[71.54191775908478,37.905774441065645],[71.23940392444817,37.95326508234188],[71.34813113799026,38.258905341132156],[70.80682050973289,38.486281643216415],[70.3763041523093,38.13839590102752],[70.27057417184014,37.735164699854025],[70.11657840361033,37.58822276463209],[69.51878543485796,37.60899669041341],[69.19627282092438,37.15114350030743],[68.85944583524594,37.344335842430596],[68.13556237170138,37.0231151393043],[67.82999962755952,37.14499400486468],[68.39203250516596,38.157025254868735],[68.17602501818592,38.901553453113905],[67.44221967964131,39.140143541005486],[67.70142866401736,39.58047842056453],[68.53641645698941,39.53345286717894],[69.0116329283455,40.08615814875666],[69.32949466337283,40.72782440852485],[70.66662234892505,40.96021332454141],[70.45815962105962,40.49649485937029],[70.60140669137269,40.21852733007229],[71.01419803252017,40.24436554621823]]]}},{"type":"Feature","properties":{"abbrev":"Turkm.","name":"Turkmenistan","name_long":"Turkmenistan","iso_a2":"TM","iso_a3":"TKM","iso_n3":"795"},"geometry":{"type":"Polygon","coordinates":[[[61.21081709172574,35.650072333309225],[61.123070509694145,36.49159719496624],[60.37763797388387,36.52738312432837],[59.23476199731681,37.412987982730336],[58.4361544126782,37.522309475243794],[57.33043379092898,38.02922943781094],[56.61936608259282,38.121394354803485],[56.18037479027333,37.93512665460742],[55.51157840355191,37.96411713312317],[54.800303989486565,37.392420762678185],[53.92159793479556,37.19891836196126],[53.73551110211252,37.90613617609169],[53.880928582581845,38.95209300389536],[53.101027866432894,39.29057363540713],[53.35780805849123,39.97528636327445],[52.69397260926982,40.03362905533197],[52.915251092343624,40.87652334244473],[53.858139275941134,40.63103445084218],[54.73684533063215,40.95101491959346],[54.008310988181314,41.55121084244742],[53.72171349469059,42.12319143327003],[52.916749708880076,41.86811656347733],[52.81468875510361,41.13537059179471],[52.50245975119615,41.78331553808637],[52.944293247291654,42.11603424739759],[54.07941775901495,42.32410940202083],[54.75534549339263,42.043971462566574],[55.45525109235377,41.25985911718584],[55.96819135928291,41.30864166926936],[57.0963912290791,41.32231008561057],[56.932215203687804,41.826026109375604],[57.78652998233708,42.17055288346552],[58.62901085799146,42.75155101172305],[59.97642215356978,42.22308197689021],[60.08334069198167,41.425146185871405],[60.46595299667069,41.22032664648255],[61.54717898951356,41.266370347654615],[61.88271406438469,41.084856879229406],[62.374260288345,40.05388621679039],[63.51801476426103,39.36325653742564],[64.17022301621677,38.892406724598246],[65.2159989765074,38.40269501398429],[66.54615034370022,37.97468496352687],[66.51860680528867,37.36278432875879],[66.21738488145932,37.39379018813392],[65.74563073106681,37.66116404881207],[65.58894778835784,37.30521678318564],[64.7461051776774,37.111817735333304],[64.5464791197339,36.31207326918427],[63.9828959491587,36.0079574651466],[63.19353844590035,35.857165635718914],[62.9846623065766,35.40404083916762],[62.230651483005886,35.270663967422294],[61.21081709172574,35.650072333309225]]]}},{"type":"Feature","properties":{"abbrev":"T.L.","name":"Timor-Leste","name_long":"Timor-Leste","iso_a2":"TL","iso_a3":"TLS","iso_n3":"626"},"geometry":{"type":"Polygon","coordinates":[[[124.96868248911622,-8.892790215697083],[125.08624637258026,-8.65688730228468],[125.94707238169826,-8.432094821815035],[126.64470421763855,-8.398246758663852],[126.95724328013982,-8.273344821814398],[127.33592817597464,-8.397316582882603],[126.96799197805655,-8.668256117388893],[125.9258850444586,-9.106007175333351],[125.08852013560109,-9.393173109579294],[125.07001997284061,-9.089987481322872],[124.96868248911622,-8.892790215697083]]]}},{"type":"Feature","properties":{"abbrev":"Tur.","name":"Turkey","name_long":"Turkey","iso_a2":"TR","iso_a3":"TUR","iso_n3":"792"},"geometry":{"type":"MultiPolygon","coordinates":[[[[36.91312706884215,41.335358384764305],[38.34766482926452,40.94858612727572],[39.51260664242025,41.102762763018575],[40.373432651538245,41.01367259374734],[41.554084100110714,41.53565623632761],[42.619548781104555,41.58317271581993],[43.58274580259271,41.09214325618257],[43.7526579119685,40.74020091405882],[43.65643639504096,40.25356395116617],[44.400008579288766,40.00500031184231],[44.793989699082005,39.713002631177034],[44.109225294782355,39.428136298168056],[44.4214026222576,38.28128123631453],[44.22575564960053,37.97158437758935],[44.77269900897775,37.17044464776845],[44.29345177590286,37.00151439060635],[43.94225874204736,37.256227525372935],[42.77912560402186,37.38526357680581],[42.34959109881177,37.22987254490411],[41.21208947120303,37.07435232192173],[40.673259311695716,37.09127635349736],[39.52258019385252,36.71605377862602],[38.69989139176593,36.71292735447233],[38.16772749202416,36.90121043552779],[37.06676110204583,36.62303620050062],[36.739494256341374,36.817520453431115],[36.68538903173183,36.259699205056506],[36.41755008316309,36.0406169703551],[36.14976281102659,35.82153473565367],[35.782084995269855,36.274995429014915],[36.160821567537056,36.650605577128374],[35.55093631362834,36.56544281671134],[34.714553256984374,36.795532131490916],[34.02689497247647,36.21996002862397],[32.5091581560641,36.1075637883892],[31.699595167779567,36.64427521417261],[30.62162479017107,36.677864895162315],[30.39109622571712,36.26298065850698],[29.699975620245567,36.144357408181],[28.73290286633539,36.67683136651644],[27.64118655773737,36.658822129862756],[27.048767937943296,37.65336090753601],[26.318218214633045,38.208133246405396],[26.804700148228733,38.98576019953356],[26.17078535330438,39.463612168936464],[27.280019972449395,40.42001373957831],[28.819977654747216,40.46001129817221],[29.24000369641558,41.21999074967269],[31.145933872204434,41.08762156835706],[32.34797936374579,41.73626414648464],[33.51328291192752,42.018960069337304],[35.16770389175187,42.04022492122544],[36.91312706884215,41.335358384764305]]],[[[27.192376743282406,40.690565700842455],[26.35800906749779,40.15199392349649],[26.04335127127254,40.61775360774317],[26.056942172965336,40.82412344010075],[26.29460208507569,40.93626129817417],[26.604195590936282,41.56211456966102],[26.117041863720825,41.82690460872456],[27.135739373490505,42.14148489030131],[27.996720411905414,42.00735871028777],[28.115524529744444,41.622886054036286],[28.988442824018787,41.29993419042819],[28.80643842948675,41.05496206314854],[27.61901736828412,40.99982330989312],[27.192376743282406,40.690565700842455]]]]}},{"type":"Feature","properties":{"abbrev":"Taiwan","name":"Taiwan","name_long":"Taiwan","iso_a2":"TW","iso_a3":"TWN","iso_n3":"158"},"geometry":{"type":"Polygon","coordinates":[[[121.77781782438993,24.3942735865194],[121.17563235889274,22.790857245367167],[120.74707970589621,21.970571397382113],[120.22008344938367,22.81486094816674],[120.1061885926124,23.556262722258236],[120.69467980355225,24.538450832613737],[121.49504438688876,25.295458889257386],[121.95124393116144,24.997595933527034],[121.77781782438993,24.3942735865194]]]}},{"type":"Feature","properties":{"abbrev":"Viet.","name":"Vietnam","name_long":"Vietnam","iso_a2":"VN","iso_a3":"VNM","iso_n3":"704"},"geometry":{"type":"Polygon","coordinates":[[[108.05018029178294,21.55237986906012],[106.7150679870901,20.69685069425202],[105.88168216351903,19.752050482659698],[105.66200564984631,19.05816518806057],[106.426816847766,18.004120998603227],[107.36195356651974,16.69745656988705],[108.26949507042963,16.07974233648615],[108.87710656131748,15.27669057867044],[109.33526981001721,13.426028347217722],[109.20013593957398,11.666859239137764],[108.36612999881545,11.008320624226272],[107.22092858279524,10.364483954301832],[106.40511274620343,9.53083974856932],[105.15826378786511,8.599759629750494],[104.79518517458237,9.241038316276502],[105.0762016133856,9.918490505406808],[104.33433475140347,10.48654368737523],[105.19991499229235,10.889309800658097],[106.24967003786946,10.961811835163587],[105.81052371625313,11.567614650921227],[107.49140302941089,12.337205918827946],[107.61454796756243,13.535530707244206],[107.38272749230109,14.202440904186972],[107.5645251811039,15.202173163305558],[107.3127059265456,15.90853831630318],[106.55600792849569,16.604283962464805],[105.92576216026403,17.48531545660896],[105.09459842328152,18.66697459561108],[103.8965320170267,19.265180975821806],[104.18338789267894,19.62466807706022],[104.8225736836971,19.886641750563882],[104.43500044150805,20.75873322192153],[103.20386111858645,20.766562201413745],[102.75489627483466,21.675137233969465],[102.17043582561358,22.464753119389304],[102.7069922221001,22.708795070887675],[103.50451460166056,22.70375661873921],[104.47685835166448,22.819150092046968],[105.32920942588663,23.352063300056912],[105.81124718630521,22.976892401617903],[106.72540327354845,22.79426788989842],[106.56727339073532,22.21820486092477],[107.04342003787262,21.811898912029914],[108.05018029178294,21.55237986906012]]]}},{"type":"Feature","properties":{"abbrev":"Uzb.","name":"Uzbekistan","name_long":"Uzbekistan","iso_a2":"UZ","iso_a3":"UZB","iso_n3":"860"},"geometry":{"type":"Polygon","coordinates":[[[66.51860680528867,37.36278432875879],[66.54615034370022,37.97468496352687],[65.2159989765074,38.40269501398429],[64.17022301621677,38.892406724598246],[63.51801476426103,39.36325653742564],[62.374260288345,40.05388621679039],[61.88271406438469,41.084856879229406],[61.54717898951356,41.266370347654615],[60.46595299667069,41.22032664648255],[60.08334069198167,41.425146185871405],[59.97642215356978,42.22308197689021],[58.62901085799146,42.75155101172305],[57.78652998233708,42.17055288346552],[56.932215203687804,41.826026109375604],[57.0963912290791,41.32231008561057],[55.96819135928291,41.30864166926936],[55.928917270741096,44.99585846615911],[58.50312706892847,45.586804307632825],[58.689989048095896,45.50001373959862],[60.23997195825833,44.78403677019473],[61.05831994003245,44.40581696225051],[62.01330040878625,43.50447663021565],[63.18578698105657,43.650074978198006],[64.90082441595928,43.72808055274258],[66.09801232286509,42.99766002051309],[66.02339155463562,41.99464630794398],[66.51064863471572,41.987644151368436],[66.7140470722165,41.1684435084615],[67.98585574735182,41.13599070898222],[68.25989586779562,40.6623245305949],[68.63248294462001,40.66868073176681],[69.07002729683532,41.38424428971237],[70.3889648782208,42.08130768489745],[70.96231489449914,42.26615428320549],[71.25924767444822,42.16771067968946],[70.42002241402821,41.51999827734314],[71.1578585142916,41.14358714452912],[71.87011478057047,41.392900092121266],[73.05541710804917,40.866033026689465],[71.77487511585656,40.14584442805378],[71.01419803252017,40.24436554621823],[70.60140669137269,40.21852733007229],[70.45815962105962,40.49649485937029],[70.66662234892505,40.96021332454141],[69.32949466337283,40.72782440852485],[69.0116329283455,40.08615814875666],[68.53641645698941,39.53345286717894],[67.70142866401736,39.58047842056453],[67.44221967964131,39.140143541005486],[68.17602501818592,38.901553453113905],[68.39203250516596,38.157025254868735],[67.82999962755952,37.14499400486468],[67.07578209825962,37.35614390720929],[66.51860680528867,37.36278432875879]]]}},{"type":"Feature","properties":{"abbrev":"Yem.","name":"Yemen","name_long":"Yemen","iso_a2":"YE","iso_a3":"YEM","iso_n3":"887"},"geometry":{"type":"Polygon","coordinates":[[[53.10857262554751,16.65105113368895],[52.38520592632588,16.382411200419654],[52.19172936382509,15.93843313238402],[52.1681649107,15.597420355689948],[51.172515089732485,15.175249742081492],[49.57457645040315,14.70876658778275],[48.67923058451416,14.00320241948566],[48.23894738138742,13.948089504446372],[47.938914015500785,14.007233181204427],[47.354453566279716,13.592219753468383],[46.717076450391744,13.39969920496502],[45.87759280781027,13.347764390511685],[45.62505008319987,13.290946153206763],[45.406458774605255,13.026905422411433],[45.14435591002086,12.95393830001531],[44.98953331887441,12.699586900274708],[44.49457645038285,12.721652736863346],[44.175112745954486,12.585950425664876],[43.48295861183713,12.636800035040084],[43.22287112811213,13.220950425667425],[43.25144819516953,13.767583726450852],[43.08794396339806,14.06263031662131],[42.89224531430872,14.802249253798749],[42.60487267433362,15.213335272680595],[42.80501549660005,15.261962795467255],[42.70243777850066,15.718885809791999],[42.823670688657415,15.911742255105265],[42.77933230975097,16.347891343648683],[43.21837527850275,16.66688996018641],[43.11579756040335,17.088440456607373],[43.380794305196105,17.57998668056767],[43.79151858905192,17.31997671149111],[44.06261315285508,17.410358791569593],[45.21665123879718,17.43332896572333],[45.39999922056875,17.333335069238558],[46.366658563020536,17.233315334537636],[46.74999433776165,17.283338120996177],[47.000004917189756,16.949999294497445],[47.46669477721763,17.116681626854884],[48.18334354024134,18.166669216377315],[49.11667158386487,18.616667588774945],[52.00000980002224,19.000003363516058],[52.78218427919205,17.349742336491232],[53.10857262554751,16.65105113368895]]]}},{"type":"Feature","properties":{"abbrev":"Ang.","name":"Angola","name_long":"Angola","iso_a2":"AO","iso_a3":"AGO","iso_n3":"024"},"geometry":{"type":"MultiPolygon","coordinates":[[[[16.326528354567046,-5.877470391466218],[16.57317996589614,-6.622644545115094],[16.86019087084523,-7.222297865429979],[17.08999596524717,-7.545688978712476],[17.472970004962292,-8.068551120641656],[18.13422163256905,-7.987677504104866],[18.464175652752687,-7.847014255406477],[19.01675174324967,-7.98824594486014],[19.166613396896082,-7.738183688999725],[19.417502475673217,-7.155428562044278],[20.037723016040218,-7.11636117923166],[20.09162153492062,-6.943090101756951],[20.601822950938327,-6.939317722199689],[20.51474816252653,-7.299605808138665],[21.728110792739756,-7.290872491081316],[21.746455926203367,-7.920084730667114],[21.94913089365204,-8.305900974158305],[21.801801385187957,-8.908706556842986],[21.875181919042404,-9.523707777548566],[22.208753289486424,-9.89479623783653],[22.155268182064333,-11.084801120653779],[22.402798292742432,-10.99307545333569],[22.83734541188477,-11.017621758674338],[23.456790805767465,-10.867863457892483],[23.912215203555746,-10.926826267137542],[24.017893507592614,-11.237298272347118],[23.90415368011824,-11.722281589406336],[24.079905226342902,-12.191296888887308],[23.930922072045377,-12.565847670138822],[24.016136508894704,-12.911046237848552],[21.933886346125945,-12.898437188369357],[21.887842644953878,-16.080310153876894],[22.56247846852429,-16.898451429921835],[23.215048455506093,-17.523116143465952],[21.377176141045595,-17.93063648851971],[18.95618696460363,-17.789094740472237],[18.26330936043422,-17.309950860262006],[14.209706658595051,-17.353100681225712],[14.058501417709039,-17.423380629142656],[13.462362094789967,-16.97121184658874],[12.814081251688407,-16.941342868724078],[12.215461460019384,-17.111668389558062],[11.734198846085148,-17.3018893368245],[11.64009606288161,-16.67314218512921],[11.778537224991567,-15.79381601325069],[12.123580763404448,-14.878316338767931],[12.175618930722266,-14.449143568583892],[12.500095249083017,-13.547699883684402],[12.738478631245442,-13.137905775609935],[13.312913852601838,-12.483630466362513],[13.633721144269828,-12.038644707897191],[13.738727654686926,-11.297863050993143],[13.686379428775297,-10.731075941615842],[13.38732791510216,-10.373578383020728],[13.120987583069875,-9.766897067914115],[12.875369500386569,-9.166933689005488],[12.929061313537801,-8.959091078327575],[13.236432732809874,-8.562629489784342],[12.933040398824316,-7.596538588087753],[12.72829837408392,-6.927122084178805],[12.227347039446443,-6.294447523629372],[12.322431674863566,-6.100092461779653],[12.735171339578699,-5.965682061388478],[13.02486941900699,-5.984388929878108],[13.375597364971895,-5.864241224799557],[16.326528354567046,-5.877470391466218]]],[[[12.436688266660923,-5.684303887559224],[12.18233686692028,-5.789930515163803],[11.914963006242116,-5.037986748884734],[12.318607618873926,-4.606230157086158],[12.62075971848455,-4.438023369976121],[12.995517205465205,-4.781103203961919],[12.631611769265845,-4.991271254092936],[12.468004184629763,-5.248361504744992],[12.436688266660923,-5.684303887559224]]]]}},{"type":"Feature","properties":{"abbrev":"Bur.","name":"Burundi","name_long":"Burundi","iso_a2":"BI","iso_a3":"BDI","iso_n3":"108"},"geometry":{"type":"Polygon","coordinates":[[[29.339997592900346,-4.499983412294092],[29.276383904749053,-3.293907159034063],[29.024926385216787,-2.839257907730158],[29.632176141078588,-2.917857761246097],[29.938359002407942,-2.348486830254238],[30.469696079232985,-2.413857517103458],[30.527677036264464,-2.807631931167535],[30.7430127296247,-3.034284763199686],[30.75226281100495,-3.35932952231557],[30.505559523243566,-3.568567396665365],[30.116332635221173,-4.090137627787243],[29.753512404099922,-4.452389418153281],[29.339997592900346,-4.499983412294092]]]}},{"type":"Feature","properties":{"abbrev":"B.F.","name":"Burkina Faso","name_long":"Burkina Faso","iso_a2":"BF","iso_a3":"BFA","iso_n3":"854"},"geometry":{"type":"Polygon","coordinates":[[[-2.827496303712707,9.642460842319778],[-3.511898972986273,9.90032623945622],[-3.980449184576685,9.8623440617217],[-4.330246954760383,9.61083486575714],[-4.779883592131966,9.821984768101743],[-4.954653286143099,10.152713934769736],[-5.404341599946974,10.370736802609146],[-5.470564947929006,10.951269842976048],[-5.197842576508648,11.37514577885014],[-5.220941941743121,11.713858954307227],[-4.427166103523803,12.542645575404295],[-4.28040503581488,13.228443508349741],[-4.006390753587226,13.472485459848116],[-3.522802700199861,13.337661647998615],[-3.10370683431276,13.541266791228594],[-2.967694464520577,13.79815033615151],[-2.191824510090385,14.246417548067356],[-2.001035122068771,14.559008287000891],[-1.066363491205664,14.973815009007765],[-0.515854458000348,15.116157741755726],[-0.26625729003058,14.924308986872148],[0.374892205414682,14.928908189346132],[0.295646396495101,14.444234930880654],[0.429927605805517,13.988733018443924],[0.993045688490071,13.335749620003824],[1.024103224297477,12.851825669806574],[2.177107781593776,12.625017808477534],[2.154473504249921,11.940150051313337],[1.935985548519881,11.641150214072553],[1.447178175471066,11.547719224488858],[1.243469679376489,11.110510769083461],[0.899563022474069,10.99733938236426],[0.023802524423701,11.018681748900804],[-0.438701544588582,11.09834096927872],[-0.761575893548183,10.936929633015055],[-1.203357713211431,11.009819240762738],[-2.940409308270461,10.962690334512558],[-2.963896246747112,10.395334784380083],[-2.827496303712707,9.642460842319778]]]}},{"type":"Feature","properties":{"abbrev":"Bwa.","name":"Botswana","name_long":"Botswana","iso_a2":"BW","iso_a3":"BWA","iso_n3":"072"},"geometry":{"type":"Polygon","coordinates":[[[25.649163445750162,-18.53602589281899],[25.85039147309473,-18.714412937090536],[26.164790887158485,-19.29308562589494],[27.296504754350508,-20.391519870691],[27.724747348753255,-20.499058526290387],[27.72722781750326,-20.851801853114715],[28.021370070108617,-21.485975030200585],[28.794656202924212,-21.63945403410745],[29.43218834810904,-22.091312758067588],[28.01723595552525,-22.827753594659075],[27.119409620886245,-23.574323011979775],[26.786406691197413,-24.240690606383485],[26.4857532081233,-24.616326592713104],[25.94165205252216,-24.69637338633322],[25.76584882986521,-25.174845472923675],[25.66466637543772,-25.486816094669713],[25.025170525825786,-25.7196700985769],[24.211266717228792,-25.670215752873574],[23.73356977712271,-25.390129489851613],[23.312096795350186,-25.26868987396572],[22.8242712745149,-25.500458672794768],[22.57953169118059,-25.979447523708146],[22.105968865657868,-26.280256036079138],[21.60589603036939,-26.726533705351756],[20.88960900237174,-26.828542982695915],[20.66647016773544,-26.477453301704923],[20.758609246511835,-25.86813648855145],[20.165725538827186,-24.917961928000768],[19.895767856534434,-24.767790215760588],[19.89545779794068,-21.84915699634787],[20.881134067475866,-21.814327080983148],[20.910641310314535,-18.252218926672022],[21.655040317478978,-18.219146010005225],[23.1968583513393,-17.869038181227786],[23.579005568137717,-18.28126108162006],[24.217364536239213,-17.88934701911849],[24.520705193792537,-17.887124932529936],[25.08444339366457,-17.661815687737374],[25.264225701608012,-17.736539808831417],[25.649163445750162,-18.53602589281899]]]}},{"type":"Feature","properties":{"abbrev":"Benin","name":"Benin","name_long":"Benin","iso_a2":"BJ","iso_a3":"BEN","iso_n3":"204"},"geometry":{"type":"Polygon","coordinates":[[[2.691701694356254,6.258817246928629],[1.865240512712319,6.142157701029731],[1.618950636409238,6.832038072126237],[1.664477573258381,9.12859039960938],[1.46304284018467,9.334624335157088],[1.425060662450136,9.825395412633],[1.077795037448738,10.175606594275024],[0.772335646171484,10.470808213742359],[0.899563022474069,10.99733938236426],[1.243469679376489,11.110510769083461],[1.447178175471066,11.547719224488858],[1.935985548519881,11.641150214072553],[2.154473504249921,11.940150051313337],[2.49016360841793,12.233052069543675],[2.848643019226671,12.235635891158267],[3.611180454125559,11.660167141155966],[3.572216424177469,11.327939357951518],[3.797112257511714,10.734745591673105],[3.600070021182801,10.332186184119408],[3.705438266625919,10.063210354040208],[3.220351596702101,9.4441525333997],[2.912308383810256,9.13760793704432],[2.723792758809509,8.50684540448971],[2.74906253420022,7.870734361192888],[2.691701694356254,6.258817246928629]]]}},{"type":"Feature","properties":{"abbrev":"C.A.R.","name":"Central African Rep.","name_long":"Central African Republic","iso_a2":"CF","iso_a3":"CAF","iso_n3":"140"},"geometry":{"type":"Polygon","coordinates":[[[15.279460483469109,7.421924546737969],[16.10623172370677,7.497087917506505],[16.290561557691888,7.754307359239306],[16.456184523187346,7.734773667832968],[16.705988396886255,7.508327541529979],[17.964929640380888,7.890914008002866],[18.38955488452322,8.281303615751824],[18.911021762780507,8.630894680206353],[18.81200971850927,8.982914536978598],[19.09400800952602,9.07484691002584],[20.05968549976427,9.012706000194854],[21.000868361096167,9.475985215691509],[21.723821648859452,10.567055568885976],[22.231129184668788,10.97188873946051],[22.864165480244225,11.142395127807546],[22.97754357269261,10.71446259199854],[23.554304233502194,10.089255275915308],[23.557249790142826,9.681218166538684],[23.394779087017184,9.265067857292223],[23.459012892355986,8.954285793488893],[23.805813429466752,8.666318874542426],[24.567369012152085,8.229187933785468],[25.11493248871679,7.825104071479174],[25.124130893664727,7.500085150579436],[25.79664798351118,6.979315904158071],[26.213418409945117,6.546603298362072],[26.46590945812323,5.94671743410187],[27.21340905122517,5.550953477394557],[27.37422610851749,5.233944403500061],[27.04406538260471,5.127852688004836],[26.402760857862543,5.150874538590871],[25.650455356557472,5.256087754737123],[25.278798455514302,5.170408229997192],[25.12883344900328,4.927244777847789],[24.805028924262416,4.89724660890235],[24.410531040146253,5.108784084489129],[23.29721398285014,4.609693101414223],[22.841479526468106,4.710126247573484],[22.70412356943629,4.633050848810157],[22.405123732195538,4.029160061047321],[21.659122755630023,4.22434194581372],[20.927591180106276,4.322785549329737],[20.290679152108936,4.691677761245288],[19.467783644293146,5.03152781821278],[18.93231245288476,4.709506130385975],[18.54298221199778,4.201785183118318],[18.45306521980993,3.504385891123349],[17.809900343505262,3.56019643799857],[17.133042433346304,3.728196519379452],[16.537058139724135,3.198254706226279],[16.012852410555354,2.267639675298085],[15.907380812247652,2.557389431158612],[15.86273237474748,3.013537298998983],[15.405395948964383,3.33530060466434],[15.036219516671252,3.851367295747124],[14.950953403389661,4.210389309094921],[14.478372430080467,4.732605495620447],[14.558935988023505,5.03059764243153],[14.459407179429348,5.4517605656103],[14.536560092841112,6.22695872642069],[14.776545444404576,6.408498033062045],[15.279460483469109,7.421924546737969]]]}},{"type":"Feature","properties":{"abbrev":"I.C.","name":"Côte d'Ivoire","name_long":"Côte d'Ivoire","iso_a2":"CI","iso_a3":"CIV","iso_n3":"384"},"geometry":{"type":"Polygon","coordinates":[[[-2.856125047202397,4.994475816259509],[-3.311084357100071,4.984295559098015],[-4.008819545904942,5.179813340674315],[-4.649917364917911,5.168263658057086],[-5.834496222344526,4.993700669775137],[-6.528769090185847,4.705087795425015],[-7.518941209330436,4.338288479017308],[-7.71215938966975,4.364565944837722],[-7.63536821128403,5.188159084489456],[-7.539715135111762,5.313345241716519],[-7.570152553731688,5.707352199725904],[-7.993692592795881,6.126189683451543],[-8.311347622094019,6.193033148621083],[-8.60288021486862,6.46756419517166],[-8.385451626000574,6.911800645368742],[-8.48544552248535,7.39520783124307],[-8.439298468448698,7.686042792181738],[-8.280703497744938,7.687179673692156],[-8.221792364932199,8.123328762235573],[-8.299048631208564,8.316443589710303],[-8.20349890790088,8.455453192575447],[-7.832100389019188,8.575704250518626],[-8.079113735374348,9.376223863152035],[-8.30961646161225,9.789531968622441],[-8.229337124046822,10.1290202905639],[-8.029943610048619,10.206534939001713],[-7.899589809592372,10.297382106970828],[-7.622759161804809,10.147236232946796],[-6.850506557635057,10.138993841996239],[-6.666460944027548,10.430810655148447],[-6.493965013037267,10.411302801958271],[-6.205222947606431,10.524060777219134],[-6.050452032892267,10.096360785355444],[-5.816926235365287,10.222554633012194],[-5.404341599946974,10.370736802609146],[-4.954653286143099,10.152713934769736],[-4.779883592131966,9.821984768101743],[-4.330246954760383,9.61083486575714],[-3.980449184576685,9.8623440617217],[-3.511898972986273,9.90032623945622],[-2.827496303712707,9.642460842319778],[-2.562189500326241,8.219627793811483],[-2.983584967450327,7.379704901555512],[-3.244370083011262,6.250471503113502],[-2.81070146321784,5.38905121502411],[-2.856125047202397,4.994475816259509]]]}},{"type":"Feature","properties":{"abbrev":"Cam.","name":"Cameroon","name_long":"Cameroon","iso_a2":"CM","iso_a3":"CMR","iso_n3":"120"},"geometry":{"type":"Polygon","coordinates":[[[13.075822381246752,2.267097072759015],[12.951333855855609,2.32161570882694],[12.359380323952221,2.19281220133945],[11.75166548019979,2.326757513839993],[11.276449008843713,2.261050930180872],[9.649158155972628,2.283866075037736],[9.795195753629457,3.073404445809117],[9.404366896206,3.734526882335202],[8.948115675501072,3.904128933117136],[8.744923943729418,4.35221527751996],[8.488815545290889,4.495617377129918],[8.500287713259695,4.771982937026849],[8.757532993208628,5.479665839047911],[9.233162876023044,6.444490668153334],[9.522705926154401,6.453482367372117],[10.118276808318257,7.038769639509879],[10.497375115611417,7.055357774275564],[11.05878787603035,6.644426784690594],[11.74577436691851,6.981382961449753],[11.839308709366803,7.397042344589436],[12.063946160539558,7.799808457872302],[12.218872104550599,8.305824082874324],[12.753671502339214,8.717762762888995],[12.955467970438974,9.417771714714704],[13.167599724997103,9.640626328973411],[13.308676385153918,10.160362046748928],[13.572949659894562,10.798565985553566],[14.415378859116686,11.572368882692075],[14.468192172918975,11.904751695193411],[14.577177768622533,12.085360826053503],[14.181336297266792,12.483656927943116],[14.213530714584634,12.802035427293347],[14.495787387762844,12.85939626713733],[14.893385857816526,12.219047756392584],[14.9601518083376,11.555574042197224],[14.923564894274959,10.891325181517473],[15.467872755605269,9.98233673750343],[14.909353875394716,9.99212942142273],[14.62720055508106,9.920919297724538],[14.171466098699028,10.021378282099931],[13.954218377344006,9.549494940626685],[14.544466586981768,8.965861314322268],[14.97999555833769,8.796104234243472],[15.120865512765334,8.382150173369423],[15.436091749745769,7.692812404811973],[15.279460483469109,7.421924546737969],[14.776545444404576,6.408498033062045],[14.536560092841112,6.22695872642069],[14.459407179429348,5.4517605656103],[14.558935988023505,5.03059764243153],[14.478372430080467,4.732605495620447],[14.950953403389661,4.210389309094921],[15.036219516671252,3.851367295747124],[15.405395948964383,3.33530060466434],[15.86273237474748,3.013537298998983],[15.907380812247652,2.557389431158612],[16.012852410555354,2.267639675298085],[15.940918816805064,1.727672634280295],[15.146341993885244,1.964014797367184],[14.33781253424658,2.227874660649491],[13.075822381246752,2.267097072759015]]]}},{"type":"Feature","properties":{"abbrev":"D.R.C.","name":"Dem. Rep. Congo","name_long":"Democratic Republic of the Congo","iso_a2":"CD","iso_a3":"COD","iso_n3":"180"},"geometry":{"type":"Polygon","coordinates":[[[30.833859897593808,3.509165961110341],[30.773346795380043,2.339883327642127],[31.174149204235814,2.204465236821264],[30.852670118948055,1.849396470543809],[30.468507521290295,1.58380544677972],[30.086153598762703,1.062312730306289],[29.875778842902495,0.597379868976304],[29.819503208136638,-0.205310153813372],[29.58783776217217,-0.587405694179481],[29.579466180140884,-1.341313164885626],[29.29188683443661,-1.620055840667987],[29.25483483248334,-2.215109958508911],[29.117478875451553,-2.292211195488385],[29.024926385216787,-2.839257907730158],[29.276383904749053,-3.293907159034063],[29.339997592900346,-4.499983412294092],[29.519986606572925,-5.419978936386314],[29.419992710088167,-5.939998874539433],[29.62003217949001,-6.520015150583426],[30.199996779101696,-7.079980970898163],[30.740015496551788,-8.340007419470915],[30.346086053190813,-8.238256524288218],[29.002912225060467,-8.407031752153472],[28.7348665707625,-8.526559340044578],[28.449871046672826,-9.164918308146085],[28.67368167492893,-9.605924981324932],[28.49606977714177,-10.789883721564044],[28.372253045370428,-11.793646742401393],[28.642417433392353,-11.971568698782315],[29.34154788586909,-12.360743910372413],[29.61600141777123,-12.178894545137311],[29.69961388521949,-13.257226657771831],[28.934285922976837,-13.248958428605135],[28.523561639121027,-12.698604424696683],[28.155108676879987,-12.272480564017897],[27.38879886242378,-12.132747491100666],[27.164419793412463,-11.608748467661075],[26.553087599399618,-11.924439792532127],[25.752309604604733,-11.784965101776358],[25.418118116973204,-11.330935967659961],[24.78316979340295,-11.238693536018964],[24.31451622894795,-11.26282642989927],[24.25715538910399,-10.951992689663657],[23.912215203555718,-10.926826267137514],[23.45679080576744,-10.867863457892483],[22.83734541188474,-11.01762175867433],[22.402798292742375,-10.99307545333569],[22.155268182064308,-11.084801120653772],[22.208753289486395,-9.894796237836509],[21.875181919042348,-9.523707777548566],[21.8018013851879,-8.908706556842978],[21.949130893652043,-8.305900974158277],[21.74645592620331,-7.920084730667149],[21.7281107927397,-7.290872491081302],[20.514748162526498,-7.299605808138629],[20.6018229509383,-6.939317722199682],[20.091621534920648,-6.943090101756993],[20.037723016040218,-7.116361179231646],[19.417502475673157,-7.155428562044298],[19.16661339689611,-7.738183688999754],[19.01675174324967,-7.988245944860132],[18.464175652752687,-7.847014255406444],[18.13422163256905,-7.987677504104922],[17.472970004962235,-8.0685511206417],[17.08999596524717,-7.545688978712526],[16.8601908708452,-7.222297865429986],[16.57317996589614,-6.622644545115087],[16.326528354567046,-5.877470391466267],[13.375597364971895,-5.864241224799549],[13.02486941900696,-5.984388929878157],[12.735171339578699,-5.965682061388499],[12.32243167486351,-6.10009246177966],[12.182336866920252,-5.789930515163839],[12.436688266660868,-5.684303887559246],[12.468004184629736,-5.248361504745005],[12.63161176926579,-4.991271254092936],[12.995517205465177,-4.781103203961884],[13.258240187237048,-4.882957452009165],[13.600234816144678,-4.50013844159097],[14.144956088933299,-4.510008640158715],[14.209034864975223,-4.793092136253598],[14.58260379401318,-4.97023894615014],[15.170991652088444,-4.343507175314301],[15.75354007331475,-3.855164890156096],[16.0062895036543,-3.535132744972529],[15.972803175529151,-2.712392266453612],[16.407091912510054,-1.740927015798682],[16.865306837642123,-1.225816338713287],[17.523716261472856,-0.743830254726987],[17.638644646889986,-0.424831638189247],[17.66355268725468,-0.058083998213817],[17.826540154703252,0.288923244626105],[17.774191928791566,0.855658677571085],[17.898835483479587,1.741831976728278],[18.094275750407434,2.365721543788055],[18.39379235197114,2.90044342692822],[18.45306521980993,3.504385891123349],[18.54298221199778,4.201785183118318],[18.93231245288476,4.709506130385975],[19.467783644293146,5.03152781821278],[20.290679152108936,4.691677761245288],[20.927591180106276,4.322785549329737],[21.659122755630023,4.22434194581372],[22.405123732195538,4.029160061047321],[22.70412356943629,4.633050848810157],[22.841479526468106,4.710126247573484],[23.29721398285014,4.609693101414223],[24.410531040146253,5.108784084489129],[24.805028924262416,4.89724660890235],[25.12883344900328,4.927244777847789],[25.278798455514302,5.170408229997192],[25.650455356557472,5.256087754737123],[26.402760857862543,5.150874538590871],[27.04406538260471,5.127852688004836],[27.37422610851749,5.233944403500061],[27.979977247842807,4.408413397637375],[28.428993768026913,4.287154649264494],[28.696677687298802,4.455077215996937],[29.1590784034465,4.389267279473231],[29.71599531425602,4.600804755060025],[29.953500197069474,4.173699042167683],[30.833859897593808,3.509165961110341]]]}},{"type":"Feature","properties":{"abbrev":"Rep. Congo","name":"Congo","name_long":"Republic of Congo","iso_a2":"CG","iso_a3":"COG","iso_n3":"178"},"geometry":{"type":"Polygon","coordinates":[[[12.995517205465177,-4.781103203961884],[12.620759718484491,-4.438023369976136],[12.318607618873926,-4.606230157086188],[11.91496300624209,-5.037986748884791],[11.093772820691925,-3.978826592630547],[11.855121697648114,-3.426870619321051],[11.478038771214303,-2.765618991714241],[11.820963575903193,-2.514161472181982],[12.495702752338161,-2.391688327650243],[12.575284458067642,-1.948511244315135],[13.109618767965628,-2.428740329603514],[13.99240726080771,-2.4708049454891],[14.299210239324564,-1.998275648612214],[14.425455763413593,-1.333406670744971],[14.316418491277743,-0.552627455247048],[13.843320753645655,0.038757635901149],[14.276265903386957,1.196929836426619],[14.026668735417218,1.395677395021153],[13.282631463278818,1.31418366129688],[13.003113641012078,1.83089630778332],[13.075822381246752,2.267097072759015],[14.33781253424658,2.227874660649491],[15.146341993885244,1.964014797367184],[15.940918816805064,1.727672634280295],[16.012852410555354,2.267639675298085],[16.537058139724135,3.198254706226279],[17.133042433346304,3.728196519379452],[17.809900343505262,3.56019643799857],[18.45306521980993,3.504385891123349],[18.39379235197114,2.90044342692822],[18.094275750407434,2.365721543788055],[17.898835483479587,1.741831976728278],[17.774191928791566,0.855658677571085],[17.826540154703252,0.288923244626105],[17.66355268725468,-0.058083998213817],[17.638644646889986,-0.424831638189247],[17.523716261472856,-0.743830254726987],[16.865306837642123,-1.225816338713287],[16.407091912510054,-1.740927015798682],[15.972803175529151,-2.712392266453612],[16.0062895036543,-3.535132744972529],[15.75354007331475,-3.855164890156096],[15.170991652088444,-4.343507175314301],[14.58260379401318,-4.97023894615014],[14.209034864975223,-4.793092136253598],[14.144956088933299,-4.510008640158715],[13.600234816144678,-4.50013844159097],[13.258240187237048,-4.882957452009165],[12.995517205465177,-4.781103203961884]]]}},{"type":"Feature","properties":{"abbrev":"Dji.","name":"Djibouti","name_long":"Djibouti","iso_a2":"DJ","iso_a3":"DJI","iso_n3":"262"},"geometry":{"type":"Polygon","coordinates":[[[43.08122602720015,12.699638576707116],[43.31785241066467,12.390148423711025],[43.286381463398925,11.974928290245884],[42.715873650896526,11.735640570518342],[43.14530480324214,11.462039699748857],[42.77685184100096,10.92687856693442],[42.55493000000013,11.105110000000195],[42.31414000000012,11.0342],[41.755570000000205,11.050910000000101],[41.73959000000019,11.355110000000138],[41.66176000000013,11.6312],[42.000000000000114,12.100000000000136],[42.35156000000012,12.542230000000131],[42.77964236834475,12.455415757695675],[43.08122602720015,12.699638576707116]]]}},{"type":"Feature","properties":{"abbrev":"Alg.","name":"Algeria","name_long":"Algeria","iso_a2":"DZ","iso_a3":"DZA","iso_n3":"012"},"geometry":{"type":"Polygon","coordinates":[[[11.999505649471613,23.47166840259645],[8.572893100629784,21.565660712159143],[5.677565952180686,19.601206976799716],[4.267419467800039,19.155265204337],[3.158133172222705,19.057364203360038],[3.1466610042539,19.69357859952144],[2.683588494486429,19.856230170160114],[2.06099083823392,20.142233384679486],[1.823227573259032,20.610809434486043],[-1.550054897457613,22.792665920497384],[-4.92333736817423,24.974574082941],[-8.68439978680905,27.395744126896005],[-8.665124477564191,27.589479071558227],[-8.665589565454809,27.656425889592356],[-8.674116176782974,28.84128896739658],[-7.059227667661928,29.57922842052453],[-6.060632290053774,29.731699734001694],[-5.242129278982787,30.000443020135588],[-4.859646165374471,30.501187649043842],[-3.690441046554696,30.896951605751152],[-3.647497931320146,31.63729401298067],[-3.068980271812648,31.724497992473214],[-2.616604783529567,32.09434621838615],[-1.30789913573787,32.2628889023061],[-1.124551153966308,32.65152151135713],[-1.388049282222568,32.86401500094131],[-1.733454555661467,33.919712836231994],[-1.792985805661687,34.527918606091205],[-2.169913702798624,35.16839630791668],[-1.208602871089056,35.7148487411871],[-0.127454392894606,35.888662421200806],[0.503876580415209,36.30127289483528],[1.466918572606545,36.605647081034405],[3.161698846050825,36.78390493422522],[4.81575809084913,36.86503693292346],[5.320120070017793,36.71651886651662],[6.261819695672613,37.11065501560674],[7.33038496260397,37.118380642234364],[7.737078484741004,36.885707505840216],[8.420964389691676,36.94642731378316],[8.217824334352315,36.433176988260286],[8.376367628623768,35.47987600355594],[8.140981479534304,34.65514598239379],[7.524481642292244,34.09737641045146],[7.612641635782182,33.34411489514896],[8.430472853233368,32.74833730725595],[8.439102817426118,32.50628489840082],[9.055602654668148,32.10269196220129],[9.482139926805274,30.307556057246188],[9.805634392952411,29.42463837332339],[9.859997999723447,28.959989732371014],[9.683884718472767,28.1441738957792],[9.756128370816782,27.68825857188415],[9.629056023811074,27.14095347748092],[9.716285841519749,26.512206325785698],[9.319410841518163,26.094324856057455],[9.910692579801776,25.36545461679674],[9.94826134607797,24.936953640232517],[10.303846876678362,24.379313259370917],[10.771363559622927,24.56253205006175],[11.560669386449005,24.097909247325518],[11.999505649471613,23.47166840259645]]]}},{"type":"Feature","properties":{"abbrev":"Egypt","name":"Egypt","name_long":"Egypt","iso_a2":"EG","iso_a3":"EGY","iso_n3":"818"},"geometry":{"type":"Polygon","coordinates":[[[34.9226,29.50133],[34.64174,29.09942],[34.42655,28.34399],[34.15451,27.8233],[33.92136,27.6487],[33.58811,27.97136],[33.13676,28.41765],[32.42323,29.85108],[32.32046,29.76043],[32.73482,28.70523],[33.34876,27.69989],[34.10455,26.14227],[34.47387,25.59856],[34.79507,25.03375],[35.69241,23.92671],[35.49372,23.75237],[35.52598,23.10244],[36.69069,22.20485],[36.86623,22],[32.9,22],[29.02,22],[25,22],[25,25.682499996361],[25,29.23865452953346],[24.70007,30.04419],[24.95762,30.6616],[24.80287,31.08929],[25.16482,31.56915],[26.49533,31.58568],[27.45762,31.32126],[28.45048,31.02577],[28.91353,30.87005],[29.68342,31.18686],[30.09503,31.4734],[30.97693,31.55586],[31.68796,31.4296],[31.96041,30.9336],[32.19247,31.26034],[32.99392,31.02407],[33.7734,30.96746],[34.26544,31.21936],[34.9226,29.50133]]]}},{"type":"Feature","properties":{"abbrev":"Gabon","name":"Gabon","name_long":"Gabon","iso_a2":"GA","iso_a3":"GAB","iso_n3":"266"},"geometry":{"type":"Polygon","coordinates":[[[11.093772820691925,-3.978826592630547],[10.06613528813574,-2.969482517105681],[9.40524539555497,-2.144313246269043],[8.79799563969317,-1.111301364754496],[8.830086704146423,-0.779073581550037],[9.048419630579588,-0.459351494960217],[9.29135053878369,0.268666083167687],[9.492888624721985,1.010119533691494],[9.830284051155644,1.067893784993799],[11.285078973036462,1.057661851400013],[11.276449008843713,2.261050930180872],[11.75166548019979,2.326757513839993],[12.359380323952221,2.19281220133945],[12.951333855855609,2.32161570882694],[13.075822381246752,2.267097072759015],[13.003113641012078,1.83089630778332],[13.282631463278818,1.31418366129688],[14.026668735417218,1.395677395021153],[14.276265903386957,1.196929836426619],[13.843320753645655,0.038757635901149],[14.316418491277743,-0.552627455247048],[14.425455763413593,-1.333406670744971],[14.299210239324564,-1.998275648612214],[13.99240726080771,-2.4708049454891],[13.109618767965628,-2.428740329603514],[12.575284458067642,-1.948511244315135],[12.495702752338161,-2.391688327650243],[11.820963575903193,-2.514161472181982],[11.478038771214303,-2.765618991714241],[11.855121697648114,-3.426870619321051],[11.093772820691925,-3.978826592630547]]]}},{"type":"Feature","properties":{"abbrev":"Erit.","name":"Eritrea","name_long":"Eritrea","iso_a2":"ER","iso_a3":"ERI","iso_n3":"232"},"geometry":{"type":"Polygon","coordinates":[[[42.35156000000012,12.542230000000131],[42.00975,12.86582],[41.59856,13.452090000000112],[41.15519371924984,13.773319810435224],[40.8966,14.118640000000141],[40.026218702969175,14.519579169162284],[39.34061,14.53155],[39.0994,14.74064],[38.51295,14.50547],[37.90607000000011,14.959430000000168],[37.59377,14.2131],[36.42951,14.42211],[36.32318891779812,14.82248057704106],[36.75386030451858,16.29187409104429],[36.852530000000115,16.95655],[37.16747,17.263140000000135],[37.90400000000011,17.42754],[38.410089959473225,17.99830739997031],[38.990622999840014,16.84062612555169],[39.26611006038803,15.922723496967249],[39.814293654140215,15.435647284400318],[41.17927493669765,14.491079616753211],[41.73495161313235,13.921036892141558],[42.27683068214486,13.343992010954423],[42.58957645037526,13.000421250861905],[43.08122602720015,12.699638576707116],[42.77964236834475,12.455415757695675],[42.35156000000012,12.542230000000131]]]}},{"type":"Feature","properties":{"abbrev":"Eth.","name":"Ethiopia","name_long":"Ethiopia","iso_a2":"ET","iso_a3":"ETH","iso_n3":"231"},"geometry":{"type":"Polygon","coordinates":[[[37.90607000000011,14.959430000000168],[38.51295,14.50547],[39.0994,14.74064],[39.34061,14.53155],[40.02625000000012,14.51959],[40.8966,14.118640000000141],[41.1552,13.77333],[41.59856,13.452090000000112],[42.00975,12.86582],[42.35156000000012,12.542230000000131],[42.000000000000114,12.100000000000136],[41.66176000000013,11.6312],[41.73959000000019,11.355110000000138],[41.755570000000205,11.050910000000101],[42.31414000000012,11.0342],[42.55493000000013,11.105110000000195],[42.77685184100096,10.92687856693442],[42.55876,10.57258000000013],[42.92812,10.021940000000143],[43.29699000000011,9.540480000000173],[43.67875,9.18358000000012],[46.94834,7.99688],[47.78942,8.003],[44.9636,5.001620000000116],[43.66087,4.95755],[42.76967000000013,4.252590000000225],[42.12861,4.234130000000164],[41.85508309264412,3.918911920483765],[41.17180000000013,3.91909],[40.76848000000012,4.257020000000125],[39.85494000000011,3.838790000000131],[39.55938425876593,3.422060000000215],[38.89251,3.50074],[38.67114,3.61607],[38.436970000000144,3.58851],[38.12091500000014,3.598605],[36.85509323800824,4.447864127672858],[36.15907863285565,4.447864127672858],[35.81744766235362,4.776965663462022],[35.81744766235362,5.338232082790853],[35.298007118233095,5.506],[34.70702,6.59422000000012],[34.25032,6.82607],[34.07510000000019,7.22595],[33.568290000000104,7.71334],[32.954180000000235,7.784970000000102],[33.29480000000012,8.35458],[33.82550000000015,8.37916],[33.97498,8.684560000000147],[33.96162,9.58358],[34.25745,10.63009],[34.73115000000013,10.910170000000107],[34.83163000000013,11.318960000000118],[35.26049,12.08286],[35.863630000000164,12.57828],[36.27022,13.563330000000121],[36.42951,14.42211],[37.59377,14.2131],[37.90607000000011,14.959430000000168]]]}},{"type":"Feature","properties":{"abbrev":"Ghana","name":"Ghana","name_long":"Ghana","iso_a2":"GH","iso_a3":"GHA","iso_n3":"288"},"geometry":{"type":"Polygon","coordinates":[[[1.060121697604927,5.928837388528876],[-0.507637905265938,5.343472601742675],[-1.063624640294194,5.000547797053812],[-1.964706590167594,4.710462144383371],[-2.856125047202397,4.994475816259509],[-2.81070146321784,5.38905121502411],[-3.244370083011262,6.250471503113502],[-2.983584967450327,7.379704901555512],[-2.562189500326241,8.219627793811483],[-2.827496303712707,9.642460842319778],[-2.963896246747112,10.395334784380083],[-2.940409308270461,10.962690334512558],[-1.203357713211431,11.009819240762738],[-0.761575893548183,10.936929633015055],[-0.438701544588582,11.09834096927872],[0.023802524423701,11.018681748900804],[-0.049784715159944,10.706917832883931],[0.367579990245389,10.19121287682718],[0.365900506195885,9.465003973829482],[0.461191847342121,8.677222601756014],[0.712029249686878,8.31246450442383],[0.490957472342245,7.411744289576475],[0.570384148774849,6.914358628767189],[0.836931186536333,6.279978745952149],[1.060121697604927,5.928837388528876]]]}},{"type":"Feature","properties":{"abbrev":"Gin.","name":"Guinea","name_long":"Guinea","iso_a2":"GN","iso_a3":"GIN","iso_n3":"324"},"geometry":{"type":"Polygon","coordinates":[[[-8.439298468448698,7.686042792181738],[-8.722123582382123,7.71167430259851],[-8.926064622422004,7.309037380396375],[-9.208786383490844,7.313920803247953],[-9.40334815106975,7.526905218938907],[-9.337279832384581,7.928534450711353],[-9.755342169625834,8.541055202666925],[-10.016566534861255,8.42850393313523],[-10.23009355309128,8.406205552601293],[-10.505477260774668,8.348896389189605],[-10.494315151399633,8.715540676300435],[-10.654770473665891,8.977178452994194],[-10.622395188835041,9.267910061068278],[-10.8391519840833,9.688246161330369],[-11.117481248407328,10.045872911006285],[-11.917277390988659,10.046983954300558],[-12.150338100625005,9.858571682164381],[-12.425928514037565,9.835834051955956],[-12.59671912276221,9.62018830000197],[-12.71195756677308,9.342711696810767],[-13.246550258832515,8.903048610871508],[-13.685153977909792,9.49474376061346],[-14.074044969122282,9.886166897008252],[-14.33007585291237,10.015719712763966],[-14.579698859098258,10.214467271358515],[-14.693231980843505,10.656300767454042],[-14.839553798877944,10.876571560098139],[-15.130311245168171,11.040411688679526],[-14.685687221728898,11.527823798056488],[-14.382191534878729,11.509271958863692],[-14.121406419317779,11.677117010947697],[-13.900799729863776,11.678718980348748],[-13.743160773157411,11.811269029177412],[-13.828271857142125,12.142644151249044],[-13.718743658899513,12.24718557377551],[-13.700476040084325,12.586182969610194],[-13.217818162478238,12.575873521367967],[-12.499050665730564,12.332089952031057],[-12.278599005573438,12.354440008997285],[-12.203564825885634,12.465647691289405],[-11.65830095055793,12.386582749882834],[-11.51394283695059,12.442987575729418],[-11.456168585648271,12.076834214725338],[-11.29757361494451,12.077971096235771],[-11.036555955438258,12.211244615116515],[-10.870829637078215,12.17788747807211],[-10.593223842806282,11.92397532800598],[-10.165213792348837,11.844083563682744],[-9.890992804392013,12.060478623904972],[-9.567911749703214,12.194243068892476],[-9.327616339546012,12.334286200403454],[-9.127473517279583,12.308060411015331],[-8.90526485842453,12.088358059126437],[-8.786099005559464,11.812560939984706],[-8.376304897484914,11.393645941610629],[-8.581305304386774,11.136245632364805],[-8.620321010767128,10.810890814655183],[-8.407310756860028,10.909256903522762],[-8.282357143578281,10.792597357623846],[-8.33537716310974,10.494811916541934],[-8.029943610048619,10.206534939001713],[-8.229337124046822,10.1290202905639],[-8.30961646161225,9.789531968622441],[-8.079113735374348,9.376223863152035],[-7.832100389019188,8.575704250518626],[-8.20349890790088,8.455453192575447],[-8.299048631208564,8.316443589710303],[-8.221792364932199,8.123328762235573],[-8.280703497744938,7.687179673692156],[-8.439298468448698,7.686042792181738]]]}},{"type":"Feature","properties":{"abbrev":"Gambia","name":"Gambia","name_long":"The Gambia","iso_a2":"GM","iso_a3":"GMB","iso_n3":"270"},"geometry":{"type":"Polygon","coordinates":[[[-16.841524624081273,13.15139394780256],[-16.713728807023468,13.594958604379853],[-15.62459632003994,13.62358734786956],[-15.39877031092446,13.86036876063092],[-15.08173539881382,13.876491807505984],[-14.687030808968487,13.630356960499784],[-14.376713833055788,13.625680243377372],[-14.046992356817482,13.79406789800045],[-13.844963344772408,13.505041612192002],[-14.277701788784553,13.280585028532242],[-14.712197231494626,13.298206691943777],[-15.141163295949466,13.509511623585238],[-15.511812506562935,13.278569647672867],[-15.691000535534995,13.270353094938455],[-15.931295945692211,13.130284125211332],[-16.841524624081273,13.15139394780256]]]}},{"type":"Feature","properties":{"abbrev":"GnB.","name":"Guinea-Bissau","name_long":"Guinea-Bissau","iso_a2":"GW","iso_a3":"GNB","iso_n3":"624"},"geometry":{"type":"Polygon","coordinates":[[[-15.130311245168171,11.040411688679526],[-15.664180467175527,11.458474025920795],[-16.085214199273565,11.52459402103824],[-16.314786749730203,11.806514797406548],[-16.30894731288123,11.95870189050612],[-16.613838263403277,12.170911159712702],[-16.677451951554573,12.384851589401052],[-16.147716844130585,12.547761542201187],[-15.816574266004254,12.515567124883345],[-15.548476935274008,12.628170070847347],[-13.700476040084325,12.586182969610194],[-13.718743658899513,12.24718557377551],[-13.828271857142125,12.142644151249044],[-13.743160773157411,11.811269029177412],[-13.900799729863776,11.678718980348748],[-14.121406419317779,11.677117010947697],[-14.382191534878729,11.509271958863692],[-14.685687221728898,11.527823798056488],[-15.130311245168171,11.040411688679526]]]}},{"type":"Feature","properties":{"abbrev":"Ken.","name":"Kenya","name_long":"Kenya","iso_a2":"KE","iso_a3":"KEN","iso_n3":"404"},"geometry":{"type":"Polygon","coordinates":[[[40.993,-0.85829],[41.58513,-1.68325],[40.88477,-2.08255],[40.63785,-2.49979],[40.26304,-2.57309],[40.12119,-3.27768],[39.80006,-3.68116],[39.60489,-4.34653],[39.20222,-4.67677],[37.7669,-3.67712],[37.69869,-3.09699],[34.07262,-1.05982],[33.90371119710453,-0.95],[33.89356896966694,0.109813537861896],[34.18,0.515],[34.6721,1.17694],[35.03599,1.90584],[34.59607,3.05374],[34.47913,3.5556],[34.005,4.249884947362048],[34.62019626785388,4.847122742081988],[35.298007118232974,5.506],[35.817447662353516,5.338232082790797],[35.817447662353516,4.77696566346189],[36.159078632855646,4.447864127672769],[36.85509323800812,4.447864127672769],[38.120915,3.598605],[38.43697,3.58851],[38.67114,3.61607],[38.89251,3.50074],[39.55938425876585,3.42206],[39.85494,3.83879],[40.76848,4.25702],[41.1718,3.91909],[41.85508309264397,3.918911920483727],[40.98105,2.78452],[40.993,-0.85829]]]}},{"type":"Feature","properties":{"abbrev":"Eq. G.","name":"Eq. Guinea","name_long":"Equatorial Guinea","iso_a2":"GQ","iso_a3":"GNQ","iso_n3":"226"},"geometry":{"type":"Polygon","coordinates":[[[9.492888624721985,1.010119533691494],[9.305613234096256,1.160911363119183],[9.649158155972628,2.283866075037736],[11.276449008843713,2.261050930180872],[11.285078973036462,1.057661851400013],[9.830284051155644,1.067893784993799],[9.492888624721985,1.010119533691494]]]}},{"type":"Feature","properties":{"abbrev":"Liberia","name":"Liberia","name_long":"Liberia","iso_a2":"LR","iso_a3":"LBR","iso_n3":"430"},"geometry":{"type":"Polygon","coordinates":[[[-7.71215938966975,4.364565944837722],[-7.974107224957251,4.355755113131963],[-9.004793667018674,4.8324185245922],[-9.913420376006684,5.593560695819207],[-10.765383876986643,6.140710760925558],[-11.438779466182055,6.785916856305747],[-11.19980180504828,7.105845648624737],[-11.146704270868383,7.396706447779536],[-10.69559485517648,7.939464016141087],[-10.23009355309128,8.406205552601293],[-10.016566534861255,8.42850393313523],[-9.755342169625834,8.541055202666925],[-9.337279832384581,7.928534450711353],[-9.40334815106975,7.526905218938907],[-9.208786383490844,7.313920803247953],[-8.926064622422004,7.309037380396375],[-8.722123582382123,7.71167430259851],[-8.439298468448698,7.686042792181738],[-8.48544552248535,7.39520783124307],[-8.385451626000574,6.911800645368742],[-8.60288021486862,6.46756419517166],[-8.311347622094019,6.193033148621083],[-7.993692592795881,6.126189683451543],[-7.570152553731688,5.707352199725904],[-7.539715135111762,5.313345241716519],[-7.63536821128403,5.188159084489456],[-7.71215938966975,4.364565944837722]]]}},{"type":"Feature","properties":{"abbrev":"Libya","name":"Libya","name_long":"Libya","iso_a2":"LY","iso_a3":"LBY","iso_n3":"434"},"geometry":{"type":"Polygon","coordinates":[[[14.8513,22.862950000000126],[14.143870883855243,22.49128896737113],[13.581424594790462,23.04050608976928],[11.9995056494717,23.471668402596432],[11.560669386449035,24.097909247325617],[10.771363559622955,24.562532050061748],[10.303846876678449,24.379313259370974],[9.948261346078027,24.936953640232616],[9.910692579801776,25.365454616796796],[9.31941084151822,26.094324856057483],[9.716285841519664,26.51220632578565],[9.629056023811074,27.140953477481048],[9.756128370816782,27.688258571884205],[9.683884718472882,28.144173895779314],[9.859997999723475,28.95998973237107],[9.805634392952356,29.424638373323376],[9.482139926805417,30.307556057246188],[9.970017124072967,30.539324856075382],[10.056575148161699,30.961831366493524],[9.950225050505196,31.376069647745283],[10.636901482799487,31.761420803345683],[10.944789666394513,32.081814683555365],[11.432253452203781,32.36890310315283],[11.48878746913101,33.13699575452324],[12.66331,32.79278],[13.08326,32.87882],[13.91868,32.71196],[15.24563,32.26508],[15.71394,31.37626],[16.61162,31.18218],[18.02109,30.76357],[19.08641,30.26639],[19.57404,30.52582],[20.05335,30.98576],[19.82033,31.75179000000014],[20.13397,32.2382],[20.85452,32.7068],[21.54298,32.8432],[22.89576,32.63858],[23.2368,32.19149],[23.609130000000107,32.18726],[23.9275,32.01667],[24.92114,31.89936],[25.16482,31.56915],[24.80287,31.08929],[24.95762,30.6616],[24.70007,30.04419],[25.00000000000011,29.23865452953356],[25.00000000000011,25.682499996361003],[25.00000000000011,22],[25.00000000000011,20.00304],[23.850000000000136,20],[23.837660000000138,19.580470000000105],[19.84926,21.49509],[15.86085,23.40972],[14.8513,22.862950000000126]]]}},{"type":"Feature","properties":{"abbrev":"Mor.","name":"Morocco","name_long":"Morocco","iso_a2":"MA","iso_a3":"MAR","iso_n3":"504"},"geometry":{"type":"Polygon","coordinates":[[[-5.193863491222032,35.75518219659085],[-4.591006232105143,35.33071198174565],[-3.640056525070008,35.39985504815198],[-2.604305792644112,35.17909332940112],[-2.169913702798624,35.16839630791671],[-1.792985805661658,34.527918606091305],[-1.73345455566141,33.91971283623212],[-1.388049282222596,32.86401500094137],[-1.124551153966195,32.6515215113572],[-1.30789913573787,32.26288890230603],[-2.616604783529567,32.094346218386164],[-3.068980271812649,31.72449799247329],[-3.647497931320146,31.63729401298082],[-3.690441046554667,30.896951605751152],[-4.859646165374443,30.50118764904388],[-5.242129278982787,30.000443020135574],[-6.060632290053746,29.731699734001808],[-7.059227667661901,29.579228420524657],[-8.674116176782832,28.84128896739665],[-8.665589565454836,27.65642588959247],[-8.817809007940525,27.65642588959247],[-8.817828334986643,27.65642588959247],[-8.794883999049034,27.12069631602256],[-9.413037482124508,27.088476060488546],[-9.735343390328751,26.860944729107416],[-10.189424200877452,26.860944729107416],[-10.55126257978526,26.990807603456886],[-11.392554897496948,26.883423977154393],[-11.718219773800342,26.104091701760808],[-12.030758836301658,26.03086619720312],[-12.50096269372537,24.770116278578143],[-13.891110398809047,23.691009019459386],[-14.221167771857154,22.310163072188345],[-14.630832688850946,21.860939846274874],[-14.750954555713404,21.500600083903805],[-17.00296179856107,21.420734157796687],[-17.020428432675768,21.422310288981635],[-16.973247849993186,21.885744533774954],[-16.58913692876763,22.15823436125009],[-16.261921759495664,22.679339504481277],[-16.3264139469959,23.017768459560898],[-15.982610642958063,23.723358466074103],[-15.426003790742186,24.35913361256104],[-15.089331834360733,24.52026072844697],[-14.824645148161691,25.103532619725314],[-14.800925665739667,25.63626496022229],[-14.439939947964831,26.254418443297652],[-13.773804897506464,26.618892320252286],[-13.139941779014292,27.640147813420494],[-13.121613369914712,27.654147671719812],[-12.618836635783111,28.038185533148663],[-11.688919236690765,28.148643907172584],[-10.900956997104402,28.83214223888092],[-10.399592251008642,29.098585923777787],[-9.564811163765626,29.933573716749862],[-9.814718390329174,31.17773550060906],[-9.434793260119363,32.038096421836485],[-9.300692918321829,32.564679266890636],[-8.65747636558504,33.2402452662424],[-7.654178432638218,33.69706492770251],[-6.91254411460136,34.11047638603745],[-6.244342006851411,35.145865383437524],[-5.929994269219833,35.75998810479399],[-5.193863491222032,35.75518219659085]]]}},{"type":"Feature","properties":{"abbrev":"Les.","name":"Lesotho","name_long":"Lesotho","iso_a2":"LS","iso_a3":"LSO","iso_n3":"426"},"geometry":{"type":"Polygon","coordinates":[[[28.97826256685724,-28.955596612261715],[29.325166456832587,-29.257386976846252],[29.018415154748023,-29.74376555757737],[28.84839969250774,-30.070050551068253],[28.29106937023991,-30.2262167294543],[28.107204624145425,-30.54573211031495],[27.749397006956485,-30.64510588961222],[26.999261915807637,-29.875953871379984],[27.532511020627478,-29.24271087007536],[28.07433841320778,-28.851468601193588],[28.541700066855498,-28.64750172293757],[28.97826256685724,-28.955596612261715]]]}},{"type":"Feature","properties":{"abbrev":"Mad.","name":"Madagascar","name_long":"Madagascar","iso_a2":"MG","iso_a3":"MDG","iso_n3":"450"},"geometry":{"type":"Polygon","coordinates":[[[49.54351891459575,-12.469832858940554],[49.80898074727909,-12.895284925999555],[50.056510857957164,-13.555761407121985],[50.21743126811407,-14.758788750876795],[50.47653689962553,-15.226512139550541],[50.377111443895956,-15.706069431219126],[50.20027469259318,-16.000263360256767],[49.86060550313868,-15.414252618066916],[49.67260664246086,-15.710203545802479],[49.863344354050156,-16.451036879138776],[49.77456424337271,-16.875042006093597],[49.49861209493412,-17.106035658438273],[49.435618523970305,-17.953064060134366],[49.041792433473944,-19.118781019774445],[48.54854088724801,-20.496888116134127],[47.93074913919867,-22.391501153251085],[47.54772342305131,-23.781958916928517],[47.095761346226595,-24.941629733990453],[46.282477654817086,-25.178462823184105],[45.409507684110444,-25.60143442149309],[44.83357384621755,-25.34610116953894],[44.03972049334976,-24.988345228782308],[43.76376834491117,-24.460677178649988],[43.697777540874455,-23.574116306250602],[43.345654331237625,-22.776903985283873],[43.254187046081,-22.057413018484123],[43.43329756040464,-21.336475111580185],[43.893682895692926,-21.163307386970125],[43.896370070172104,-20.830459486578174],[44.37432539243966,-20.07236622485639],[44.46439741392439,-19.435454196859048],[44.23242190936617,-18.961994724200906],[44.04297610858415,-18.33138722094317],[43.96308434426091,-17.409944756746782],[44.31246870298628,-16.850495700754955],[44.4465173683514,-16.216219170804507],[44.94493655780653,-16.1793738745804],[45.50273196796499,-15.97437346767854],[45.87299360533626,-15.793454278224685],[46.31224327981721,-15.780018405828798],[46.882182651564285,-15.210182386946313],[47.70512983581235,-14.594302666891764],[48.005214878131255,-14.091232598530375],[47.869047479042166,-13.663868503476586],[48.29382775248138,-13.784067884987486],[48.84506025573878,-13.089174899958664],[48.86350874206698,-12.48786793381042],[49.194651320193316,-12.04055673589197],[49.54351891459575,-12.469832858940554]]]}},{"type":"Feature","properties":{"abbrev":"Mali","name":"Mali","name_long":"Mali","iso_a2":"ML","iso_a3":"MLI","iso_n3":"466"},"geometry":{"type":"Polygon","coordinates":[[[-12.170750291380301,14.616834214735505],[-11.834207526079467,14.79909699142894],[-11.666078253617854,15.388208319556298],[-11.349095017939504,15.411256008358478],[-10.650791388379417,15.132745876521426],[-10.086846482778212,15.330485744686273],[-9.700255092802706,15.264107367407362],[-9.55023840985939,15.486496893775437],[-5.537744309908447,15.501689764869257],[-5.315277268891933,16.20185374599184],[-5.488522508150438,16.325102037007966],[-5.971128709324248,20.64083344164763],[-6.453786586930335,24.956590684503425],[-4.92333736817423,24.974574082941],[-1.550054897457613,22.792665920497384],[1.823227573259032,20.610809434486043],[2.06099083823392,20.142233384679486],[2.683588494486429,19.856230170160114],[3.1466610042539,19.69357859952144],[3.158133172222705,19.057364203360038],[4.267419467800039,19.155265204337],[4.270209995143801,16.852227484601215],[3.723421665063483,16.184283759012615],[3.638258904646477,15.568119818580454],[2.749992709981484,15.409524847876696],[1.385528191746858,15.323561102759172],[1.01578331869851,14.968182277887948],[0.374892205414682,14.928908189346132],[-0.26625729003058,14.924308986872148],[-0.515854458000348,15.116157741755726],[-1.066363491205664,14.973815009007765],[-2.001035122068771,14.559008287000891],[-2.191824510090385,14.246417548067356],[-2.967694464520577,13.79815033615151],[-3.10370683431276,13.541266791228594],[-3.522802700199861,13.337661647998615],[-4.006390753587226,13.472485459848116],[-4.28040503581488,13.228443508349741],[-4.427166103523803,12.542645575404295],[-5.220941941743121,11.713858954307227],[-5.197842576508648,11.37514577885014],[-5.470564947929006,10.951269842976048],[-5.404341599946974,10.370736802609146],[-5.816926235365287,10.222554633012194],[-6.050452032892267,10.096360785355444],[-6.205222947606431,10.524060777219134],[-6.493965013037267,10.411302801958271],[-6.666460944027548,10.430810655148447],[-6.850506557635057,10.138993841996239],[-7.622759161804809,10.147236232946796],[-7.899589809592372,10.297382106970828],[-8.029943610048619,10.206534939001713],[-8.33537716310974,10.494811916541934],[-8.282357143578281,10.792597357623846],[-8.407310756860028,10.909256903522762],[-8.620321010767128,10.810890814655183],[-8.581305304386774,11.136245632364805],[-8.376304897484914,11.393645941610629],[-8.786099005559464,11.812560939984706],[-8.90526485842453,12.088358059126437],[-9.127473517279583,12.308060411015331],[-9.327616339546012,12.334286200403454],[-9.567911749703214,12.194243068892476],[-9.890992804392013,12.060478623904972],[-10.165213792348837,11.844083563682744],[-10.593223842806282,11.92397532800598],[-10.870829637078215,12.17788747807211],[-11.036555955438258,12.211244615116515],[-11.29757361494451,12.077971096235771],[-11.456168585648271,12.076834214725338],[-11.51394283695059,12.442987575729418],[-11.467899135778524,12.754518947800975],[-11.55339779300543,13.141213690641067],[-11.927716030311615,13.422075100147394],[-12.12488745772126,13.994727484589788],[-12.170750291380301,14.616834214735505]]]}},{"type":"Feature","properties":{"abbrev":"Moz.","name":"Mozambique","name_long":"Mozambique","iso_a2":"MZ","iso_a3":"MOZ","iso_n3":"508"},"geometry":{"type":"Polygon","coordinates":[[[34.55998904799935,-11.520020033415925],[35.31239790216904,-11.439146416879147],[36.51408165868426,-11.720938002166733],[36.775150994622805,-11.594537448780805],[37.47128421402661,-11.56875090906716],[37.82764489111139,-11.268769219612835],[38.42755659358775,-11.285202325081656],[39.521029900883775,-10.896853936408226],[40.31658857601719,-10.317096042525698],[40.47838748552303,-10.765440769089993],[40.437253045418686,-11.761710707245015],[40.56081139502857,-12.639176527561027],[40.59962039567975,-14.201975192931862],[40.775475294768995,-14.691764418194241],[40.4772506040126,-15.406294447493972],[40.08926395036522,-16.10077402106446],[39.45255862809705,-16.72089120856694],[38.53835086442152,-17.101023044505958],[37.41113284683888,-17.586368096591237],[36.28127933120936,-18.65968759529345],[35.89649661636406,-18.842260430580634],[35.198399692533144,-19.552811374593894],[34.78638349787005,-19.784011732667736],[34.70189253107284,-20.49704314543101],[35.176127150215365,-21.25436126066841],[35.37342776870574,-21.840837090748877],[35.385848253705404,-22.14],[35.562545536369086,-22.09],[35.533934767404304,-23.070787855727758],[35.37177412287238,-23.5353589820317],[35.60747033055563,-23.706563002214683],[35.45874555841962,-24.12260995859655],[35.04073489761066,-24.478350518493805],[34.21582400893547,-24.81631438568266],[33.01321007663901,-25.357573337507738],[32.574632195777866,-25.72731821055609],[32.66036339695009,-26.148584486599443],[32.91595503106569,-26.215867201443466],[32.830120477028885,-26.742191664336197],[32.07166548028107,-26.73382008230491],[31.98577924981197,-26.291779880480227],[31.837777947728064,-25.84333180105135],[31.75240848158188,-25.484283949487413],[31.93058882012425,-24.369416599222536],[31.670397983534652,-23.658969008073864],[31.191409132621285,-22.2515096981724],[32.244988234188014,-21.116488539313693],[32.50869306817344,-20.395292250248307],[32.65974327976258,-20.304290052982317],[32.772707960752626,-19.715592136313298],[32.61199425632489,-19.419382826416275],[32.65488569512715,-18.672089939043495],[32.84986087416439,-17.97905730557718],[32.847638787575846,-16.713398125884616],[32.32823896661022,-16.392074069893752],[31.8520406430406,-16.319417006091378],[31.636498243951195,-16.071990248277885],[31.173063999157677,-15.860943698797872],[30.338954705534544,-15.880839125230244],[30.274255812305107,-15.507786960515212],[30.17948123548183,-14.796099134991527],[33.214024692525214,-13.971860039936153],[33.789700148256685,-14.451830743063072],[34.064825473778626,-14.359950046448121],[34.45963341648854,-14.613009535381424],[34.51766604995231,-15.013708591372612],[34.307291294092096,-15.478641452702595],[34.38129194513405,-16.183559665596043],[35.033810255683534,-16.801299737213093],[35.33906294123164,-16.10744028083011],[35.77190473810836,-15.896858819240725],[35.68684533055594,-14.611045830954332],[35.26795617039801,-13.887834161029566],[34.907151320136165,-13.565424899960568],[34.55998904799935,-13.579997653866876],[34.28000613784198,-12.280025323132504],[34.55998904799935,-11.520020033415925]]]}},{"type":"Feature","properties":{"abbrev":"Nam.","name":"Namibia","name_long":"Namibia","iso_a2":"NA","iso_a3":"NAM","iso_n3":"516"},"geometry":{"type":"Polygon","coordinates":[[[16.344976840895242,-28.576705010697697],[15.601818068105814,-27.8212472470228],[15.21047244635946,-27.090955905874047],[14.989710727608552,-26.117371921495156],[14.743214145576331,-25.39292001719538],[14.408144158595833,-23.853014011329847],[14.385716586981149,-22.65665292734069],[14.257714064194175,-22.111208184499954],[13.86864220546866,-21.699036960539978],[13.35249799973744,-20.872834161057504],[12.826845330464492,-19.673165785401665],[12.608564080463621,-19.0453488094877],[11.794918654028066,-18.069129327061916],[11.734198846085121,-17.301889336824473],[12.215461460019355,-17.111668389558083],[12.814081251688407,-16.94134286872407],[13.462362094789967,-16.971211846588773],[14.05850141770901,-17.423380629142663],[14.209706658595024,-17.35310068122572],[18.26330936043416,-17.309950860262006],[18.956186964603603,-17.789094740472258],[21.377176141045567,-17.930636488519696],[23.215048455506064,-17.52311614346598],[24.033861525170778,-17.295843194246324],[24.682349074001507,-17.353410739819473],[25.07695031098226,-17.57882333747662],[25.08444339366457,-17.661815687737374],[24.520705193792537,-17.887124932529936],[24.217364536239213,-17.88934701911849],[23.579005568137717,-18.28126108162006],[23.1968583513393,-17.869038181227786],[21.655040317478978,-18.219146010005225],[20.910641310314535,-18.252218926672022],[20.881134067475866,-21.814327080983148],[19.89545779794068,-21.84915699634787],[19.895767856534434,-24.767790215760588],[19.894734327888614,-28.461104831660776],[19.002127312911085,-28.972443129188864],[18.464899122804752,-29.04546192801728],[17.83615197110953,-28.85637786226132],[17.387497185951503,-28.78351409272978],[17.218928663815404,-28.35594329194681],[16.824017368240902,-28.082161553664466],[16.344976840895242,-28.576705010697697]]]}},{"type":"Feature","properties":{"abbrev":"Niger","name":"Niger","name_long":"Niger","iso_a2":"NE","iso_a3":"NER","iso_n3":"562"},"geometry":{"type":"Polygon","coordinates":[[[2.15447350424995,11.940150051313424],[2.177107781593918,12.625017808477537],[1.024103224297619,12.851825669806601],[0.993045688490156,13.335749620003865],[0.429927605805517,13.988733018443893],[0.295646396495215,14.444234930880667],[0.374892205414767,14.928908189346147],[1.015783318698482,14.968182277887989],[1.385528191746971,15.32356110275924],[2.749992709981541,15.409524847876753],[3.638258904646591,15.568119818580442],[3.723421665063597,16.184283759012658],[4.270209995143887,16.852227484601315],[4.267419467800096,19.155265204337127],[5.677565952180714,19.6012069767998],[8.57289310062987,21.565660712159225],[11.9995056494717,23.471668402596432],[13.581424594790462,23.04050608976928],[14.143870883855243,22.49128896737113],[14.8513,22.862950000000126],[15.096887648181848,21.30851878507491],[15.471076694407316,21.048457139565983],[15.487148064850146,20.730414537025638],[15.903246697664313,20.387618923417506],[15.685740594147774,19.957180080642384],[15.30044111497972,17.927949937405003],[15.247731154041846,16.627305813050782],[13.972201775781684,15.684365953021143],[13.540393507550789,14.367133693901222],[13.956698846094127,13.996691189016929],[13.95447675950561,13.353448798063766],[14.595781284247607,13.330426947477859],[14.495787387762903,12.859396267137356],[14.21353071458475,12.802035427293333],[14.18133629726691,12.483656927943171],[13.995352817448293,12.461565253138303],[13.318701613018561,13.556356309457954],[13.083987257548813,13.596147162322495],[12.30207116054055,13.037189032437539],[11.527803175511508,13.32898000737356],[10.989593133191532,13.387322699431195],[10.701031935273818,13.246917832894042],[10.114814487354748,13.277251898649467],[9.52492801274309,12.851102199754564],[9.014933302454438,12.826659247280418],[7.804671258178871,13.343526923063735],[7.330746697630047,13.098038031461215],[6.820441928747812,13.115091254117601],[6.445426059605722,13.492768459522722],[5.443058302440135,13.865923977102225],[4.368343540066007,13.747481594289411],[4.107945997747379,13.531215725147945],[3.967282749048934,12.956108710171577],[3.680633579125925,12.55290334721417],[3.611180454125587,11.660167141155966],[2.848643019226586,12.23563589115821],[2.490163608418015,12.233052069543588],[2.15447350424995,11.940150051313424]]]}},{"type":"Feature","properties":{"abbrev":"Mal.","name":"Malawi","name_long":"Malawi","iso_a2":"MW","iso_a3":"MWI","iso_n3":"454"},"geometry":{"type":"Polygon","coordinates":[[[34.55998904799935,-11.520020033415925],[34.28000613784198,-12.280025323132504],[34.55998904799935,-13.579997653866876],[34.907151320136165,-13.565424899960568],[35.26795617039801,-13.887834161029566],[35.68684533055594,-14.611045830954332],[35.77190473810836,-15.896858819240725],[35.33906294123164,-16.10744028083011],[35.033810255683534,-16.801299737213093],[34.38129194513405,-16.183559665596043],[34.307291294092096,-15.478641452702595],[34.51766604995231,-15.013708591372612],[34.45963341648854,-14.613009535381424],[34.064825473778626,-14.359950046448121],[33.789700148256685,-14.451830743063072],[33.214024692525214,-13.971860039936153],[32.68816531752313,-13.712857761289275],[32.991764357237884,-12.783870537978272],[33.306422153463075,-12.435778090060218],[33.11428917820191,-11.607198174692314],[33.315310499817286,-10.796549981329697],[33.48568769708359,-10.525558770391115],[33.2313879737753,-9.6767216935648],[32.75937544122132,-9.230599053589058],[33.73972903823045,-9.417150974162723],[33.94083772409653,-9.693673841980294],[34.28000613784198,-10.159999688358404],[34.55998904799935,-11.520020033415925]]]}},{"type":"Feature","properties":{"abbrev":"Mrt.","name":"Mauritania","name_long":"Mauritania","iso_a2":"MR","iso_a3":"MRT","iso_n3":"478"},"geometry":{"type":"Polygon","coordinates":[[[-12.170750291380301,14.616834214735505],[-12.830658331747516,15.303691514542946],[-13.43573767745306,16.03938304286619],[-14.099521450242179,16.304302273010492],[-14.577347581428981,16.59826365810281],[-15.135737270558817,16.587282416240782],[-15.62366614425869,16.369337063049812],[-16.12069007004193,16.455662543193384],[-16.463098110407884,16.13503611903846],[-16.549707810929064,16.67389211676196],[-16.270551723688357,17.166962795474873],[-16.14634741867485,18.108481553616656],[-16.256883307347167,19.096715806550307],[-16.37765112961327,19.593817246981985],[-16.277838100641517,20.0925206568147],[-16.536323614965468,20.567866319251493],[-17.063423224342568,20.999752102130827],[-16.845193650773993,21.33332347257488],[-12.929101935263532,21.32707062426756],[-13.118754441774712,22.771220201096256],[-12.874221564169575,23.284832261645178],[-11.937224493853321,23.374594224536168],[-11.96941891117116,25.933352769468268],[-8.6872936670174,25.881056219988906],[-8.68439978680905,27.395744126896005],[-4.92333736817423,24.974574082941],[-6.453786586930335,24.956590684503425],[-5.971128709324248,20.64083344164763],[-5.488522508150438,16.325102037007966],[-5.315277268891933,16.20185374599184],[-5.537744309908447,15.501689764869257],[-9.55023840985939,15.486496893775437],[-9.700255092802706,15.264107367407362],[-10.086846482778212,15.330485744686273],[-10.650791388379417,15.132745876521426],[-11.349095017939504,15.411256008358478],[-11.666078253617854,15.388208319556298],[-11.834207526079467,14.79909699142894],[-12.170750291380301,14.616834214735505]]]}},{"type":"Feature","properties":{"abbrev":"Nigeria","name":"Nigeria","name_long":"Nigeria","iso_a2":"NG","iso_a3":"NGA","iso_n3":"566"},"geometry":{"type":"Polygon","coordinates":[[[8.500287713259695,4.771982937026849],[7.46210818851594,4.412108262546241],[7.082596469764439,4.464689032403228],[6.6980721370806,4.240594183769517],[5.898172641634687,4.262453314628985],[5.362804803090881,4.887970689305959],[5.033574252959368,5.611802476418234],[4.325607130560683,6.270651149923467],[3.574180128604553,6.258300482605719],[2.691701694356254,6.258817246928629],[2.74906253420022,7.870734361192888],[2.723792758809509,8.50684540448971],[2.912308383810256,9.13760793704432],[3.220351596702101,9.4441525333997],[3.705438266625919,10.063210354040208],[3.600070021182801,10.332186184119408],[3.797112257511714,10.734745591673105],[3.572216424177469,11.327939357951518],[3.611180454125559,11.660167141155966],[3.680633579125811,12.552903347214226],[3.967282749048849,12.956108710171575],[4.107945997747322,13.531215725147831],[4.368343540066064,13.747481594289324],[5.443058302440164,13.865923977102298],[6.445426059605637,13.492768459522678],[6.820441928747754,13.115091254117518],[7.330746697630018,13.0980380314612],[7.804671258178786,13.343526923063745],[9.014933302454466,12.82665924728043],[9.524928012742945,12.851102199754479],[10.114814487354693,13.27725189864941],[10.701031935273704,13.246917832894084],[10.989593133191535,13.38732269943111],[11.527803175511394,13.328980007373588],[12.302071160540523,13.037189032437524],[13.08398725754887,13.596147162322566],[13.318701613018561,13.556356309457826],[13.99535281744835,12.461565253138346],[14.181336297266792,12.483656927943116],[14.577177768622533,12.085360826053503],[14.468192172918975,11.904751695193411],[14.415378859116686,11.572368882692075],[13.572949659894562,10.798565985553566],[13.308676385153918,10.160362046748928],[13.167599724997103,9.640626328973411],[12.955467970438974,9.417771714714704],[12.753671502339214,8.717762762888995],[12.218872104550599,8.305824082874324],[12.063946160539558,7.799808457872302],[11.839308709366803,7.397042344589436],[11.74577436691851,6.981382961449753],[11.05878787603035,6.644426784690594],[10.497375115611417,7.055357774275564],[10.118276808318257,7.038769639509879],[9.522705926154401,6.453482367372117],[9.233162876023044,6.444490668153334],[8.757532993208628,5.479665839047911],[8.500287713259695,4.771982937026849]]]}},{"type":"Feature","properties":{"abbrev":"Rwa.","name":"Rwanda","name_long":"Rwanda","iso_a2":"RW","iso_a3":"RWA","iso_n3":"646"},"geometry":{"type":"Polygon","coordinates":[[[30.41910485201924,-1.134659112150416],[30.81613488131771,-1.698914076345389],[30.75830895358311,-2.287250257988369],[30.469696079232985,-2.413857517103458],[29.938359002407942,-2.348486830254238],[29.632176141078588,-2.917857761246097],[29.024926385216787,-2.839257907730158],[29.117478875451553,-2.292211195488385],[29.25483483248334,-2.215109958508911],[29.29188683443661,-1.620055840667987],[29.579466180140884,-1.341313164885626],[29.82151858899601,-1.443322442229785],[30.41910485201924,-1.134659112150416]]]}},{"type":"Feature","properties":{"abbrev":"W. Sah.","name":"W. Sahara","name_long":"Western Sahara","iso_a2":"EH","iso_a3":"ESH","iso_n3":"732"},"geometry":{"type":"Polygon","coordinates":[[[-8.794883999049077,27.120696316022503],[-8.817828334986672,27.656425889592356],[-8.665589565454809,27.656425889592356],[-8.665124477564191,27.589479071558227],[-8.68439978680905,27.395744126896005],[-8.6872936670174,25.881056219988906],[-11.96941891117116,25.933352769468268],[-11.937224493853321,23.374594224536168],[-12.874221564169575,23.284832261645178],[-13.118754441774712,22.771220201096256],[-12.929101935263532,21.32707062426756],[-16.845193650773993,21.33332347257488],[-17.063423224342568,20.999752102130827],[-17.020428432675743,21.42231028898148],[-17.00296179856109,21.420734157796577],[-14.750954555713534,21.500600083903663],[-14.630832688851072,21.8609398462749],[-14.221167771857251,22.31016307218816],[-13.891110398809047,23.691009019459305],[-12.50096269372537,24.7701162785782],[-12.030758836301615,26.030866197203043],[-11.718219773800357,26.104091701760623],[-11.392554897496979,26.883423977154365],[-10.551262579785273,26.990807603456886],[-10.189424200877582,26.860944729107405],[-9.735343390328879,26.860944729107405],[-9.413037482124466,27.088476060488517],[-8.794883999049077,27.120696316022503]]]}},{"type":"Feature","properties":{"abbrev":"S. Sud.","name":"S. Sudan","name_long":"South Sudan","iso_a2":"SS","iso_a3":"SSD","iso_n3":"728"},"geometry":{"type":"Polygon","coordinates":[[[33.963392794971185,9.464285229420625],[33.97498,8.68456],[33.82550000000015,8.37916],[33.29480000000012,8.35458],[32.95418,7.784970000000102],[33.568290000000104,7.71334],[34.0751,7.22595],[34.25032,6.82607],[34.70702,6.59422000000012],[35.298007118233095,5.506],[34.62019626785394,4.847122742082036],[34.005,4.249884947362147],[33.3900000000001,3.79],[32.68642,3.79232],[31.881450000000143,3.55827],[31.24556,3.7819],[30.83385,3.50917],[29.95349,4.1737],[29.71599531425602,4.600804755060153],[29.159078403446642,4.389267279473245],[28.696677687298802,4.455077215996994],[28.428993768027,4.287154649264608],[27.979977247842953,4.408413397637388],[27.374226108517632,5.233944403500175],[27.213409051225256,5.550953477394614],[26.465909458123292,5.946717434101856],[26.21341840994512,6.546603298362129],[25.796647983511264,6.97931590415817],[25.124130893664812,7.500085150579424],[25.114932488716875,7.825104071479245],[24.5673690121522,8.229187933785454],[23.886979580860665,8.619729712933065],[24.19406772118765,8.728696472403897],[24.53741516360202,8.91753756573172],[24.794925745412684,9.810240916008695],[25.069603699343986,10.273759963267992],[25.790633328413946,10.411098940233728],[25.962307049621018,10.136420986302424],[26.477328213242515,9.552730334198088],[26.752006167173818,9.466893473594496],[27.112520981708883,9.638567194801624],[27.833550610778783,9.60423245056029],[27.970889587744352,9.398223985111654],[28.966597170745782,9.398223985111654],[29.000931914987174,9.60423245056029],[29.515953078608614,9.793073543888056],[29.61895731133285,10.084918869940225],[29.99663949798855,10.290927335388687],[30.83784073190338,9.70723668328452],[31.35286189552488,9.810240916008695],[31.850715687025517,10.531270545078826],[32.400071594888345,11.080626452941488],[32.31423473428475,11.68148447716652],[32.073891524594785,11.973329803218519],[32.67474954881965,12.02483191958072],[32.743419037302544,12.248007757149992],[33.20693808456178,12.179338268667093],[33.086766479716744,11.441141267476496],[33.20693808456178,10.720111638406593],[33.72195924818311,10.325262079630193],[33.842130853028145,9.981914637215993],[33.82496348090751,9.484060845715362],[33.963392794971185,9.464285229420625]]]}},{"type":"Feature","properties":{"abbrev":"S.L.","name":"Sierra Leone","name_long":"Sierra Leone","iso_a2":"SL","iso_a3":"SLE","iso_n3":"694"},"geometry":{"type":"Polygon","coordinates":[[[-11.438779466182055,6.785916856305747],[-11.70819454593574,6.860098374860726],[-12.428098924193819,7.26294200279203],[-12.949049038128194,7.798645738145738],[-13.124025437868482,8.163946438016978],[-13.246550258832515,8.903048610871508],[-12.71195756677308,9.342711696810767],[-12.59671912276221,9.62018830000197],[-12.425928514037565,9.835834051955956],[-12.150338100625005,9.858571682164381],[-11.917277390988659,10.046983954300558],[-11.117481248407328,10.045872911006285],[-10.8391519840833,9.688246161330369],[-10.622395188835041,9.267910061068278],[-10.654770473665891,8.977178452994194],[-10.494315151399633,8.715540676300435],[-10.505477260774668,8.348896389189605],[-10.23009355309128,8.406205552601293],[-10.69559485517648,7.939464016141087],[-11.146704270868383,7.396706447779536],[-11.19980180504828,7.105845648624737],[-11.438779466182055,6.785916856305747]]]}},{"type":"Feature","properties":{"abbrev":"Sen.","name":"Senegal","name_long":"Senegal","iso_a2":"SN","iso_a3":"SEN","iso_n3":"686"},"geometry":{"type":"Polygon","coordinates":[[[-16.713728807023468,13.594958604379853],[-17.126106736712615,14.373515733289224],[-17.62504269049066,14.729540513564071],[-17.18517289882223,14.919477240452863],[-16.700706346085923,15.621527411354108],[-16.463098110407884,16.13503611903846],[-16.12069007004193,16.455662543193384],[-15.62366614425869,16.369337063049812],[-15.135737270558817,16.587282416240782],[-14.577347581428981,16.59826365810281],[-14.099521450242179,16.304302273010492],[-13.43573767745306,16.03938304286619],[-12.830658331747516,15.303691514542946],[-12.170750291380301,14.616834214735505],[-12.12488745772126,13.994727484589788],[-11.927716030311615,13.422075100147394],[-11.55339779300543,13.141213690641067],[-11.467899135778524,12.754518947800975],[-11.51394283695059,12.442987575729418],[-11.65830095055793,12.386582749882834],[-12.203564825885634,12.465647691289405],[-12.278599005573438,12.354440008997285],[-12.499050665730564,12.332089952031057],[-13.217818162478238,12.575873521367967],[-13.700476040084325,12.586182969610194],[-15.548476935274008,12.628170070847347],[-15.816574266004254,12.515567124883345],[-16.147716844130585,12.547761542201187],[-16.677451951554573,12.384851589401052],[-16.841524624081273,13.15139394780256],[-15.931295945692211,13.130284125211332],[-15.691000535534995,13.270353094938455],[-15.511812506562935,13.278569647672867],[-15.141163295949466,13.509511623585238],[-14.712197231494626,13.298206691943777],[-14.277701788784553,13.280585028532242],[-13.844963344772408,13.505041612192002],[-14.046992356817482,13.79406789800045],[-14.376713833055788,13.625680243377372],[-14.687030808968487,13.630356960499784],[-15.08173539881382,13.876491807505984],[-15.39877031092446,13.86036876063092],[-15.62459632003994,13.62358734786956],[-16.713728807023468,13.594958604379853]]]}},{"type":"Feature","properties":{"abbrev":"Solnd.","name":"Somaliland","name_long":"Somaliland","iso_a2":null,"iso_a3":null,"iso_n3":null},"geometry":{"type":"Polygon","coordinates":[[[48.938129510296505,9.451748968946674],[48.48673587422701,8.83762624758998],[47.78942,8.003],[46.94832848489796,7.996876532417388],[43.67875,9.18358000000012],[43.29697513201876,9.540477403191744],[42.92812,10.021940000000143],[42.55876,10.57258000000013],[42.77685184100096,10.92687856693442],[43.14530480324214,11.462039699748857],[43.470659620951665,11.27770986576388],[43.66666832863484,10.864169216348158],[44.11780358254282,10.445538438351605],[44.614259067570856,10.442205308468942],[45.55694054543915,10.698029486529776],[46.645401238803004,10.816549383991173],[47.525657586462785,11.12722809492999],[48.02159630716778,11.193063869669743],[48.37878380716927,11.375481675660126],[48.94820641459347,11.41062164961852],[48.94200524271844,11.394266058798166],[48.93849124532261,10.982327378783452],[48.93823286316109,9.973500067581483],[48.938129510296505,9.451748968946674]]]}},{"type":"Feature","properties":{"abbrev":"Sudan","name":"Sudan","name_long":"Sudan","iso_a2":"SD","iso_a3":"SDN","iso_n3":"729"},"geometry":{"type":"Polygon","coordinates":[[[33.963392794971185,9.464285229420625],[33.82496348090751,9.484060845715362],[33.842130853028145,9.981914637215993],[33.72195924818311,10.325262079630193],[33.20693808456178,10.720111638406593],[33.086766479716744,11.441141267476496],[33.20693808456178,12.179338268667093],[32.743419037302544,12.248007757149992],[32.67474954881965,12.02483191958072],[32.073891524594785,11.973329803218519],[32.31423473428475,11.68148447716652],[32.400071594888345,11.080626452941488],[31.850715687025517,10.531270545078826],[31.35286189552488,9.810240916008695],[30.83784073190338,9.70723668328452],[29.99663949798855,10.290927335388687],[29.61895731133285,10.084918869940225],[29.515953078608614,9.793073543888056],[29.000931914987174,9.60423245056029],[28.966597170745782,9.398223985111654],[27.970889587744352,9.398223985111654],[27.833550610778783,9.60423245056029],[27.112520981708883,9.638567194801624],[26.752006167173818,9.466893473594496],[26.477328213242515,9.552730334198088],[25.962307049621018,10.136420986302424],[25.790633328413946,10.411098940233728],[25.069603699343986,10.273759963267992],[24.794925745412684,9.810240916008695],[24.53741516360202,8.91753756573172],[24.19406772118765,8.728696472403897],[23.886979580860665,8.619729712933065],[23.805813429466752,8.666318874542526],[23.459012892355986,8.95428579348902],[23.394779087017298,9.26506785729225],[23.55724979014292,9.68121816653877],[23.554304233502194,10.08925527591532],[22.97754357269275,10.71446259199854],[22.864165480244253,11.142395127807617],[22.87622,11.384610000000123],[22.50869,11.67936],[22.49762,12.26024],[22.28801,12.64605],[21.93681,12.588180000000136],[22.03759,12.95546],[22.29658,13.37232],[22.18329,13.78648],[22.51202,14.09318],[22.30351,14.32682],[22.56795000000011,14.944290000000137],[23.024590000000103,15.68072],[23.886890000000108,15.61084],[23.837660000000138,19.580470000000105],[23.850000000000136,20],[25.00000000000011,20.00304],[25.00000000000011,22],[29.02,22],[32.9,22],[36.86623,22],[37.1887200000001,21.01885],[36.96941,20.83744000000013],[37.11470000000014,19.80796],[37.4817900000001,18.61409],[37.86276,18.36786],[38.410089959473225,17.99830739997031],[37.90400000000011,17.42754],[37.16747,17.263140000000135],[36.852530000000115,16.95655],[36.75389,16.29186],[36.32322,14.82249],[36.42951,14.42211],[36.27022,13.563330000000121],[35.86363,12.57828],[35.26049,12.08286],[34.83163000000013,11.318960000000118],[34.73115000000013,10.910170000000107],[34.25745,10.63009],[33.96162,9.58358],[33.963392794971185,9.464285229420625]]]}},{"type":"Feature","properties":{"abbrev":"Som.","name":"Somalia","name_long":"Somalia","iso_a2":"SO","iso_a3":"SOM","iso_n3":"706"},"geometry":{"type":"Polygon","coordinates":[[[49.72862,11.5789],[50.25878,11.67957],[50.73202,12.0219],[51.1112,12.02464],[51.13387,11.74815],[51.04153,11.16651],[51.04531,10.6409],[50.83418,10.27972],[50.55239,9.19874],[50.07092,8.08173],[49.4527,6.80466],[48.59455,5.33911],[47.74079,4.2194],[46.56476,2.85529],[45.56399,2.04576],[44.06815,1.05283],[43.13597,0.2922],[42.04157,-0.91916],[41.81095,-1.44647],[41.58513,-1.68325],[40.993,-0.85829],[40.98105,2.78452],[41.85508309264397,3.918911920483727],[42.12861,4.23413],[42.76967,4.25259],[43.66087,4.95755],[44.9636,5.00162],[47.78942,8.003],[48.48673587422695,8.837626247589995],[48.93812951029645,9.451748968946617],[48.93823286316103,9.973500067581512],[48.938491245322496,10.982327378783467],[48.94200524271835,11.394266058798138],[48.94820475850974,11.410617281697963],[49.26776,11.43033],[49.72862,11.5789]]]}},{"type":"Feature","properties":{"abbrev":"Swz.","name":"Swaziland","name_long":"Swaziland","iso_a2":"SZ","iso_a3":"SWZ","iso_n3":"748"},"geometry":{"type":"Polygon","coordinates":[[[32.07166548028107,-26.73382008230491],[31.868060337051077,-27.177927341421277],[31.282773064913325,-27.285879408478998],[30.68596194837448,-26.74384531016953],[30.676608514129637,-26.398078301704608],[30.949666782359913,-26.022649021104147],[31.04407962415715,-25.731452325139443],[31.333157586397906,-25.66019052500895],[31.837777947728064,-25.84333180105135],[31.98577924981197,-26.291779880480227],[32.07166548028107,-26.73382008230491]]]}},{"type":"Feature","properties":{"abbrev":"Chad","name":"Chad","name_long":"Chad","iso_a2":"TD","iso_a3":"TCD","iso_n3":"148"},"geometry":{"type":"Polygon","coordinates":[[[14.495787387762903,12.859396267137356],[14.595781284247607,13.330426947477859],[13.95447675950561,13.353448798063766],[13.956698846094127,13.996691189016929],[13.540393507550789,14.367133693901222],[13.97217,15.68437],[15.247731154041846,16.627305813050782],[15.30044111497972,17.927949937405003],[15.685740594147774,19.957180080642384],[15.903246697664313,20.387618923417506],[15.487148064850146,20.730414537025638],[15.47106,21.04845],[15.096887648181848,21.30851878507491],[14.8513,22.862950000000126],[15.86085,23.40972],[19.84926,21.49509],[23.837660000000138,19.580470000000105],[23.886890000000108,15.61084],[23.024590000000103,15.68072],[22.56795000000011,14.944290000000137],[22.30351,14.32682],[22.51202,14.09318],[22.18329,13.78648],[22.29658,13.37232],[22.03759,12.95546],[21.93681,12.588180000000136],[22.28801,12.64605],[22.49762,12.26024],[22.50869,11.67936],[22.87622,11.384610000000123],[22.864165480244253,11.142395127807617],[22.23112918466876,10.97188873946061],[21.72382164885954,10.567055568885962],[21.00086836109631,9.47598521569148],[20.05968549976427,9.01270600019484],[19.09400800952608,9.07484691002577],[18.81200971850927,8.982914536978626],[18.911021762780592,8.630894680206438],[18.389554884523303,8.281303615751881],[17.964929640380888,7.890914008002994],[16.70598839688637,7.508327541529979],[16.456184523187403,7.734773667832939],[16.290561557691888,7.754307359239418],[16.106231723706742,7.497087917506462],[15.279460483469164,7.421924546738012],[15.43609174974574,7.692812404811889],[15.120865512765306,8.382150173369437],[14.97999555833769,8.796104234243444],[14.544466586981855,8.96586131432224],[13.954218377344091,9.549494940626685],[14.171466098699113,10.021378282100045],[14.62720055508106,9.920919297724595],[14.9093538753948,9.99212942142276],[15.467872755605244,9.982336737503543],[14.923564894275046,10.891325181517516],[14.960151808337683,11.555574042197236],[14.89336,12.21905],[14.495787387762903,12.859396267137356]]]}},{"type":"Feature","properties":{"abbrev":"Togo","name":"Togo","name_long":"Togo","iso_a2":"TG","iso_a3":"TGO","iso_n3":"768"},"geometry":{"type":"Polygon","coordinates":[[[1.865240512712319,6.142157701029731],[1.060121697604927,5.928837388528876],[0.836931186536333,6.279978745952149],[0.570384148774849,6.914358628767189],[0.490957472342245,7.411744289576475],[0.712029249686878,8.31246450442383],[0.461191847342121,8.677222601756014],[0.365900506195885,9.465003973829482],[0.367579990245389,10.19121287682718],[-0.049784715159944,10.706917832883931],[0.023802524423701,11.018681748900804],[0.899563022474069,10.99733938236426],[0.772335646171484,10.470808213742359],[1.077795037448738,10.175606594275024],[1.425060662450136,9.825395412633],[1.46304284018467,9.334624335157088],[1.664477573258381,9.12859039960938],[1.618950636409238,6.832038072126237],[1.865240512712319,6.142157701029731]]]}},{"type":"Feature","properties":{"abbrev":"Tun.","name":"Tunisia","name_long":"Tunisia","iso_a2":"TN","iso_a3":"TUN","iso_n3":"788"},"geometry":{"type":"Polygon","coordinates":[[[9.482139926805274,30.307556057246188],[9.055602654668148,32.10269196220129],[8.439102817426118,32.50628489840082],[8.430472853233368,32.74833730725595],[7.612641635782182,33.34411489514896],[7.524481642292244,34.09737641045146],[8.140981479534304,34.65514598239379],[8.376367628623768,35.47987600355594],[8.217824334352315,36.433176988260286],[8.420964389691676,36.94642731378316],[9.509993523810607,37.349994411766545],[10.210002475636317,37.230001735984814],[10.18065026209453,36.724037787415085],[11.028867221733348,37.09210317641396],[11.100025668999251,36.899996039368915],[10.600004510143094,36.410000108377375],[10.593286573945136,35.94744436293281],[10.939518670300687,35.698984076473494],[10.807847120821009,34.83350718844919],[10.149592726287125,34.3307730168977],[10.339658644256616,33.78574168551532],[10.856836378633687,33.76874013929128],[11.108500603895122,33.293342800422195],[11.48878746913101,33.13699575452314],[11.432253452203696,32.368903103152874],[10.944789666394456,32.081814683555365],[10.636901482799487,31.761420803345754],[9.950225050505082,31.376069647745254],[10.056575148161755,30.9618313664936],[9.970017124072854,30.539324856075243],[9.482139926805274,30.307556057246188]]]}},{"type":"Feature","properties":{"abbrev":"Tanz.","name":"Tanzania","name_long":"Tanzania","iso_a2":"TZ","iso_a3":"TZA","iso_n3":"834"},"geometry":{"type":"Polygon","coordinates":[[[33.9037111971046,-0.95],[34.07262,-1.05982],[37.69869,-3.09699],[37.7669,-3.67712],[39.20222,-4.67677],[38.74054,-5.90895],[38.79977,-6.47566],[39.44,-6.839999999999861],[39.470000000000134,-7.1],[39.19469,-7.7039],[39.25203,-8.00781],[39.18652,-8.48551],[39.53574,-9.112369999999883],[39.9496,-10.0984],[40.31659,-10.317099999999868],[39.521,-10.89688],[38.42755659358778,-11.285202325081627],[37.82764,-11.26879],[37.47129,-11.56876],[36.77515099462289,-11.594537448780784],[36.514081658684404,-11.720938002166747],[35.31239790216915,-11.439146416879169],[34.559989047999466,-11.520020033415847],[34.28,-10.16],[33.940837724096525,-9.693673841980285],[33.73972,-9.41715],[32.75937544122138,-9.230599053589003],[32.19186486179194,-8.930358981973257],[31.556348097466635,-8.762048841998647],[31.15775133695007,-8.594578747317314],[30.74,-8.34],[30.2,-7.08],[29.62,-6.52],[29.419992710088305,-5.939998874539299],[29.51998660657307,-5.419978936386258],[29.33999759290037,-4.499983412294114],[29.753512404099865,-4.452389418153302],[30.11632,-4.09012],[30.50554,-3.56858],[30.75224,-3.35931],[30.74301,-3.03431],[30.52766,-2.80762],[30.46967,-2.41383],[30.758308953583136,-2.287250257988376],[30.81613488131785,-1.698914076345375],[30.4191048520193,-1.134659112150416],[30.769860000000108,-1.01455],[31.86617,-1.02736],[33.9037111971046,-0.95]]]}},{"type":"Feature","properties":{"abbrev":"Uga.","name":"Uganda","name_long":"Uganda","iso_a2":"UG","iso_a3":"UGA","iso_n3":"800"},"geometry":{"type":"Polygon","coordinates":[[[31.86617,-1.02736],[30.769860000000108,-1.01455],[30.4191048520193,-1.134659112150416],[29.821518588996124,-1.443322442229771],[29.579466180141022,-1.341313164885605],[29.58783776217217,-0.587405694179381],[29.8195,-0.2053],[29.875778842902434,0.597379868976361],[30.08615359876279,1.062312730306417],[30.46850752129029,1.583805446779706],[30.852670118948136,1.849396470543752],[31.17414920423596,2.204465236821306],[30.77332,2.339890000000139],[30.83385,3.50917],[31.24556,3.7819],[31.88145,3.55827],[32.68642,3.79232],[33.3900000000001,3.79],[34.005,4.249884947362147],[34.47913,3.5556],[34.59607,3.053740000000118],[35.03599,1.90584],[34.6721,1.17694],[34.18,0.515],[33.893568969666994,0.109813537861839],[33.9037111971046,-0.95],[31.86617,-1.02736]]]}},{"type":"Feature","properties":{"abbrev":"S.Af.","name":"South Africa","name_long":"South Africa","iso_a2":"ZA","iso_a3":"ZAF","iso_n3":"710"},"geometry":{"type":"Polygon","coordinates":[[[31.521001417778876,-29.257386976846252],[31.325561150851,-29.401977634398914],[30.901762729625343,-29.90995696382804],[30.622813348113823,-30.42377573010613],[30.05571618014278,-31.140269463832958],[28.925552605919535,-32.17204111097249],[28.2197558936771,-32.771952813448856],[27.464608188595975,-33.2269637997788],[26.419452345492825,-33.61495045342619],[25.90966434093349,-33.6670402971764],[25.780628289500697,-33.944646091448334],[25.172861769315972,-33.796851495093584],[24.677853224392123,-33.98717579522455],[23.594043409934642,-33.794474379208154],[22.988188917744733,-33.91643075941698],[22.574157342222236,-33.864082533505304],[21.542799106541025,-34.258838799782936],[20.689052768647002,-34.417175388325234],[20.071261020597632,-34.79513681410799],[19.61640506356457,-34.81916635512371],[19.193278435958717,-34.46259897230979],[18.85531456876987,-34.444305515278465],[18.42464318204938,-33.99787281670896],[18.377410922934615,-34.13652068454807],[18.244499139079917,-33.86775156019802],[18.250080193767445,-33.28143075941444],[17.92519046394844,-32.61129078545343],[18.247909783611192,-32.42913136162456],[18.22176150887148,-31.66163298922567],[17.56691775886887,-30.725721123987547],[17.064416131262703,-29.87864104585916],[17.062917514726223,-29.875953871379984],[16.344976840895242,-28.576705010697697],[16.824017368240902,-28.082161553664466],[17.218928663815404,-28.35594329194681],[17.387497185951503,-28.78351409272978],[17.83615197110953,-28.85637786226132],[18.464899122804752,-29.04546192801728],[19.002127312911085,-28.972443129188864],[19.894734327888614,-28.461104831660776],[19.895767856534434,-24.767790215760588],[20.165725538827186,-24.917961928000768],[20.758609246511835,-25.86813648855145],[20.66647016773544,-26.477453301704923],[20.88960900237174,-26.828542982695915],[21.60589603036939,-26.726533705351756],[22.105968865657868,-26.280256036079138],[22.57953169118059,-25.979447523708146],[22.8242712745149,-25.500458672794768],[23.312096795350186,-25.26868987396572],[23.73356977712271,-25.390129489851613],[24.211266717228792,-25.670215752873574],[25.025170525825786,-25.7196700985769],[25.66466637543772,-25.486816094669713],[25.76584882986521,-25.174845472923675],[25.94165205252216,-24.69637338633322],[26.4857532081233,-24.616326592713104],[26.786406691197413,-24.240690606383485],[27.119409620886245,-23.574323011979775],[28.01723595552525,-22.827753594659075],[29.43218834810904,-22.091312758067588],[29.839036899542972,-22.102216485281176],[30.322883335091774,-22.27161183033393],[30.65986535006709,-22.151567478119915],[31.191409132621285,-22.2515096981724],[31.670397983534652,-23.658969008073864],[31.93058882012425,-24.369416599222536],[31.75240848158188,-25.484283949487413],[31.837777947728064,-25.84333180105135],[31.333157586397906,-25.66019052500895],[31.04407962415715,-25.731452325139443],[30.949666782359913,-26.022649021104147],[30.676608514129637,-26.398078301704608],[30.68596194837448,-26.74384531016953],[31.282773064913325,-27.285879408478998],[31.868060337051077,-27.177927341421277],[32.07166548028107,-26.73382008230491],[32.830120477028885,-26.742191664336197],[32.580264926897684,-27.470157566031816],[32.46213260267845,-28.301011244420557],[32.20338870619304,-28.752404880490072],[31.521001417778876,-29.257386976846252]],[[28.97826256685724,-28.955596612261715],[28.541700066855498,-28.64750172293757],[28.07433841320778,-28.851468601193588],[27.532511020627478,-29.24271087007536],[26.999261915807637,-29.875953871379984],[27.749397006956485,-30.64510588961222],[28.107204624145425,-30.54573211031495],[28.29106937023991,-30.2262167294543],[28.84839969250774,-30.070050551068253],[29.018415154748023,-29.74376555757737],[29.325166456832587,-29.257386976846252],[28.97826256685724,-28.955596612261715]]]}},{"type":"Feature","properties":{"abbrev":"Zambia","name":"Zambia","name_long":"Zambia","iso_a2":"ZM","iso_a3":"ZMB","iso_n3":"894"},"geometry":{"type":"Polygon","coordinates":[[[32.75937544122132,-9.230599053589058],[33.2313879737753,-9.6767216935648],[33.48568769708359,-10.525558770391115],[33.315310499817286,-10.796549981329697],[33.11428917820191,-11.607198174692314],[33.306422153463075,-12.435778090060218],[32.991764357237884,-12.783870537978272],[32.68816531752313,-13.712857761289275],[33.214024692525214,-13.971860039936153],[30.17948123548183,-14.796099134991527],[30.274255812305107,-15.507786960515212],[29.516834344203147,-15.644677829656388],[28.947463413211263,-16.04305144619444],[28.825868768028496,-16.389748630440614],[28.467906121542683,-16.468400160388846],[27.598243442502756,-17.290830580314008],[27.04442711763073,-17.938026218337434],[26.70677330903564,-17.961228936436484],[26.381935255648926,-17.8460421688579],[25.264225701608012,-17.736539808831417],[25.08444339366457,-17.661815687737374],[25.07695031098226,-17.57882333747662],[24.682349074001507,-17.353410739819473],[24.033861525170778,-17.295843194246324],[23.215048455506064,-17.52311614346598],[22.56247846852426,-16.898451429921813],[21.887842644953874,-16.08031015387688],[21.933886346125917,-12.898437188369359],[24.016136508894675,-12.911046237848574],[23.930922072045377,-12.565847670138854],[24.079905226342845,-12.191296888887365],[23.904153680118185,-11.722281589406322],[24.017893507592586,-11.23729827234709],[23.912215203555718,-10.926826267137514],[24.25715538910399,-10.951992689663657],[24.31451622894795,-11.26282642989927],[24.78316979340295,-11.238693536018964],[25.418118116973204,-11.330935967659961],[25.752309604604733,-11.784965101776358],[26.553087599399618,-11.924439792532127],[27.164419793412463,-11.608748467661075],[27.38879886242378,-12.132747491100666],[28.155108676879987,-12.272480564017897],[28.523561639121027,-12.698604424696683],[28.934285922976837,-13.248958428605135],[29.69961388521949,-13.257226657771831],[29.61600141777123,-12.178894545137311],[29.34154788586909,-12.360743910372413],[28.642417433392353,-11.971568698782315],[28.372253045370428,-11.793646742401393],[28.49606977714177,-10.789883721564044],[28.67368167492893,-9.605924981324932],[28.449871046672826,-9.164918308146085],[28.7348665707625,-8.526559340044578],[29.002912225060467,-8.407031752153472],[30.346086053190813,-8.238256524288218],[30.740015496551788,-8.340007419470915],[31.15775133695005,-8.594578747317366],[31.556348097466497,-8.762048841998642],[32.19186486179197,-8.930358981973278],[32.75937544122132,-9.230599053589058]]]}},{"type":"Feature","properties":{"abbrev":"Zimb.","name":"Zimbabwe","name_long":"Zimbabwe","iso_a2":"ZW","iso_a3":"ZWE","iso_n3":"716"},"geometry":{"type":"Polygon","coordinates":[[[31.191409132621285,-22.2515096981724],[30.65986535006709,-22.151567478119915],[30.322883335091774,-22.27161183033393],[29.839036899542972,-22.102216485281176],[29.43218834810904,-22.091312758067588],[28.794656202924212,-21.63945403410745],[28.021370070108617,-21.485975030200585],[27.72722781750326,-20.851801853114715],[27.724747348753255,-20.499058526290387],[27.296504754350508,-20.391519870691],[26.164790887158485,-19.29308562589494],[25.85039147309473,-18.714412937090536],[25.649163445750162,-18.53602589281899],[25.264225701608012,-17.736539808831417],[26.381935255648926,-17.8460421688579],[26.70677330903564,-17.961228936436484],[27.04442711763073,-17.938026218337434],[27.598243442502756,-17.290830580314008],[28.467906121542683,-16.468400160388846],[28.825868768028496,-16.389748630440614],[28.947463413211263,-16.04305144619444],[29.516834344203147,-15.644677829656388],[30.274255812305107,-15.507786960515212],[30.338954705534544,-15.880839125230244],[31.173063999157677,-15.860943698797872],[31.636498243951195,-16.071990248277885],[31.8520406430406,-16.319417006091378],[32.32823896661022,-16.392074069893752],[32.847638787575846,-16.713398125884616],[32.84986087416439,-17.97905730557718],[32.65488569512715,-18.672089939043495],[32.61199425632489,-19.419382826416275],[32.772707960752626,-19.715592136313298],[32.65974327976258,-20.304290052982317],[32.50869306817344,-20.395292250248307],[32.244988234188014,-21.116488539313693],[31.191409132621285,-22.2515096981724]]]}},{"type":"Feature","properties":{"abbrev":"Alb.","name":"Albania","name_long":"Albania","iso_a2":"AL","iso_a3":"ALB","iso_n3":"008"},"geometry":{"type":"Polygon","coordinates":[[[20.590247430104906,41.855404161133606],[20.463175083099202,41.51508901627533],[20.605181919037364,41.08622630468522],[21.0200403174764,40.84272695572588],[20.999989861747224,40.58000397395397],[20.674996779063633,40.43499990494303],[20.615000441172754,40.11000682225938],[20.15001590341052,39.62499766698397],[19.980000441170144,39.69499339452341],[19.960001661873207,39.91500580500605],[19.406081984136733,40.250773423822466],[19.319058872157143,40.72723012955356],[19.40354983895429,41.40956574153546],[19.540027296637106,41.71998607031276],[19.37176883309496,41.877547512370654],[19.304486118250793,42.19574514420782],[19.738051385179627,42.688247382165564],[19.801613396898688,42.50009349219084],[20.0707,42.58863],[20.283754510181893,42.32025950781508],[20.52295,42.21787],[20.590247430104906,41.855404161133606]]]}},{"type":"Feature","properties":{"abbrev":"Aust.","name":"Austria","name_long":"Austria","iso_a2":"AT","iso_a3":"AUT","iso_n3":"040"},"geometry":{"type":"Polygon","coordinates":[[[16.979666782304037,48.123497015976305],[16.90375410326726,47.71486562762833],[16.340584344150415,47.71290192320123],[16.534267612380376,47.49617096616912],[16.202298211337364,46.85238597267696],[16.011663852612656,46.6836107448117],[15.137091912504985,46.65870270444703],[14.63247155117483,46.43181732846955],[13.806475457421527,46.509306138691215],[12.376485223040817,46.76755910906985],[12.153088006243054,47.11539317482645],[11.16482791509327,46.94157949481273],[11.048555942436536,46.75135854754634],[10.44270145024663,46.89354625099743],[9.932448357796659,46.92072805438296],[9.479969516649021,47.10280996356337],[9.632931756232978,47.34760122332999],[9.59422610844635,47.52505809182027],[9.896068149463188,47.580196845075704],[10.402083774465211,47.30248769793916],[10.544504021861627,47.56639923765377],[11.426414015354737,47.523766181012974],[12.141357456112788,47.703083401065776],[12.620759718484491,47.67238760028441],[12.932626987365948,47.467645575544],[13.02585127122049,47.637583523135824],[12.884102817443903,48.28914581968792],[13.243357374737,48.416114813829054],[13.595945672264437,48.87717194273715],[14.33889773932472,48.5553052842072],[14.901447381254057,48.964401760445824],[15.253415561593982,49.039074205107575],[16.02964725105022,48.73389903420793],[16.49928266771877,48.78580801044511],[16.960288120194576,48.5969823268506],[16.879982944413,48.47001333270947],[16.979666782304037,48.123497015976305]]]}},{"type":"Feature","properties":{"abbrev":"Belg.","name":"Belgium","name_long":"Belgium","iso_a2":"BE","iso_a3":"BEL","iso_n3":"056"},"geometry":{"type":"Polygon","coordinates":[[[3.314971144228537,51.345780951536085],[4.047071160507527,51.26725861266857],[4.973991326526914,51.475023708698124],[5.606975945670001,51.037298488969775],[6.156658155958779,50.80372101501058],[6.043073357781111,50.128051662794235],[5.782417433300906,50.09032786722122],[5.674051954784829,49.529483547557504],[4.799221632515809,49.985373033236385],[4.286022983425084,49.907496649772554],[3.588184441755686,50.37899241800358],[3.123251580425801,50.780363267614575],[2.658422071960274,50.79684804951574],[2.513573032246143,51.14850617126183],[3.314971144228537,51.345780951536085]]]}},{"type":"Feature","properties":{"abbrev":"Bulg.","name":"Bulgaria","name_long":"Bulgaria","iso_a2":"BG","iso_a3":"BGR","iso_n3":"100"},"geometry":{"type":"Polygon","coordinates":[[[22.65714969248299,44.23492300066128],[22.944832391051847,43.82378530534713],[23.33230228037632,43.89701080990471],[24.100679152124172,43.74105133724785],[25.569271681426926,43.68844472917472],[26.065158725699746,43.94349376075126],[27.242399529740908,44.175986029632405],[27.970107049275075,43.81246816667521],[28.558081495891997,43.70746165625813],[28.03909508638472,43.293171698574184],[27.67389773937805,42.577892361006214],[27.99672041190539,42.00735871028779],[27.135739373490477,42.14148489030134],[26.117041863720797,41.82690460872456],[26.106138136507212,41.32889883072778],[25.197201368925445,41.23448598893053],[24.49264489105803,41.583896185872035],[23.692073601992348,41.30908091894385],[22.952377150166452,41.33799388281115],[22.88137373219743,41.99929718685026],[22.380525750424592,42.32025950781509],[22.54501183440962,42.46136200618804],[22.43659467946128,42.580321153323936],[22.60480146657133,42.898518785161144],[22.986018507588483,43.211161200526966],[22.50015669118028,43.64281443946099],[22.410446404721597,44.00806346289995],[22.65714969248299,44.23492300066128]]]}},{"type":"Feature","properties":{"abbrev":"Bela.","name":"Belarus","name_long":"Belarus","iso_a2":"BY","iso_a3":"BLR","iso_n3":"112"},"geometry":{"type":"Polygon","coordinates":[[[23.48412763844985,53.91249766704114],[24.450683628037037,53.905702216194754],[25.536353794056993,54.28242340760253],[25.7684326514798,54.84696259217509],[26.58827924979039,55.16717560487167],[26.494331495883753,55.615106919977634],[27.10245975109453,55.783313707087686],[28.176709425577993,56.16912995057881],[29.229513380660308,55.918344224666356],[29.371571893030673,55.670090643936184],[29.896294386522356,55.78946320253041],[30.873909132620007,55.55097646750341],[30.971835971813135,55.08154775656404],[30.757533807098717,54.81177094178432],[31.38447228366374,54.157056382862436],[31.79142418796224,53.97463857687212],[31.731272820774507,53.79402944601202],[32.405598585751164,53.618045355842035],[32.69364301934604,53.35142080343212],[32.304519484188226,53.1327261419729],[31.49764367038293,53.1674268662569],[31.305200636528014,53.07399587667321],[31.54001834486226,52.74205231384636],[31.785998162571587,52.101677964885454],[30.927549269338982,52.04235342061438],[30.619454380014844,51.822806098022376],[30.555117221811457,51.31950348571566],[30.157363722460897,51.41613841410147],[29.254938185347925,51.368234361366895],[28.99283532076353,51.602044379271476],[28.61761274589225,51.42771393493484],[28.24161502453657,51.57222707783907],[27.454066196408434,51.59230337178447],[26.337958611768556,51.83228872334793],[25.327787713327005,51.91065603291855],[24.553106316839518,51.888461005249184],[24.00507775238421,51.61744395609446],[23.52707075368437,51.57845408793023],[23.508002150168693,52.02364655212473],[23.199493849386187,52.486977444053664],[23.799198846133375,52.69109935160657],[23.80493493011778,53.089731350306074],[23.527535841575002,53.470121568406555],[23.48412763844985,53.91249766704114]]]}},{"type":"Feature","properties":{"abbrev":"Switz.","name":"Switzerland","name_long":"Switzerland","iso_a2":"CH","iso_a3":"CHE","iso_n3":"756"},"geometry":{"type":"Polygon","coordinates":[[[9.59422610844635,47.52505809182027],[9.632931756232978,47.34760122332999],[9.479969516649021,47.10280996356337],[9.932448357796659,46.92072805438296],[10.44270145024663,46.89354625099743],[10.363378126678612,46.48357127540986],[9.92283654139038,46.31489940040919],[9.182881707403055,46.44021474871698],[8.966305779667806,46.036931871111186],[8.489952426801324,46.005150865251686],[8.31662967289438,46.16364248309086],[7.755992058959833,45.82449005795931],[7.273850945676656,45.776947740250776],[6.843592970414504,45.99114655210061],[6.500099724970425,46.42967275652944],[6.022609490593537,46.27298981382047],[6.037388950229001,46.725778713561866],[6.768713820023606,47.2877082383037],[6.736571079138059,47.541801255882845],[7.192202182655507,47.44976552997102],[7.46675906742223,47.62058197691181],[8.317301466514152,47.61357982033626],[8.522611932009765,47.830827541691285],[9.59422610844635,47.52505809182027]]]}},{"type":"Feature","properties":{"abbrev":"B.H.","name":"Bosnia and Herz.","name_long":"Bosnia and Herzegovina","iso_a2":"BA","iso_a3":"BIH","iso_n3":"070"},"geometry":{"type":"Polygon","coordinates":[[[19.00548628101012,44.86023366960916],[19.36803,44.863],[19.11761,44.42307000000011],[19.59976,44.03847],[19.454,43.56810000000013],[19.21852,43.52384],[19.03165,43.43253],[18.70648,43.20011],[18.56,42.65],[17.674921502358984,43.02856252702361],[17.297373488034452,43.44634064388736],[16.91615644701733,43.66772247982567],[16.456442905348865,44.04123973243128],[16.23966027188453,44.35114329688571],[15.750026075918981,44.81871165626256],[15.959367303133376,45.233776760430935],[16.318156772535872,45.00412669532591],[16.534939406000206,45.21160757097772],[17.002146030351014,45.233776760430935],[17.861783481526402,45.067740383477144],[18.553214145591653,45.08158966733145],[19.00548628101012,44.86023366960916]]]}},{"type":"Feature","properties":{"abbrev":"Cz. Rep.","name":"Czech Rep.","name_long":"Czech Republic","iso_a2":"CZ","iso_a3":"CZE","iso_n3":"203"},"geometry":{"type":"Polygon","coordinates":[[[16.960288120194576,48.5969823268506],[16.49928266771877,48.78580801044511],[16.02964725105022,48.73389903420793],[15.253415561593982,49.039074205107575],[14.901447381254057,48.964401760445824],[14.33889773932472,48.5553052842072],[13.595945672264437,48.87717194273715],[13.031328973043431,49.30706818297324],[12.521024204161192,49.547415269562734],[12.415190870827445,49.96912079528057],[12.240111118222558,50.266337795607285],[12.966836785543194,50.484076443069085],[13.338131951560285,50.73323436136435],[14.056227654688172,50.92691762959429],[14.307013380600637,51.117267767941414],[14.570718214586066,51.002339382524276],[15.01699588385867,51.10667409932158],[15.490972120839727,50.78472992614321],[16.23862674323857,50.69773265237984],[16.176253289462267,50.42260732685791],[16.719475945714436,50.21574656839354],[16.868769158605655,50.47397370055603],[17.55456709155112,50.36214590107641],[17.64944502123899,50.049038397819956],[18.392913852622172,49.98862864847075],[18.853144158613617,49.49622976337764],[18.554971144289482,49.49501536721878],[18.399993523846177,49.31500051533004],[18.170498488037964,49.271514797556435],[18.104972771891852,49.04398346617531],[17.913511590250465,48.996492824899086],[17.88648481616181,48.90347524677371],[17.545006951577108,48.80001902932537],[17.101984897538898,48.81696889911711],[16.960288120194576,48.5969823268506]]]}},{"type":"Feature","properties":{"abbrev":"Ger.","name":"Germany","name_long":"Germany","iso_a2":"DE","iso_a3":"DEU","iso_n3":"276"},"geometry":{"type":"Polygon","coordinates":[[[9.921906365609232,54.983104153048025],[9.9395797054529,54.596641954153256],[10.950112338920519,54.363607082733154],[10.939466993868448,54.00869334575258],[11.956252475643282,54.19648550070116],[12.518440382546714,54.47037059184799],[13.647467075259499,54.0755109727059],[14.119686313542559,53.75702912049103],[14.353315463934168,53.248171291713106],[14.074521111719434,52.98126251892535],[14.4375997250022,52.624850165408304],[14.685026482815713,52.089947414755216],[14.607098422919648,51.745188096719964],[15.016995883858781,51.10667409932171],[14.570718214586122,51.00233938252438],[14.307013380600665,51.11726776794137],[14.056227654688314,50.92691762959435],[13.338131951560397,50.73323436136428],[12.96683678554325,50.48407644306917],[12.240111118222671,50.26633779560723],[12.415190870827473,49.96912079528062],[12.521024204161336,49.54741526956275],[13.031328973043514,49.30706818297324],[13.595945672264577,48.877171942737164],[13.243357374737116,48.41611481382903],[12.884102817443873,48.28914581968786],[13.025851271220517,47.63758352313595],[12.932626987366064,47.467645575544],[12.620759718484521,47.672387600284424],[12.141357456112871,47.70308340106578],[11.426414015354851,47.52376618101306],[10.544504021861597,47.5663992376538],[10.402083774465325,47.30248769793916],[9.896068149463188,47.580196845075704],[9.594226108446376,47.5250580918202],[8.522611932009795,47.83082754169135],[8.317301466514095,47.61357982033627],[7.466759067422288,47.62058197691192],[7.593676385131062,48.33301911070373],[8.099278598674855,49.01778351500343],[6.658229607783709,49.20195831969164],[6.186320428094177,49.463802802114515],[6.242751092156993,49.90222565367873],[6.043073357781111,50.128051662794235],[6.156658155958779,50.80372101501058],[5.988658074577813,51.851615709025054],[6.589396599970826,51.852029120483394],[6.842869500362383,52.22844025329755],[7.092053256873896,53.14404328064489],[6.905139601274129,53.48216217713064],[7.100424838905268,53.69393219666267],[7.936239454793962,53.74829580343379],[8.121706170289485,53.52779246684429],[8.800734490604668,54.020785630908904],[8.572117954145368,54.39564647075405],[8.526229282270208,54.96274363872516],[9.282048780971136,54.83086538351631],[9.921906365609232,54.983104153048025]]]}},{"type":"Feature","properties":{"abbrev":"Den.","name":"Denmark","name_long":"Denmark","iso_a2":"DK","iso_a3":"DNK","iso_n3":"208"},"geometry":{"type":"MultiPolygon","coordinates":[[[[12.69000613775563,55.609990953180784],[12.089991082414741,54.80001455343793],[11.043543328504228,55.364863796604254],[10.903913608451631,55.77995473898875],[12.370904168353292,56.111407375708836],[12.69000613775563,55.609990953180784]]],[[[10.912181837618363,56.458621324277914],[10.667803989309988,56.08138336854722],[10.369992710011985,56.19000722922473],[9.649984978889307,55.469999498102055],[9.921906365609175,54.98310415304806],[9.282048780971136,54.83086538351616],[8.526229282270236,54.96274363872499],[8.120310906617588,55.517722683323626],[8.08997684086225,56.540011705137594],[8.256581658571264,56.8099693874303],[8.543437534223386,57.110002753316905],[9.42446902836761,57.17206614849948],[9.775558709358563,57.447940782289656],[10.580005730846153,57.73001658795485],[10.546105991262692,57.215732733786155],[10.250000034230226,56.89001618105047],[10.369992710011985,56.609981594460834],[10.912181837618363,56.458621324277914]]]]}},{"type":"Feature","properties":{"abbrev":"Sp.","name":"Spain","name_long":"Spain","iso_a2":"ES","iso_a3":"ESP","iso_n3":"724"},"geometry":{"type":"Polygon","coordinates":[[[-9.034817674180246,41.88057058365967],[-8.984433152695672,42.59277517350627],[-9.392883673530648,43.0266246608127],[-7.978189663108309,43.748337714200986],[-6.754491746436756,43.567909450853925],[-5.411886359061596,43.574239813809676],[-4.347842779955783,43.40344920508504],[-3.51753170410609,43.4559007838613],[-1.901351284177764,43.42280202897834],[-1.502770961910528,43.03401439063043],[0.338046909190581,42.57954600683954],[0.701590610363894,42.7957343613326],[1.826793247087153,42.34338471126569],[2.985998976258458,42.47301504166986],[3.039484083680549,41.892120266276905],[2.091841668312185,41.22608856868309],[0.810524529635188,41.01473196060934],[0.721331007499401,40.678318386389236],[0.106691521819869,40.12393362076202],[-0.278711310212941,39.30997813573272],[0.111290724293838,38.73851430923303],[-0.467123582349103,38.29236583104115],[-0.683389451490598,37.642353827457825],[-1.438382127274849,37.443063666324214],[-2.146452602538119,36.67414419203728],[-3.415780808923387,36.65889964451118],[-4.368900926114719,36.677839056946155],[-4.995219285492211,36.32470815687964],[-5.377159796561457,35.946850083961465],[-5.866432257500904,36.02981659600606],[-6.236693894872175,36.367677110330334],[-6.520190802425404,36.94291331638732],[-7.453725551778092,37.09778758396607],[-7.537105475281024,37.42890432387623],[-7.166507941099865,37.803894354802225],[-7.029281175148796,38.07576406508977],[-7.374092169616318,38.37305858006492],[-7.098036668313128,39.03007274022378],[-7.498632371439725,39.62957103124181],[-7.066591559263529,39.71189158788277],[-7.026413133156595,40.184524237624245],[-6.864019944679385,40.33087189387483],[-6.851126674822552,41.11108266861753],[-6.389087693700915,41.381815497394655],[-6.668605515967656,41.883386949219584],[-7.251308966490824,41.91834605566505],[-7.422512986673795,41.79207469335983],[-8.013174607769912,41.790886135417125],[-8.263856980817792,42.28046865495034],[-8.67194576662672,42.13468943945496],[-9.034817674180246,41.88057058365967]]]}},{"type":"Feature","properties":{"abbrev":"Est.","name":"Estonia","name_long":"Estonia","iso_a2":"EE","iso_a3":"EST","iso_n3":"233"},"geometry":{"type":"Polygon","coordinates":[[[24.312862583114622,57.79342357037698],[24.42892785004216,58.38341339785328],[24.061198357853186,58.25737457949341],[23.42656009287668,58.612753404364625],[23.339795363058645,59.18724030215338],[24.604214308376182,59.46585378685502],[25.86418908051664,59.61109039981134],[26.949135776484525,59.445803331125774],[27.981114129353244,59.47538808861287],[28.13169925305175,59.30082510033092],[27.42016645682494,58.72458120384424],[27.71668582531572,57.79189911562437],[27.28818484875151,57.47452830670383],[26.463532342237787,57.47638865826633],[25.602809685984365,57.84752879498657],[25.16459354014927,57.97015696881519],[24.312862583114622,57.79342357037698]]]}},{"type":"Feature","properties":{"abbrev":"Fin.","name":"Finland","name_long":"Finland","iso_a2":"FI","iso_a3":"FIN","iso_n3":"246"},"geometry":{"type":"Polygon","coordinates":[[[28.591929559043194,69.06477692328666],[28.445943637818658,68.36461294216404],[29.977426385220607,67.69829702419266],[29.054588657352326,66.94428620062193],[30.21765,65.80598],[29.544429559046986,64.94867157659048],[30.44468468600371,64.20445343693909],[30.035872430142714,63.55281362573855],[31.51609215671112,62.86768748641288],[31.139991082490894,62.35769277612441],[30.211107212044446,61.78002777774969],[28.069997592895277,60.503516547275844],[26.25517296723697,60.4239606797625],[24.496623976344523,60.05731639265165],[22.869694858499457,59.846373196036225],[22.290763787533592,60.39192129174154],[21.322244093519316,60.72016998965952],[21.544866163832694,61.7053294948718],[21.05921105315369,62.60739329695874],[21.536029493910803,63.18973501245587],[22.442744174903993,63.81781037053129],[24.730511508897536,64.90234365504082],[25.398067661243942,65.11142650009373],[25.294043003040404,65.53434642197045],[23.903378533633802,66.00692739527962],[23.565879754335583,66.39605093043743],[23.53947309743444,67.93600861273525],[21.978534783626117,68.6168456081807],[20.645592889089528,69.10624726020087],[21.244936150810673,69.37044302029307],[22.356237827247412,68.84174144151491],[23.66204959483076,68.89124746365054],[24.735679152126725,68.64955678982146],[25.68921268077636,69.09211375596904],[26.17962202322624,69.82529897732614],[27.732292107867863,70.16419302029625],[29.01557295097197,69.76649119737799],[28.591929559043194,69.06477692328666]]]}},{"type":"Feature","properties":{"abbrev":"Fr.","name":"France","name_long":"France","iso_a2":"FR","iso_a3":"FRA","iso_n3":"250"},"geometry":{"type":"MultiPolygon","coordinates":[[[[-52.55642473001839,2.504705308437053],[-52.93965715189498,2.124857692875622],[-53.418465135295264,2.053389187016037],[-53.554839240113495,2.334896551925965],[-53.77852067728889,2.376702785650053],[-54.08806250671728,2.105556545414629],[-54.52475419779975,2.311848863123785],[-54.27122962097578,2.738747870286943],[-54.18428402364474,3.194172268075235],[-54.01150387227682,3.622569891774858],[-54.399542202356514,4.212611395683481],[-54.47863298197922,4.896755682795643],[-53.95804460307093,5.756548163267809],[-53.618452928264844,5.646529038918402],[-52.88214128275408,5.409850979021599],[-51.82334286152593,4.565768133966145],[-51.65779741067888,4.156232408053029],[-52.24933753112398,3.241094468596287],[-52.55642473001839,2.504705308437053]]],[[[9.560016310269134,42.15249197037957],[9.229752231491773,41.38000682226445],[8.77572309737536,41.58361196549444],[8.54421268070783,42.25651662858308],[8.746009148807588,42.62812185319396],[9.390000848028905,43.00998484961474],[9.560016310269134,42.15249197037957]]],[[[3.588184441755715,50.37899241800358],[4.28602298342514,49.907496649772554],[4.799221632515753,49.98537303323633],[5.674051954784885,49.52948354755745],[5.897759230176376,49.44266714130717],[6.186320428094206,49.46380280211446],[6.658229607783539,49.20195831969155],[8.099278598674772,49.01778351500337],[7.593676385131062,48.33301911070373],[7.46675906742223,47.620581976911865],[7.192202182655535,47.44976552997099],[6.736571079138088,47.54180125588289],[6.768713820023634,47.28770823830368],[6.037388950228972,46.72577871356191],[6.022609490593567,46.272989813820516],[6.500099724970454,46.42967275652944],[6.843592970414562,45.99114655210067],[6.802355177445662,45.70857982032867],[7.096652459347837,45.333098863295874],[6.749955275101711,45.02851797136759],[7.007562290076663,44.25476675066139],[7.549596388386163,44.12790110938482],[7.435184767291843,43.69384491634918],[6.529245232783068,43.12889232031836],[4.556962517931396,43.39965098731158],[3.10041059735272,43.075200507167125],[2.985998976258486,42.47301504166989],[1.826793247087181,42.34338471126566],[0.701590610363922,42.79573436133265],[0.338046909190581,42.579546006839564],[-1.502770961910471,43.03401439063049],[-1.901351284177735,43.42280202897834],[-1.384225226232957,44.02261037859017],[-1.193797573237362,46.014917710954876],[-2.225724249673789,47.06436269793821],[-2.963276129559574,47.570326646507965],[-4.491554938159481,47.95495433205642],[-4.592349819344747,48.68416046812695],[-3.295813971357745,48.901692409859635],[-1.616510789384932,48.644421291694584],[-1.933494025063254,49.776341864615766],[-0.98946895995536,49.347375800160876],[1.338761020522753,50.12717316344526],[1.6390010921385,50.946606350297515],[2.513573032246171,51.14850617126185],[2.658422071960331,50.79684804951566],[3.123251580425716,50.78036326761452],[3.588184441755715,50.37899241800358]]]]}},{"type":"Feature","properties":{"abbrev":"U.K.","name":"United Kingdom","name_long":"United Kingdom","iso_a2":"GB","iso_a3":"GBR","iso_n3":"826"},"geometry":{"type":"MultiPolygon","coordinates":[[[[-5.661948614921897,54.55460317648385],[-6.197884894220977,53.86756500916334],[-6.953730231137996,54.073702297575636],[-7.572167934591079,54.05995636658599],[-7.366030646178785,54.595840969452695],[-7.572167934591079,55.1316222194549],[-6.733847011736145,55.1728600124238],[-5.661948614921897,54.55460317648385]]],[[[-3.005004848635281,58.63500010846633],[-4.073828497728016,57.55302480735525],[-3.055001796877661,57.69001902936095],[-1.959280564776918,57.68479970969951],[-2.219988165689301,56.87001740175353],[-3.119003058271118,55.973793036515474],[-2.085009324543023,55.90999848085127],[-2.005675679673857,55.80490285035023],[-1.11499101399221,54.62498647726539],[-0.4304849918542,54.46437612570216],[0.184981316742039,53.32501414653103],[0.469976840831777,52.92999949809197],[1.681530795914739,52.739520168664],[1.559987827164377,52.09999848083601],[1.050561557630914,51.806760565795685],[1.449865349950301,51.28942780212196],[0.550333693045502,50.765738837275876],[-0.78751746255864,50.77498891865622],[-2.489997524414377,50.50001862243124],[-2.956273972984036,50.696879991247016],[-3.617448085942328,50.22835561787272],[-4.542507900399244,50.34183706318566],[-5.245023159191135,49.95999990498108],[-5.776566941745301,50.15967763935682],[-4.309989793301838,51.21000112568916],[-3.414850633142123,51.42600861266925],[-3.422719467108323,51.42684816740609],[-4.984367234710874,51.593466091510976],[-5.267295701508885,51.99140045837458],[-4.222346564134853,52.301355699261364],[-4.770013393564113,52.840004991255626],[-4.579999152026915,53.49500377055517],[-3.093830673788659,53.404547400669685],[-3.092079637047106,53.404440822963544],[-2.945008510744344,53.984999701546684],[-3.614700825433034,54.600936773292574],[-3.63000545898933,54.615012925833014],[-4.844169073903004,54.790971177786844],[-5.082526617849226,55.06160065369937],[-4.719112107756644,55.50847260194348],[-5.047980922862109,55.78398550070752],[-5.586397670911139,55.31114614523682],[-5.644998745130181,56.275014960344805],[-6.149980841486354,56.78500967063354],[-5.786824713555291,57.81884837506465],[-5.009998745127575,58.63001333275005],[-4.211494513353557,58.55084503847917],[-3.005004848635281,58.63500010846633]]]]}},{"type":"Feature","properties":{"abbrev":"Cro.","name":"Croatia","name_long":"Croatia","iso_a2":"HR","iso_a3":"HRV","iso_n3":"191"},"geometry":{"type":"Polygon","coordinates":[[[18.829838087650046,45.908877671891844],[19.072768995854176,45.52151113543209],[19.39047570158459,45.236515611342384],[19.00548628101012,44.86023366960916],[18.553214145591653,45.08158966733145],[17.861783481526402,45.067740383477144],[17.002146030351014,45.233776760430935],[16.534939406000206,45.21160757097772],[16.318156772535872,45.00412669532591],[15.959367303133376,45.233776760430935],[15.750026075918981,44.81871165626256],[16.23966027188453,44.35114329688571],[16.456442905348865,44.04123973243128],[16.91615644701733,43.66772247982567],[17.297373488034452,43.44634064388736],[17.674921502358984,43.02856252702361],[18.56,42.65],[18.450016310304818,42.47999136002932],[17.509970330483327,42.849994615239154],[16.930005730871642,43.20999848080038],[16.015384555737683,43.50721548112722],[15.174453973052096,44.243191229827914],[15.376250441151795,44.31791535092208],[14.920309279040508,44.73848399512946],[14.901602410550877,45.07606028907611],[14.258747592839995,45.233776760430935],[13.952254672917034,44.80212352149687],[13.656975538801191,45.13693512631596],[13.67940311041582,45.48414907488501],[13.715059848697251,45.500323798192426],[14.4119682145855,45.46616567644742],[14.595109490627918,45.63494090431282],[14.935243767972963,45.471695054702764],[15.327674594797427,45.452316392593325],[15.323953891672431,45.731782538427694],[15.671529575267641,45.8341535507979],[15.768732944408612,46.23810822202353],[16.564808383864943,46.50375092221981],[16.882515089595415,46.38063182228444],[17.630066359129557,45.9517691106941],[18.45606245288286,45.75948110613615],[18.829838087650046,45.908877671891844]]]}},{"type":"Feature","properties":{"abbrev":"Ire.","name":"Ireland","name_long":"Ireland","iso_a2":"IE","iso_a3":"IRL","iso_n3":"372"},"geometry":{"type":"Polygon","coordinates":[[[-6.197884894220991,53.86756500916336],[-6.03298539877761,53.15316417094435],[-6.788856573910849,52.260117906292336],[-8.56161658368356,51.669301255899356],[-9.977085740590269,51.82045482035307],[-9.16628251793078,52.86462881124268],[-9.688524542672454,53.8813626165853],[-8.327987433292009,54.66451894796863],[-7.572167934591064,55.13162221945487],[-7.366030646178785,54.59584096945272],[-7.572167934591064,54.059956366586],[-6.953730231138067,54.073702297575636],[-6.197884894220991,53.86756500916336]]]}},{"type":"Feature","properties":{"abbrev":"Greece","name":"Greece","name_long":"Greece","iso_a2":"GR","iso_a3":"GRC","iso_n3":"300"},"geometry":{"type":"MultiPolygon","coordinates":[[[[23.699980096133004,35.70500438083553],[24.24666507334868,35.368022365860156],[25.02501549652888,35.42499563246198],[25.769207797964185,35.35401805270908],[25.745023227651586,35.179997666966216],[26.290002882601723,35.29999034274792],[26.16499759288766,35.004995429009796],[24.724982130642303,34.91998769788961],[24.735007358506945,35.08499054619759],[23.51497846852811,35.27999156345098],[23.699980096133004,35.70500438083553]]],[[[26.604195590936282,41.562114569661105],[26.29460208507578,40.93626129817426],[26.056942172965506,40.824123440100834],[25.447677036244187,40.85254547786147],[24.92584842296094,40.94706167252323],[23.714811232200816,40.687129218095116],[24.407998894964066,40.1249929876241],[23.899967889102584,39.96200552017558],[23.3429993018608,39.96099782974579],[22.81398766448896,40.476005153966554],[22.62629886240478,40.25656118423919],[22.849747755634805,39.65931081802577],[23.3500272966526,39.19001129816726],[22.973099399515547,38.97090322524966],[23.530016310324953,38.51000112563847],[24.025024855248944,38.21999298761645],[24.040011020613605,37.655014553369426],[23.115002882589152,37.92001129816222],[23.409971958111072,37.409990749657396],[22.774971958108633,37.30501007745656],[23.15422529469862,36.422505804992056],[22.490028110451107,36.41000010837746],[21.670026482843696,36.8449864771942],[21.295010613701574,37.644989325504696],[21.120034213961333,38.31032339126273],[20.730032179454582,38.769985256498785],[20.217712029712857,39.340234686839636],[20.15001590341052,39.62499766698403],[20.615000441172782,40.11000682225943],[20.674996779063633,40.434999904943055],[20.99998986174728,40.58000397395397],[21.02004031747643,40.84272695572588],[21.674160597426976,40.93127452245798],[22.05537763844427,41.14986583105269],[22.597308383889015,41.130487168943205],[22.76177,41.3048],[22.952377150166566,41.33799388281122],[23.692073601992462,41.30908091894386],[24.49264489105803,41.58389618587205],[25.197201368925533,41.23448598893066],[26.106138136507184,41.32889883072784],[26.117041863720914,41.82690460872473],[26.604195590936282,41.562114569661105]]]]}},{"type":"Feature","properties":{"abbrev":"Iceland","name":"Iceland","name_long":"Iceland","iso_a2":"IS","iso_a3":"ISL","iso_n3":"352"},"geometry":{"type":"Polygon","coordinates":[[[-14.508695441129236,66.45589223903141],[-14.739637417041605,65.8087482774403],[-13.60973222497981,65.12667104761987],[-14.909833746794902,64.36408193628868],[-17.794438035543422,63.67874909123385],[-18.656245896874992,63.49638296167582],[-19.97275468594276,63.64363495549153],[-22.762971971110158,63.960178941495386],[-21.778484259517683,64.40211579045551],[-23.95504391121911,64.89112986923348],[-22.184402635170358,65.0849681667603],[-22.227423265053332,65.37859365504272],[-24.326184047939336,65.61118927678847],[-23.65051469572309,66.26251902939522],[-22.134922451250883,66.41046865504687],[-20.57628373867955,65.73211212835143],[-19.05684160000159,66.27660085719477],[-17.79862382655905,65.99385325790978],[-16.167818976292125,66.52679230413587],[-14.508695441129236,66.45589223903141]]]}},{"type":"Feature","properties":{"abbrev":"Hun.","name":"Hungary","name_long":"Hungary","iso_a2":"HU","iso_a3":"HUN","iso_n3":"348"},"geometry":{"type":"Polygon","coordinates":[[[16.202298211337364,46.85238597267696],[16.534267612380376,47.49617096616912],[16.340584344150415,47.71290192320123],[16.90375410326726,47.71486562762833],[16.979666782304037,48.123497015976305],[17.48847293464982,47.86746613218621],[17.857132602620027,47.758428860050365],[18.696512892336926,47.880953681014404],[18.77702477384767,48.081768296900634],[19.17436486173989,48.11137889260387],[19.661363559658497,48.26661489520866],[19.769470656013112,48.202691148463614],[20.239054396249347,48.32756724709692],[20.473562045989866,48.56285004332181],[20.801293979584926,48.623854071642384],[21.872236362401736,48.31997081155002],[22.08560835133485,48.42226430927179],[22.640819939878753,48.15023956968735],[22.710531447040495,47.88219391538941],[22.099767693782834,47.6724392767167],[21.62651492685387,46.99423777931816],[21.02195234547125,46.3160879583519],[20.220192498462836,46.127468980486555],[19.596044549241583,46.17172984474454],[18.82983808764996,45.90887767189193],[18.45606245288286,45.759481106136136],[17.630066359129557,45.95176911069419],[16.8825150895953,46.38063182228444],[16.564808383864857,46.50375092221983],[16.370504998447416,46.8413272161665],[16.202298211337364,46.85238597267696]]]}},{"type":"Feature","properties":{"abbrev":"Italy","name":"Italy","name_long":"Italy","iso_a2":"IT","iso_a3":"ITA","iso_n3":"380"},"geometry":{"type":"MultiPolygon","coordinates":[[[[15.520376010813834,38.23115509699147],[15.160242954171736,37.44404551853782],[15.309897902089006,37.1342194687318],[15.099988234119449,36.6199872909954],[14.335228712632016,36.996630967754754],[13.826732618879928,37.10453135838019],[12.431003859108813,37.61294993748381],[12.570943637755136,38.12638113051968],[13.741156447004585,38.03496552179536],[14.76124922044616,38.143873602850505],[15.520376010813834,38.23115509699147]]],[[[9.210011834356266,41.20999136002422],[9.809975213264977,40.5000088567661],[9.669518670295673,39.177376410471794],[9.21481774255949,39.240473334300134],[8.80693566247973,38.90661774347847],[8.428302443077115,39.17184703221662],[8.38825320805094,40.378310858718805],[8.15999840661766,40.95000722916379],[8.709990675500109,40.89998444270523],[9.210011834356266,41.20999136002422]]],[[[12.376485223040843,46.76755910906987],[13.806475457421556,46.50930613869119],[13.698109978905478,46.016778062517375],[13.937630242578335,45.591015936864665],[13.141606479554298,45.73669179949541],[12.328581170306306,45.38177806251485],[12.383874952858605,44.88537425391908],[12.261453484759159,44.600482082694015],[12.589237094786483,44.091365871754476],[13.526905958722494,43.5877273626379],[14.029820997787027,42.76100779883248],[15.142569614327956,41.955139675456905],[15.926191033601896,41.96131500911574],[16.169897088290412,41.74029490820342],[15.889345737377797,41.5410822617182],[16.785001661860576,41.179605617836586],[17.519168735431208,40.87714345963224],[18.376687452882575,40.35562490494266],[18.4802470231954,40.168866278639825],[18.293385044028096,39.81077444107325],[17.738380161213286,40.2776710068303],[16.869595981522338,40.44223460546385],[16.448743116937322,39.79540070246648],[17.1714896989715,39.42469981542072],[17.05284061042934,38.9028712021373],[16.635088331781844,38.8435724960824],[16.100960727613057,37.98589874933418],[15.684086948314501,37.90884918878703],[15.687962680736321,38.214592800441864],[15.891981235424707,38.750942491199226],[16.109332309644312,38.96454702407769],[15.718813510814641,39.544072374014945],[15.413612501698822,40.04835683853517],[14.998495721098237,40.17294871679093],[14.70326826341477,40.604550279292624],[14.060671827865264,40.78634796809544],[13.627985060285397,41.188287258461656],[12.88808190273042,41.25308950455562],[12.10668257004491,41.70453481705741],[11.191906365614187,42.35542531998967],[10.511947869517797,42.931462510747224],[10.200028924204048,43.920006822274615],[9.702488234097814,44.03627879493132],[8.88894616052687,44.36633616797954],[8.428560825238577,44.23122813575242],[7.850766635783201,43.76714793555524],[7.435184767291843,43.69384491634918],[7.549596388386163,44.12790110938482],[7.007562290076663,44.25476675066139],[6.749955275101711,45.02851797136759],[7.096652459347837,45.333098863295874],[6.802355177445662,45.70857982032867],[6.843592970414562,45.99114655210067],[7.273850945676685,45.77694774025076],[7.755992058959833,45.82449005795928],[8.31662967289438,46.163642483090854],[8.489952426801295,46.00515086525175],[8.966305779667834,46.036931871111165],[9.182881707403112,46.44021474871698],[9.922836541390353,46.31489940040919],[10.363378126678668,46.483571275409844],[10.442701450246602,46.893546250997446],[11.048555942436508,46.7513585475464],[11.164827915093326,46.94157949481274],[12.153088006243081,47.11539317482644],[12.376485223040843,46.76755910906987]]]]}},{"type":"Feature","properties":{"abbrev":"Kos.","name":"Kosovo","name_long":"Kosovo","iso_a2":null,"iso_a3":null,"iso_n3":null},"geometry":{"type":"Polygon","coordinates":[[[20.76216,42.05186],[20.71731000000011,41.84711],[20.59023,41.85541],[20.52295,42.21787],[20.28374,42.3202500000001],[20.0707,42.58863],[20.25758,42.81275000000011],[20.49679,42.88469],[20.63508,43.21671],[20.81448,43.27205],[20.95651,43.13094],[21.143395,43.06868500000012],[21.27421,42.90959],[21.43866,42.86255],[21.63302,42.67717],[21.77505,42.6827],[21.66292,42.43922],[21.54332,42.3202500000001],[21.57663598940212,42.24522439706186],[21.35270000000014,42.2068],[20.76216,42.05186]]]}},{"type":"Feature","properties":{"abbrev":"Lith.","name":"Lithuania","name_long":"Lithuania","iso_a2":"LT","iso_a3":"LTU","iso_n3":"440"},"geometry":{"type":"Polygon","coordinates":[[[22.731098667092652,54.327536932993326],[22.65105187347254,54.582740993866736],[22.75776370615526,54.85657440858138],[22.315723504330577,55.015298570365864],[21.268448927503467,55.190481675835315],[21.055800408622414,56.03107636171106],[22.201156853939494,56.33780182557948],[23.878263787539964,56.273671373105266],[24.860684441840757,56.37252838807963],[25.000934279080894,56.16453074810484],[25.533046502390334,56.10029694276603],[26.494331495883753,55.615106919977634],[26.58827924979039,55.16717560487167],[25.7684326514798,54.84696259217509],[25.536353794056993,54.28242340760253],[24.450683628037037,53.905702216194754],[23.48412763844985,53.91249766704114],[23.24398725758951,54.22056671814914],[22.731098667092652,54.327536932993326]]]}},{"type":"Feature","properties":{"abbrev":"Lat.","name":"Latvia","name_long":"Latvia","iso_a2":"LV","iso_a3":"LVA","iso_n3":"428"},"geometry":{"type":"Polygon","coordinates":[[[21.055800408622414,56.03107636171106],[21.09042361825797,56.78387278912293],[21.581866489353672,57.41187063254993],[22.524341261492875,57.75337433535076],[23.318452996522097,57.00623647727487],[24.12072960785343,57.02569265403277],[24.312862583114622,57.79342357037698],[25.16459354014927,57.97015696881519],[25.602809685984365,57.84752879498657],[26.463532342237787,57.47638865826633],[27.28818484875151,57.47452830670383],[27.77001590344093,57.24425812441123],[27.855282016722526,56.75932648378429],[28.176709425577993,56.16912995057881],[27.10245975109453,55.783313707087686],[26.494331495883753,55.615106919977634],[25.533046502390334,56.10029694276603],[25.000934279080894,56.16453074810484],[24.860684441840757,56.37252838807963],[23.878263787539964,56.273671373105266],[22.201156853939494,56.33780182557948],[21.055800408622414,56.03107636171106]]]}},{"type":"Feature","properties":{"abbrev":"Lux.","name":"Luxembourg","name_long":"Luxembourg","iso_a2":"LU","iso_a3":"LUX","iso_n3":"442"},"geometry":{"type":"Polygon","coordinates":[[[6.043073357781111,50.128051662794235],[6.242751092156993,49.90222565367873],[6.186320428094177,49.463802802114515],[5.897759230176405,49.44266714130703],[5.674051954784829,49.529483547557504],[5.782417433300906,50.09032786722122],[6.043073357781111,50.128051662794235]]]}},{"type":"Feature","properties":{"abbrev":"Mkd.","name":"Macedonia","name_long":"Macedonia","iso_a2":"MK","iso_a3":"MKD","iso_n3":"807"},"geometry":{"type":"Polygon","coordinates":[[[20.59023,41.85541],[20.71731000000011,41.84711],[20.76216,42.05186],[21.35270000000014,42.2068],[21.57663598940212,42.24522439706186],[21.917080000000112,42.30364],[22.38052575042468,42.32025950781508],[22.881373732197346,41.999297186850356],[22.952377150166512,41.33799388281119],[22.76177,41.3048],[22.597308383889015,41.130487168943205],[22.05537763844427,41.14986583105269],[21.674160597426976,40.93127452245795],[21.0200403174764,40.84272695572588],[20.60518,41.08622],[20.46315,41.5150900000001],[20.59023,41.85541]]]}},{"type":"Feature","properties":{"abbrev":"Mda.","name":"Moldova","name_long":"Moldova","iso_a2":"MD","iso_a3":"MDA","iso_n3":"498"},"geometry":{"type":"Polygon","coordinates":[[[26.619336785597795,48.22072622333347],[26.857823520624805,48.368210761094495],[27.522537469195154,48.467119452501116],[28.259546746541844,48.15556224221342],[28.670891147585163,48.1181485052341],[29.12269819511303,47.84909516050646],[29.05086795422733,47.51022695575249],[29.41513512545274,47.34664520933257],[29.559674106573112,46.928582872091326],[29.908851759569302,46.67436066343146],[29.838210076626297,46.52532583270169],[30.02465864433537,46.42393667254503],[29.75997195813639,46.34998769793536],[29.170653924279886,46.3792623968287],[29.072106967899295,46.517677720722496],[28.862972446414062,46.43788930926383],[28.93371748222162,46.2588304713725],[28.659987420371575,45.93998688413164],[28.485269402792767,45.5969070501459],[28.233553501099042,45.48828318946837],[28.0544429867754,45.944586086605625],[28.160017937947714,46.37156260841722],[28.128030226359044,46.810476386088254],[27.551166212684848,47.40511709247083],[27.233872918412743,47.82677094175638],[26.924176059687568,48.123264472030996],[26.619336785597795,48.22072622333347]]]}},{"type":"Feature","properties":{"abbrev":"Mont.","name":"Montenegro","name_long":"Montenegro","iso_a2":"ME","iso_a3":"MNE","iso_n3":"499"},"geometry":{"type":"Polygon","coordinates":[[[19.801613396898688,42.50009349219084],[19.738051385179627,42.688247382165564],[19.3044900000001,42.19574],[19.37177000000014,41.87755],[19.16246,41.95502],[18.88214,42.28151],[18.45,42.48],[18.56,42.65],[18.70648,43.20011],[19.03165,43.43253],[19.21852,43.52384],[19.48389,43.35229],[19.63,43.21377997027054],[19.95857,43.10604],[20.3398,42.89852],[20.25758,42.81275000000011],[20.0707,42.58863],[19.801613396898688,42.50009349219084]]]}},{"type":"Feature","properties":{"abbrev":"Nor.","name":"Norway","name_long":"Norway","iso_a2":"NO","iso_a3":"NOR","iso_n3":"578"},"geometry":{"type":"MultiPolygon","coordinates":[[[[28.165547316202915,71.18547435168051],[31.29341840996548,70.45378774685992],[30.005435011522792,70.1862588568849],[31.10107872897512,69.55808014594486],[29.399580519332886,69.15691600206307],[28.591929559043194,69.0647769232867],[29.01557295097197,69.76649119737797],[27.73229210786789,70.16419302029628],[26.1796220232263,69.82529897732616],[25.68921268077639,69.09211375596902],[24.73567915212672,68.64955678982145],[23.662049594830762,68.89124746365053],[22.356237827247412,68.84174144151494],[21.24493615081073,69.37044302029312],[20.64559288908958,69.10624726020085],[20.025268995857914,69.06513865831272],[19.878559604581255,68.40719432237262],[17.99386844246439,68.56739126247734],[17.729181756265348,68.01055186631623],[16.76887861498554,68.01393667263139],[16.108712192456835,67.3024555528369],[15.108411492583059,66.19386688909543],[13.55568973150909,64.78702769638147],[13.919905226302205,64.44542064071611],[13.57191613124877,64.04911408146967],[12.57993533697393,64.06621898055835],[11.93056928879423,63.128317572676984],[11.992064243221535,61.800362453856565],[12.631146681375242,61.29357168237009],[12.3003658382749,60.11793284773006],[11.468271925511175,59.432393296946],[11.027368605196926,58.856149400459394],[10.356556837616097,59.46980703392538],[8.382000359743643,58.31328847923328],[7.048748406613299,58.07888418235728],[5.665835402050419,58.58815542259367],[5.308234490590735,59.66323191999382],[4.992078077829007,61.970998033284275],[5.912900424837885,62.614472968182696],[8.553411085655766,63.45400828719647],[10.527709181366788,64.48603831649748],[12.358346795306375,65.87972585719316],[14.761145867581604,67.81064158799515],[16.43592736172897,68.56320547146169],[19.184028354578516,69.81744415961782],[21.378416375420613,70.25516937934606],[23.023742303161583,70.20207184516626],[24.546543409938522,71.03049673123724],[26.370049676221807,70.98626170519537],[28.165547316202915,71.18547435168051]]],[[[24.72412,77.85385],[22.49032,77.44493],[20.72601,77.67704],[21.41611,77.93504],[20.8119,78.25463],[22.88426,78.45494],[23.28134,78.07954],[24.72412,77.85385]]],[[[18.25183,79.70175],[21.54383,78.95611],[19.02737,78.5626],[18.47172,77.82669],[17.59441,77.63796],[17.1182,76.80941],[15.91315,76.77045],[13.76259,77.38035],[14.66956,77.73565],[13.1706,78.02493],[11.22231,78.8693],[10.44453,79.65239],[13.17077,80.01046],[13.71852,79.66039],[15.14282,79.67431],[15.52255,80.01608],[16.99085,80.05086],[18.25183,79.70175]]],[[[25.447625359811894,80.40734039989451],[27.4075057309135,80.05640574820046],[25.92465050629818,79.51783397085455],[23.02446577321362,79.4000117052291],[20.075188429451885,79.56682322866726],[19.897266473070914,79.84236196564751],[18.462263624757924,79.85988027619442],[17.368015170977458,80.31889618602702],[20.455992059010697,80.59815562613224],[21.9079447771154,80.35767934846209],[22.919252557067438,80.65714427359349],[25.447625359811894,80.40734039989451]]]]}},{"type":"Feature","properties":{"abbrev":"Neth.","name":"Netherlands","name_long":"Netherlands","iso_a2":"NL","iso_a3":"NLD","iso_n3":"528"},"geometry":{"type":"Polygon","coordinates":[[[6.074182570020923,53.510403347378144],[6.905139601274129,53.48216217713064],[7.092053256873896,53.14404328064489],[6.842869500362383,52.22844025329755],[6.589396599970826,51.852029120483394],[5.988658074577813,51.851615709025054],[6.156658155958779,50.80372101501058],[5.606975945670001,51.037298488969775],[4.973991326526914,51.475023708698124],[4.047071160507527,51.26725861266857],[3.314971144228537,51.34575511331991],[3.830288527043137,51.62054454203195],[4.705997348661185,53.09179840759776],[6.074182570020923,53.510403347378144]]]}},{"type":"Feature","properties":{"abbrev":"Pol.","name":"Poland","name_long":"Poland","iso_a2":"PL","iso_a3":"POL","iso_n3":"616"},"geometry":{"type":"Polygon","coordinates":[[[15.01699588385867,51.10667409932158],[14.607098422919535,51.745188096719964],[14.685026482815688,52.0899474147552],[14.4375997250022,52.62485016540838],[14.074521111719491,52.98126251892543],[14.353315463934138,53.24817129171297],[14.119686313542587,53.75702912049103],[14.802900424873458,54.05070628520575],[16.36347700365573,54.513158677785725],[17.622831658608675,54.85153595643291],[18.62085859546164,54.68260569927078],[18.696254510175464,54.43871877706929],[19.660640089606403,54.42608388937393],[20.892244500418624,54.31252492941253],[22.731098667092652,54.327536932993326],[23.24398725758951,54.22056671814914],[23.48412763844985,53.91249766704114],[23.527535841575002,53.470121568406555],[23.80493493011778,53.089731350306074],[23.799198846133375,52.69109935160657],[23.199493849386187,52.486977444053664],[23.508002150168693,52.02364655212473],[23.52707075368437,51.57845408793023],[24.029985792748903,50.70540660257518],[23.922757195743262,50.42488108987875],[23.426508416444392,50.30850576435745],[22.518450148211603,49.47677358661974],[22.776418898212626,49.02739533140962],[22.558137648211755,49.085738023467144],[21.607808058364213,49.47010732685409],[20.887955356538413,49.32877228453583],[20.41583947111985,49.43145335549977],[19.825022820726872,49.21712535256923],[19.320712517990472,49.571574001659194],[18.909574822676316,49.435845852244576],[18.853144158613617,49.49622976337764],[18.392913852622172,49.98862864847075],[17.64944502123899,50.049038397819956],[17.55456709155112,50.36214590107641],[16.868769158605655,50.47397370055603],[16.719475945714436,50.21574656839354],[16.176253289462267,50.42260732685791],[16.23862674323857,50.69773265237984],[15.490972120839727,50.78472992614321],[15.01699588385867,51.10667409932158]]]}},{"type":"Feature","properties":{"abbrev":"Port.","name":"Portugal","name_long":"Portugal","iso_a2":"PT","iso_a3":"PRT","iso_n3":"620"},"geometry":{"type":"Polygon","coordinates":[[[-9.034817674180246,41.88057058365967],[-8.67194576662672,42.13468943945496],[-8.263856980817792,42.28046865495034],[-8.013174607769912,41.790886135417125],[-7.422512986673795,41.79207469335983],[-7.251308966490824,41.91834605566505],[-6.668605515967656,41.883386949219584],[-6.389087693700915,41.381815497394655],[-6.851126674822552,41.11108266861753],[-6.864019944679385,40.33087189387483],[-7.026413133156595,40.184524237624245],[-7.066591559263529,39.71189158788277],[-7.498632371439725,39.62957103124181],[-7.098036668313128,39.03007274022378],[-7.374092169616318,38.37305858006492],[-7.029281175148796,38.07576406508977],[-7.166507941099865,37.803894354802225],[-7.537105475281024,37.42890432387623],[-7.453725551778092,37.09778758396607],[-7.855613165711985,36.83826854099627],[-8.382816127953689,36.97888011326246],[-8.898856980820327,36.86880931248078],[-8.746101446965554,37.65134552667661],[-8.839997524439879,38.26624339451761],[-9.287463751655224,38.3584858261586],[-9.526570603869715,38.73742910415491],[-9.446988898140232,39.39206614842837],[-9.048305223008427,39.75509308527877],[-8.977353481471681,40.15930613866581],[-8.768684047877102,40.76063894303019],[-8.79085323733031,41.18433401139126],[-8.99078935386757,41.54345937760364],[-9.034817674180246,41.88057058365967]]]}},{"type":"Feature","properties":{"abbrev":"Rom.","name":"Romania","name_long":"Romania","iso_a2":"RO","iso_a3":"ROU","iso_n3":"642"},"geometry":{"type":"Polygon","coordinates":[[[22.710531447040495,47.88219391538941],[23.142236362406802,48.09634105080695],[23.76095828623741,47.985598456405455],[24.40205610525038,47.98187775328042],[24.866317172960578,47.73752574318831],[25.20774336111299,47.89105642352747],[25.9459411964024,47.987148749374214],[26.19745039236693,48.22088125263035],[26.619336785597795,48.22072622333347],[26.924176059687568,48.123264472030996],[27.233872918412743,47.82677094175638],[27.551166212684848,47.40511709247083],[28.128030226359044,46.810476386088254],[28.160017937947714,46.37156260841722],[28.0544429867754,45.944586086605625],[28.233553501099042,45.48828318946837],[28.679779493939378,45.304030870131704],[29.149724969201653,45.46492544207245],[29.603289015427432,45.293308010431126],[29.626543409958767,45.03539093686239],[29.141611769331835,44.82021027279904],[28.837857700320203,44.913873806328056],[28.558081495891997,43.70746165625813],[27.970107049275075,43.81246816667521],[27.242399529740908,44.175986029632405],[26.065158725699746,43.94349376075126],[25.569271681426926,43.68844472917472],[24.100679152124172,43.74105133724785],[23.33230228037632,43.89701080990471],[22.944832391051847,43.82378530534713],[22.65714969248299,44.23492300066128],[22.4740084164406,44.40922760678177],[22.705725538837356,44.57800283464702],[22.459022251075936,44.7025171982543],[22.14508792490281,44.47842234962059],[21.562022739353605,44.7689472519655],[21.483526238702233,45.18117015235778],[20.874312778413355,45.416375433934235],[20.762174920339987,45.734573065771436],[20.220192498462836,46.127468980486555],[21.02195234547125,46.3160879583519],[21.62651492685387,46.99423777931816],[22.099767693782834,47.6724392767167],[22.710531447040495,47.88219391538941]]]}},{"type":"Feature","properties":{"abbrev":"Rus.","name":"Russia","name_long":"Russian Federation","iso_a2":"RU","iso_a3":"RUS","iso_n3":"643"},"geometry":{"type":"MultiPolygon","coordinates":[[[[143.64800744036287,50.74760040954151],[144.65414757708564,48.976390692737596],[143.17392785051723,49.30655141865037],[142.5586682476501,47.861575018904915],[143.53349246640406,46.83672801369249],[143.5052771343726,46.13790761980948],[142.74770063697392,46.74076487892657],[142.0920300640545,45.96675527605879],[141.90692508358504,46.80592886004655],[142.0184428244709,47.780132961612935],[141.90444461483506,48.85918854429956],[142.13580000220568,49.61516307229746],[142.1799833518153,50.95234243428192],[141.59407596249002,51.93543488220254],[141.68254601457366,53.30196645772878],[142.60693403541075,53.762145087287905],[142.2097489768154,54.22547597921687],[142.654786411713,54.36588084575388],[142.91461551327657,53.704577541714734],[143.26084760963207,52.74076040303905],[143.23526777564766,51.75666026468875],[143.64800744036287,50.74760040954151]]],[[[22.731098667092652,54.327536932993326],[20.892244500418652,54.312524929412575],[19.660640089606403,54.426083889373984],[19.888481479581344,54.8661603867715],[21.2684489275035,55.19048167583528],[22.315723504330606,55.0152985703659],[22.757763706155288,54.85657440858142],[22.651051873472568,54.58274099386671],[22.731098667092652,54.327536932993326]]],[[[-175.01425,66.58435],[-174.33983,66.33556],[-174.57182,67.06219],[-171.85731,66.91308],[-169.89958,65.97724],[-170.89107,65.54139],[-172.53025,65.43791],[-172.555,64.46079],[-172.95533,64.25269],[-173.89184,64.2826],[-174.65392,64.63125],[-175.98353,64.92288],[-176.20716,65.35667],[-177.22266,65.52024],[-178.35993,65.39052],[-178.90332,65.74044],[-178.68611,66.11211],[-179.88377,65.87456],[-179.43268,65.40411],[-180,64.97970870219837],[-180,68.96363636363635],[-177.55,68.2],[-174.92825,67.20589],[-175.01425,66.58435]]],[[[180.00000000000014,70.83219920854668],[178.9034250000001,70.78114],[178.7253,71.0988],[180.00000000000014,71.51571433642826],[180.00000000000014,70.83219920854668]]],[[[-178.69378,70.89302],[-180,70.83219920854668],[-180,71.51571433642826],[-179.871875,71.55762],[-179.02433,71.55553],[-177.577945,71.26948],[-177.663575,71.13277],[-178.69378,70.89302]]],[[[143.60385,73.21244],[142.08763,73.20544],[140.038155,73.31692],[139.86312,73.36983],[140.81171,73.76506],[142.06207,73.85758],[143.48283,73.47525],[143.60385,73.21244]]],[[[150.73167,75.08406],[149.575925,74.68892],[147.977465,74.778355],[146.11919,75.17298],[146.358485,75.49682],[148.22223,75.345845],[150.73167,75.08406]]],[[[145.086285,75.562625],[144.3,74.82],[140.61381,74.84768],[138.95544,74.61148],[136.97439,75.26167],[137.51176,75.94917],[138.831075,76.13676],[141.471615,76.09289],[145.086285,75.562625]]],[[[57.5356925799924,70.72046397570216],[56.94497928246395,70.63274323188668],[53.6773751157842,70.76265778266847],[53.41201663596539,71.2066616889202],[51.60189456564572,71.47475901965049],[51.45575361512422,72.01488108996514],[52.47827518088357,72.22944163684096],[52.444168735570855,72.77473135038485],[54.42761355979766,73.62754751249759],[53.50828982932515,73.74981395130015],[55.90245893740766,74.62748647734533],[55.631932814359715,75.08141225859717],[57.86864383324885,75.60939036732321],[61.170044386647504,76.25188345000814],[64.49836836127022,76.43905548776928],[66.2109770038551,76.80978221303124],[68.15705976753483,76.93969676381292],[68.85221113472512,76.54481130645462],[68.18057254422766,76.23364166940911],[64.637326287703,75.73775462513623],[61.58350752141476,75.2608845079468],[58.47708214705338,74.30905630156283],[56.98678551618801,73.33304352486624],[55.419335971910954,72.37126760526598],[55.622837762276305,71.54059479439033],[57.5356925799924,70.72046397570216]]],[[[106.97013000000013,76.97419],[107.24000000000015,76.48],[108.1538,76.72335000000015],[111.07726000000017,76.71],[113.33151,76.22224],[114.13417,75.84764],[113.88539,75.32779000000014],[112.77918,75.03186],[110.1512500000002,74.47673],[109.4,74.18],[110.64,74.04],[112.11919,73.78774000000011],[113.01954000000026,73.97693000000015],[113.52958000000032,73.33505000000011],[113.96881,73.59488],[115.56782,73.75285],[118.77633000000023,73.58772],[119.02,73.12],[123.20066000000011,72.97122],[123.25777000000018,73.73503000000011],[125.38000000000018,73.56],[126.97644,73.56549],[128.59126,73.03871],[129.05157,72.39872],[128.46000000000012,71.98],[129.7159900000002,71.19304],[131.28858000000028,70.78699000000012],[132.25350000000017,71.83630000000011],[133.85766000000032,71.38642000000016],[135.56193,71.65525000000014],[137.49755,71.34763],[138.23409000000018,71.62803],[139.86983000000012,71.48783000000014],[139.14791,72.4161900000001],[140.46817,72.84941000000013],[149.5,72.2],[150.3511800000002,71.60643],[152.96890000000022,70.84222],[157.00688,71.03141],[158.99779,70.86672],[159.83031000000025,70.45324],[159.70866,69.72198],[160.94053000000034,69.4372800000001],[162.27907000000013,69.64204],[164.05248000000014,69.66823],[165.94037000000023,69.47199],[167.83567,69.58269],[169.5776300000002,68.6938],[170.81688000000028,69.01363],[170.0082000000002,69.65276],[170.4534500000003,70.09703],[173.64391000000026,69.81743],[175.72403000000023,69.87725000000023],[178.6,69.4],[180.00000000000014,68.96363636363657],[180.00000000000014,64.97970870219848],[179.99281,64.97433],[178.70720000000026,64.53493],[177.41128000000018,64.60821],[178.31300000000024,64.07593],[178.9082500000002,63.251970000000135],[179.37034,62.982620000000104],[179.48636,62.56894],[179.22825000000014,62.30410000000015],[177.3643,62.5219],[174.56929000000022,61.76915],[173.68013,61.65261],[172.15,60.95],[170.6985000000001,60.33618],[170.3308500000003,59.88177],[168.90046,60.57355],[166.29498000000032,59.788550000000214],[165.84000000000023,60.16],[164.87674,59.7316],[163.53929000000014,59.86871],[163.21711000000025,59.21101],[162.0173300000001,58.24328],[162.05297,57.83912],[163.19191,57.61503000000011],[163.05794000000017,56.159240000000125],[162.12958000000023,56.12219],[161.70146,55.285680000000156],[162.11749000000017,54.85514],[160.36877000000032,54.34433],[160.02173000000022,53.20257],[158.5309400000002,52.958680000000236],[158.23118,51.94269],[156.7897900000003,51.01105],[156.42000000000016,51.7],[155.99182,53.15895],[155.43366000000012,55.38103000000012],[155.91442000000032,56.767920000000146],[156.75815,57.3647],[156.8103500000001,57.83204],[158.3643300000002,58.05575],[160.15064000000012,59.31477000000012],[161.87204,60.34300000000013],[163.66969,61.1409],[164.47355000000013,62.55061],[163.2584200000002,62.46627],[162.65791,61.6425],[160.1214800000001,60.54423],[159.30232,61.77396],[156.7206800000001,61.43442],[154.21806000000035,59.75818000000013],[155.04375,59.14495],[152.81185,58.88385],[151.26573000000025,58.78089],[151.33815000000013,59.50396],[149.78371,59.65573000000014],[148.54481,59.16448],[145.48722,59.33637],[142.19782000000018,59.03998],[138.95848000000032,57.08805],[135.12619,54.72959],[136.70171,54.603550000000126],[137.19342,53.97732],[138.1647,53.755010000000254],[138.80463,54.25455000000011],[139.90151,54.18968000000018],[141.34531,53.08957000000012],[141.37923,52.23877],[140.5974200000002,51.2396700000001],[140.51308,50.04553000000013],[140.06193000000022,48.44671000000017],[138.5547200000002,46.99965],[138.21971,46.30795],[136.86232,45.14350000000019],[135.5153500000002,43.989],[134.86939000000027,43.39821],[133.53687000000028,42.81147],[132.90627000000015,42.79849],[132.27807000000027,43.28456000000011],[130.93587000000014,42.55274],[130.78,42.22000000000019],[130.64000000000019,42.395],[130.6338664084098,42.90301463477056],[131.144687941615,42.92998973242695],[131.28855512911562,44.111519680348266],[131.02519000000026,44.96796],[131.8834542176596,45.32116160743652],[133.09712000000022,45.14409],[133.7696439963132,46.116926988299156],[134.1123500000002,47.21248000000014],[134.50081,47.578450000000146],[135.0263114767868,48.47822988544391],[133.37359581922803,48.18344167743484],[132.50669000000013,47.78896],[130.98726000000013,47.79013],[130.58229332898267,48.729687404976204],[129.3978178244205,49.440600084015614],[127.65740000000038,49.76027],[127.28745568248493,50.73979726826545],[126.93915652883786,51.3538941514059],[126.56439904185699,51.7842554795327],[125.94634891164647,52.79279857035695],[125.06821129771045,53.161044826868924],[123.57147,53.4588],[122.24574791879307,53.43172597921369],[121.00308475147037,53.25140106873124],[120.1770886577169,52.75388621684121],[120.725789015792,52.51622630473091],[120.7382,51.96411],[120.18208000000018,51.64355],[119.27939,50.58292],[119.28846072802585,50.14288279886196],[117.8792444194265,49.51098338479704],[116.67880089728621,49.888531399121405],[115.48569542853144,49.80517731383475],[114.96210981655038,50.14024730081513],[114.36245649623534,50.248302720737485],[112.89773969935439,49.54356537535699],[111.58123091028668,49.37796824807767],[110.66201053267886,49.13012807880585],[109.40244917199672,49.29296051695769],[108.47516727095127,49.28254771585071],[107.86817589725112,49.79370514586588],[106.88880415245532,50.27429596618029],[105.8865914245869,50.406019192092174],[104.62158,50.275320000000164],[103.67654544476036,50.089966132195144],[102.25589000000011,50.51056000000011],[102.06521,51.25991],[100.88948042196265,51.51685578063842],[99.98173221232356,51.63400625264395],[98.8614905131005,52.04736603454671],[97.82573978067452,51.01099518493325],[98.23176150919173,50.42240062112873],[97.25976000000023,49.72605],[95.81402000000017,49.977460000000114],[94.81594933469879,50.01343333597088],[94.14756635943561,50.48053660745716],[93.10421,50.49529],[92.23471154171969,50.80217072204175],[90.71366743364078,50.331811835321105],[88.80556684769559,49.47052073831247],[87.75126427607685,49.29719798440556],[87.35997033076269,49.21498078062916],[86.82935672398966,49.82667470966813],[85.5412699726825,49.69285858824816],[85.11555952346211,50.11730296487763],[84.41637739455304,50.311399644565824],[83.93511478061893,50.88924551045358],[83.38300377801247,51.069182847693895],[81.94598554883994,50.81219594990633],[80.56844689323546,51.38833649352844],[80.03555952344172,50.864750881547224],[77.80091556184433,53.40441498474754],[76.52517947785478,54.177003485727134],[76.89110029491346,54.49052440044193],[74.38482000000013,53.54685000000011],[73.42567874542053,53.489810289109755],[73.50851606638437,54.035616766976595],[72.22415001820221,54.37665538188679],[71.1801310566095,54.133285224008254],[70.86526655465516,55.169733588270105],[69.06816694527289,55.3852501491435],[68.1691003762589,54.97039175070438],[65.6668700000001,54.601250000000164],[65.17853356309595,54.35422781027208],[61.43660000000013,54.00625],[60.97806644068325,53.66499339457914],[61.699986199800634,52.97999644633427],[60.739993117114544,52.71998647725775],[60.92726850774025,52.447548326215006],[59.96753380721557,51.960420437215674],[61.58800337102414,51.272658799843185],[61.33742435084101,50.79907013610426],[59.93280724471557,50.842194118851836],[59.64228234237057,50.545442206415714],[58.36332000000013,51.06364],[56.77798,51.04355],[55.71694000000011,50.62171000000015],[54.532878452376195,51.02623973245937],[52.32872358583106,51.718652248738096],[50.76664839051219,51.69276235615987],[48.702381626181044,50.60512848571284],[48.577841424357615,49.874759629915644],[47.549480421749394,50.454698391311126],[46.75159630716277,49.35600576435374],[47.0436715024766,49.152038886097586],[46.46644575377629,48.39415233010493],[47.31524000000016,47.71585],[48.05725,47.74377],[48.694733514201886,47.0756281601779],[48.593250000000154,46.561040000000105],[49.101160000000135,46.39933],[48.64541000000011,45.80629],[47.67591,45.64149000000012],[46.68201,44.6092000000001],[47.59094,43.66016000000013],[47.49252,42.98658],[48.58437000000018,41.80888],[47.98728315612604,41.4058192001944],[47.81566572448466,41.151416124021345],[47.373315464066394,41.21973236751114],[46.686070591016716,41.827137152669906],[46.40495079934894,41.860675157227426],[45.7764,42.09244000000024],[45.470279168485916,42.50278066667005],[44.53762291848207,42.711992702803684],[43.93121000000011,42.5549600000001],[43.755990000000196,42.74083],[42.39440000000016,43.2203],[40.92219000000014,43.38215000000014],[40.07696495947985,43.553104153002494],[39.955008579271095,43.434997666999294],[38.68,44.28],[37.53912000000011,44.65721],[36.67546000000013,45.24469],[37.40317,45.4045100000001],[38.23295,46.24087],[37.67372,46.63657],[39.14767,47.04475000000013],[39.12120000000013,47.26336],[38.22353803889948,47.10218984637598],[38.25511233902981,47.54640045835697],[38.77057,47.82562000000024],[39.738277622238996,47.89893707945208],[39.89562000000015,48.23241],[39.67465,48.783820000000134],[40.08078901546949,49.30742991799937],[40.069040000000115,49.60105],[38.59498823421356,49.92646190042373],[38.010631137857075,49.91566152607473],[37.39345950699524,50.38395335550368],[36.626167840325394,50.225590928745135],[35.35611616388812,50.57719737405915],[35.37791,50.77394],[35.02218305841794,51.2075723333715],[34.2248157081544,51.255993150428935],[34.14197838719061,51.566413479206204],[34.39173058445723,51.768881740925906],[33.75269982273588,52.33507457133166],[32.71576053236716,52.23846548116216],[32.41205813978777,52.28869497334977],[32.15944000000022,52.061250000000115],[31.78597,52.10168],[31.54001834486226,52.74205231384644],[31.30520063652798,53.0739958766733],[31.49764,53.16743000000014],[32.304519484188376,53.132726141972846],[32.693643019346126,53.35142080343214],[32.405598585751164,53.618045355842014],[31.731272820774592,53.79402944601202],[31.791424187962406,53.974638576872195],[31.384472283663822,54.15705638286238],[30.75753380709878,54.811770941784395],[30.971835971813245,55.081547756564134],[30.87390913262007,55.55097646750351],[29.89629438652244,55.7894632025305],[29.37157189303079,55.67009064393628],[29.22951338066039,55.91834422466641],[28.17670942557794,56.16912995057879],[27.855282016722526,56.75932648378438],[27.770015903440992,57.244258124411196],[27.288184848751655,57.47452830670392],[27.71668582531578,57.79189911562445],[27.420150000000202,58.72457000000014],[28.131699253051863,59.300825100331],[27.98112,59.47537],[29.1177,60.02805000000012],[28.07,60.50352000000015],[30.211107212044652,61.78002777774969],[31.139991082491036,62.357692776124445],[31.51609215671127,62.867687486412905],[30.035872430142803,63.552813625738565],[30.444684686003736,64.20445343693908],[29.544429559047018,64.94867157659056],[30.21765,65.80598],[29.054588657352383,66.94428620062203],[29.977426385220696,67.69829702419275],[28.44594363781877,68.36461294216399],[28.591929559043365,69.0647769232867],[29.39955,69.15692000000018],[31.10108000000011,69.55811],[32.13272000000026,69.90595000000025],[33.77547,69.30142000000012],[36.51396,69.06342],[40.292340000000166,67.9324],[41.059870000000124,67.4571300000001],[41.12595000000019,66.79158000000012],[40.01583,66.26618000000013],[38.38295,65.9995300000001],[33.918710000000175,66.75961],[33.18444,66.63253],[34.81477,65.90015000000014],[34.87857425307877,65.4362128770482],[34.94391000000015,64.41437000000016],[36.23129,64.10945],[37.01273000000012,63.84983000000011],[37.14197000000016,64.33471],[36.539579035089815,64.76446],[37.17604000000014,65.14322000000013],[39.59345,64.52079000000018],[40.43560000000011,64.76446],[39.76260000000016,65.49682],[42.0930900000001,66.47623],[43.01604000000012,66.41858],[43.94975000000014,66.06908],[44.53226,66.75634000000014],[43.69839,67.35245],[44.18795000000014,67.95051],[43.45282,68.57079],[46.25000000000014,68.25],[46.82134000000016,67.68997],[45.55517,67.56652],[45.5620200000001,67.01005000000019],[46.34915000000015,66.6676700000001],[47.894160000000255,66.88455000000016],[48.13876,67.52238],[50.22766000000016,67.99867000000013],[53.71743000000018,68.85738000000012],[54.47171,68.80815],[53.48582000000013,68.20131],[54.72628,68.09702],[55.44268000000014,68.43866],[57.317020000000156,68.46628],[58.80200000000021,68.88082],[59.94142000000019,68.2784400000001],[61.07784000000018,68.94069],[60.03,69.52],[60.55,69.85],[63.50400000000016,69.54739],[64.888115,69.23483500000013],[68.51216000000014,68.09233000000017],[69.18068,68.61563000000012],[68.16444,69.14436],[68.13522,69.35649],[66.93008000000012,69.45461000000012],[67.25976,69.92873],[66.72492000000014,70.70889000000014],[66.69466,71.02897000000024],[68.54006000000011,71.93450000000024],[69.19636000000011,72.84336000000016],[69.94,73.04000000000013],[72.58754,72.7762900000001],[72.79603,72.22006],[71.8481100000001,71.40898],[72.47011,71.09019],[72.79188,70.39114],[72.56470000000022,69.02085],[73.66787,68.4079],[73.2387,67.7404],[71.28000000000011,66.32000000000016],[72.42301000000018,66.17267000000018],[72.82077,66.53267],[73.92099000000016,66.78946000000013],[74.1865100000002,67.28429],[75.052,67.76047000000017],[74.46926000000016,68.32899],[74.93584000000013,68.98918],[73.84236,69.07146],[73.60187000000022,69.62763],[74.3998,70.63175],[73.1011,71.44717000000026],[74.89082000000022,72.12119],[74.65926,72.83227],[75.15801000000019,72.85497000000011],[75.68351,72.30056000000013],[75.28898000000012,71.33556],[76.35911,71.15287000000015],[75.90313000000017,71.87401],[77.57665000000011,72.26717],[79.65202000000014,72.32011],[81.5,71.75],[80.61071000000013,72.58285000000012],[80.51109,73.6482],[82.25,73.85000000000011],[84.65526,73.80591000000018],[86.82230000000024,73.93688],[86.00956,74.45967000000014],[87.16682000000017,75.11643],[88.31571000000011,75.14393],[90.26,75.64],[92.90058,75.77333],[93.23421000000016,76.0472],[95.86000000000016,76.14],[96.67821,75.91548],[98.92254000000023,76.44689],[100.75967000000023,76.43028],[101.03532,76.86189],[101.99084000000013,77.2875400000002],[104.3516000000001,77.69792],[106.06664000000013,77.37389],[104.70500000000024,77.1274],[106.97013000000013,76.97419]]],[[[105.07547,78.30689],[99.43814,77.921],[101.2649,79.23399],[102.08635,79.34641],[102.837815,79.28129],[105.37243,78.71334],[105.07547,78.30689]]],[[[51.13618655783128,80.54728017854093],[49.79368452332071,80.4154277615482],[48.89441124857754,80.3395667589437],[48.754936557821765,80.17546824820084],[47.586119012244154,80.01018117951533],[46.502825962109654,80.24724681265437],[47.07245527526291,80.55942414012945],[44.846958042181114,80.58980988231718],[46.79913862487123,80.77191762971364],[48.318477410684665,80.78400991486996],[48.522806023966695,80.51456899690015],[49.09718956889091,80.75398590770843],[50.03976769389462,80.91888540315182],[51.52293297710369,80.6997256538019],[51.13618655783128,80.54728017854093]]],[[[99.93976,78.88094],[97.75794,78.7562],[94.97259,79.044745],[93.31288,79.4265],[92.5454,80.14379],[91.18107,80.34146],[93.77766,81.0246],[95.940895,81.2504],[97.88385,80.746975],[100.186655,79.780135],[99.93976,78.88094]]]]}},{"type":"Feature","properties":{"abbrev":"Serb.","name":"Serbia","name_long":"Serbia","iso_a2":"RS","iso_a3":"SRB","iso_n3":"688"},"geometry":{"type":"Polygon","coordinates":[[[20.87431277841341,45.41637543393432],[21.48352623870221,45.18117015235788],[21.562022739353722,44.76894725196564],[22.145087924902896,44.47842234962059],[22.459022251075965,44.70251719825444],[22.70572553883744,44.57800283464701],[22.474008416440654,44.40922760678177],[22.657149692483074,44.234923000661354],[22.410446404721597,44.008063462900054],[22.500156691180223,43.642814439461006],[22.986018507588483,43.2111612005271],[22.60480146657136,42.898518785161116],[22.43659467946139,42.58032115332394],[22.54501183440965,42.46136200618804],[22.38052575042468,42.32025950781508],[21.917080000000112,42.30364],[21.57663598940212,42.24522439706186],[21.54332,42.3202500000001],[21.66292,42.43922],[21.77505,42.6827],[21.63302,42.67717],[21.43866,42.86255],[21.27421,42.90959],[21.143395,43.06868500000012],[20.95651,43.13094],[20.81448,43.27205],[20.63508,43.21671],[20.49679,42.88469],[20.25758,42.81275000000011],[20.3398,42.89852],[19.95857,43.10604],[19.63,43.21377997027054],[19.48389,43.35229],[19.21852,43.52384],[19.454,43.56810000000013],[19.59976,44.03847],[19.11761,44.42307000000011],[19.36803,44.863],[19.00548,44.86023],[19.39047570158459,45.236515611342384],[19.072768995854176,45.52151113543209],[18.82982,45.90888],[19.59604454924164,46.171729844744554],[20.220192498462893,46.12746898048658],[20.762174920339987,45.734573065771485],[20.87431277841341,45.41637543393432]]]}},{"type":"Feature","properties":{"abbrev":"Slo.","name":"Slovenia","name_long":"Slovenia","iso_a2":"SI","iso_a3":"SVN","iso_n3":"705"},"geometry":{"type":"Polygon","coordinates":[[[13.806475457421527,46.509306138691215],[14.63247155117483,46.43181732846955],[15.137091912504985,46.65870270444703],[16.011663852612656,46.6836107448117],[16.202298211337364,46.85238597267696],[16.370504998447416,46.8413272161665],[16.564808383864857,46.50375092221983],[15.768732944408551,46.23810822202345],[15.671529575267556,45.83415355079788],[15.323953891672403,45.73178253842768],[15.327674594797427,45.45231639259323],[14.935243767972935,45.471695054702685],[14.595109490627804,45.634940904312714],[14.411968214585414,45.46616567644746],[13.715059848697221,45.50032379819237],[13.937630242578306,45.59101593686462],[13.698109978905478,46.01677806251735],[13.806475457421527,46.509306138691215]]]}},{"type":"Feature","properties":{"abbrev":"Svk.","name":"Slovakia","name_long":"Slovakia","iso_a2":"SK","iso_a3":"SVK","iso_n3":"703"},"geometry":{"type":"Polygon","coordinates":[[[18.853144158613617,49.49622976337764],[18.909574822676316,49.435845852244576],[19.320712517990472,49.571574001659194],[19.825022820726872,49.21712535256923],[20.41583947111985,49.43145335549977],[20.887955356538413,49.32877228453583],[21.607808058364213,49.47010732685409],[22.558137648211755,49.085738023467144],[22.28084191253356,48.82539215758067],[22.08560835133485,48.42226430927179],[21.872236362401736,48.31997081155002],[20.801293979584926,48.623854071642384],[20.473562045989866,48.56285004332181],[20.239054396249347,48.32756724709692],[19.769470656013112,48.202691148463614],[19.661363559658497,48.26661489520866],[19.17436486173989,48.11137889260387],[18.77702477384767,48.081768296900634],[18.696512892336926,47.880953681014404],[17.857132602620027,47.758428860050365],[17.48847293464982,47.86746613218621],[16.979666782304037,48.123497015976305],[16.879982944413,48.47001333270947],[16.960288120194576,48.5969823268506],[17.101984897538898,48.81696889911711],[17.545006951577108,48.80001902932537],[17.88648481616181,48.90347524677371],[17.913511590250465,48.996492824899086],[18.104972771891852,49.04398346617531],[18.170498488037964,49.271514797556435],[18.399993523846177,49.31500051533004],[18.554971144289482,49.49501536721878],[18.853144158613617,49.49622976337764]]]}},{"type":"Feature","properties":{"abbrev":"Ukr.","name":"Ukraine","name_long":"Ukraine","iso_a2":"UA","iso_a3":"UKR","iso_n3":"804"},"geometry":{"type":"Polygon","coordinates":[[[31.785998162571587,52.101677964885454],[32.15941206231267,52.06126699483322],[32.41205813978763,52.28869497334975],[32.71576053236697,52.23846548116205],[33.7526998227357,52.335074571331695],[34.39173058445701,51.76888174092579],[34.14197838719039,51.56641347920623],[34.22481570815427,51.25599315042895],[35.02218305841788,51.20757233337145],[35.37792361831512,50.77395539001034],[35.35611616388795,50.577197374059054],[36.62616784032534,50.225590928745135],[37.39345950699507,50.38395335550359],[38.010631137856905,49.91566152607463],[38.59498823421342,49.92646190042363],[40.06905846533911,49.6010554062817],[40.08078901546935,49.307429917999286],[39.67466393408753,48.78381846780187],[39.89563235856758,48.23240509703143],[39.738277622238826,47.89893707945198],[38.7705847511412,47.825608222029814],[38.25511233902975,47.546400458356814],[38.22353803889942,47.10218984637588],[37.42513715998999,47.022220567404204],[36.75985477066439,46.698700263040934],[35.82368452326483,46.64596446388707],[34.96234174982388,46.27319651954964],[35.020787794745985,45.65121898048466],[35.51000857925317,45.40999339454619],[36.52999799983016,45.46998973243706],[36.33471276219916,45.113215643893966],[35.23999922052812,44.939996242851606],[33.882511020652885,44.36147858334407],[33.326420932760044,44.56487702084489],[33.54692426934946,45.03477081967489],[32.4541744321055,45.32746613217608],[32.630804477679135,45.519185695978905],[33.58816206231839,45.85156850848024],[33.29856733575471,46.080598456397844],[31.74414025241518,46.333347886737386],[31.675307244602408,46.70624502215554],[30.748748813609097,46.583100084004],[30.377608676888883,46.03241018328567],[29.603289015427432,45.293308010431126],[29.149724969201653,45.46492544207245],[28.679779493939378,45.304030870131704],[28.233553501099042,45.48828318946837],[28.485269402792767,45.5969070501459],[28.659987420371575,45.93998688413164],[28.93371748222162,46.2588304713725],[28.862972446414062,46.43788930926383],[29.072106967899295,46.517677720722496],[29.170653924279886,46.3792623968287],[29.75997195813639,46.34998769793536],[30.02465864433537,46.42393667254503],[29.838210076626297,46.52532583270169],[29.908851759569302,46.67436066343146],[29.559674106573112,46.928582872091326],[29.41513512545274,47.34664520933257],[29.05086795422733,47.51022695575249],[29.12269819511303,47.84909516050646],[28.670891147585163,48.1181485052341],[28.259546746541844,48.15556224221342],[27.522537469195154,48.467119452501116],[26.857823520624805,48.368210761094495],[26.619336785597795,48.22072622333347],[26.19745039236693,48.22088125263035],[25.9459411964024,47.987148749374214],[25.20774336111299,47.89105642352747],[24.866317172960578,47.73752574318831],[24.40205610525038,47.98187775328042],[23.76095828623741,47.985598456405455],[23.142236362406802,48.09634105080695],[22.710531447040495,47.88219391538941],[22.640819939878753,48.15023956968735],[22.08560835133485,48.42226430927179],[22.28084191253356,48.82539215758067],[22.558137648211755,49.085738023467144],[22.776418898212626,49.02739533140962],[22.518450148211603,49.47677358661974],[23.426508416444392,50.30850576435745],[23.922757195743262,50.42488108987875],[24.029985792748903,50.70540660257518],[23.52707075368437,51.57845408793023],[24.00507775238421,51.61744395609446],[24.553106316839518,51.888461005249184],[25.327787713327005,51.91065603291855],[26.337958611768556,51.83228872334793],[27.454066196408434,51.59230337178447],[28.24161502453657,51.57222707783907],[28.61761274589225,51.42771393493484],[28.99283532076353,51.602044379271476],[29.254938185347925,51.368234361366895],[30.157363722460897,51.41613841410147],[30.555117221811457,51.31950348571566],[30.619454380014844,51.822806098022376],[30.927549269338982,52.04235342061438],[31.785998162571587,52.101677964885454]]]}},{"type":"Feature","properties":{"abbrev":"Swe.","name":"Sweden","name_long":"Sweden","iso_a2":"SE","iso_a3":"SWE","iso_n3":"752"},"geometry":{"type":"Polygon","coordinates":[[[22.183173455501926,65.72374054632017],[21.21351687997722,65.02600535751527],[21.369631381930958,64.41358795842429],[19.77887576669022,63.60955434839504],[17.84777916837521,62.74940013289681],[17.119554884518124,61.34116567651097],[17.83134606290639,60.63658336042741],[18.78772179533209,60.081914374422595],[17.86922488777634,58.9537661810587],[16.829185011470088,58.71982697207339],[16.447709588291474,57.041118069071885],[15.879785597403783,56.10430186626866],[14.666681349352075,56.200885118222175],[14.100721062891465,55.40778107362265],[12.942910597392057,55.36173737245058],[12.625100538797028,56.30708018658197],[11.787942335668674,57.44181712506307],[11.027368605196866,58.85614940045936],[11.468271925511146,59.43239329694604],[12.3003658382749,60.11793284773003],[12.631146681375183,61.293571682370136],[11.992064243221563,61.80036245385656],[11.93056928879423,63.12831757267698],[12.579935336973932,64.06621898055833],[13.571916131248711,64.04911408146971],[13.919905226302204,64.44542064071608],[13.55568973150909,64.78702769638151],[15.108411492583002,66.19386688909547],[16.108712192456778,67.30245555283689],[16.768878614985482,68.01393667263139],[17.729181756265348,68.01055186631628],[17.993868442464333,68.56739126247736],[19.878559604581255,68.40719432237258],[20.025268995857886,69.0651386583127],[20.645592889089528,69.10624726020087],[21.978534783626117,68.6168456081807],[23.53947309743444,67.93600861273525],[23.565879754335583,66.39605093043743],[23.903378533633802,66.00692739527962],[22.183173455501926,65.72374054632017]]]}},{"type":"Feature","properties":{"abbrev":"Auz.","name":"Australia","name_long":"Australia","iso_a2":"AU","iso_a3":"AUS","iso_n3":"036"},"geometry":{"type":"MultiPolygon","coordinates":[[[[145.39797814349484,-40.79254851660589],[146.36412072162372,-41.13769540788334],[146.90858361225085,-41.00054615658068],[147.68925947488415,-40.80825815202269],[148.28906782449602,-40.87543751400213],[148.35986453673584,-42.06244516374644],[148.0173014670731,-42.407023614268624],[147.9140519553538,-43.211522312188485],[147.564564243764,-42.93768889747386],[146.87034305235494,-43.634597263362096],[146.66332726459368,-43.58085377377856],[146.04837772032042,-43.54974456153889],[145.43192955951056,-42.69377613705627],[145.2950903668017,-42.03360971452756],[144.71807132383063,-41.162551771815714],[144.74375451067968,-40.70397511165771],[145.39797814349484,-40.79254851660589]]],[[[143.56181115129996,-13.763655694232213],[143.92209923723894,-14.548310642152003],[144.56371382057486,-14.171176039285882],[144.89490807513354,-14.594457696188625],[145.37472374896348,-14.984976495018286],[145.27199100156727,-15.428205254785695],[145.48525963763578,-16.285672295804773],[145.63703331927695,-16.784918308176614],[145.88890425026767,-16.90692636481765],[146.1603088726645,-17.761654554925244],[146.0636739442787,-18.28007252367732],[146.3874784690196,-18.95827402107591],[147.47108157774792,-19.48072275154668],[148.1776017600425,-19.95593922290277],[148.84841352762322,-20.39120981209726],[148.7174654481956,-20.633468926681516],[149.28942020080206,-21.260510756111103],[149.67833703023067,-22.342511895438392],[150.07738244038862,-22.12278370533332],[150.48293908101516,-22.556142266533012],[150.72726525289121,-22.40240488046466],[150.89955447815228,-23.462236830338682],[151.60917524638424,-24.076256198830762],[152.07353966695908,-24.457886651306197],[152.85519738180594,-25.267501316023015],[153.13616214417678,-26.07117319102619],[153.16194868389042,-26.641319268502443],[153.0929089703486,-27.26029957449451],[153.5694690289442,-28.1100668271021],[153.51210818910022,-28.995077406532758],[153.33909549378706,-29.458201592732447],[153.06924116435889,-30.350240166954816],[153.0896016786818,-30.923641859665448],[152.8915775901394,-31.640445651985956],[152.45000247620536,-32.550002536755244],[151.70911746643682,-33.041342054986345],[151.34397179586242,-33.81602345147385],[151.01055545471516,-34.310360202777886],[150.71413943908905,-35.17345997491681],[150.32821984273326,-35.67187916437193],[150.07521203023228,-36.42020558039051],[149.94612430236717,-37.10905242284123],[149.99728397033616,-37.42526051203514],[149.42388227762555,-37.77268116633346],[148.30462243061592,-37.80906137466688],[147.3817330263153,-38.21921721776755],[146.92212283751135,-38.60653207779512],[146.3179219911548,-39.03575652441144],[145.48965213438058,-38.59376799901905],[144.87697635312816,-38.41744801203912],[145.03221235573298,-37.896187839510986],[144.48568240781404,-38.08532358169927],[143.6099735861961,-38.80946542740533],[142.745426873953,-38.538267510737526],[142.178329705982,-38.38003427505984],[141.6065816591047,-38.30851409276788],[140.63857872941324,-38.019332777662555],[139.99215823787435,-37.40293629328511],[139.80658816951407,-36.64360279718828],[139.57414757706525,-36.13836231867067],[139.0828080588341,-35.73275400161178],[138.12074791885632,-35.612296237939404],[138.44946170466503,-35.127261244447894],[138.2075643251067,-34.38472258884593],[137.71917036351616,-35.07682504653103],[136.82940555231474,-35.26053476332862],[137.3523710471085,-34.70733855564409],[137.50388634658836,-34.130267836240776],[137.89011600153768,-33.640478610978334],[137.81032759007914,-32.90000701266811],[136.99683719294038,-33.752771498348636],[136.37206912653167,-34.09476612725619],[135.98904341038437,-34.89011809666049],[135.20821251845413,-34.47867034275261],[135.23921837782916,-33.94795338311498],[134.6134167827746,-33.22277800876314],[134.08590376193914,-32.848072198214766],[134.27390262261704,-32.61723357516696],[132.99077680880984,-32.011224053680195],[132.2880806825049,-31.98264698662277],[131.32633060112093,-31.495803318001048],[129.5357938986397,-31.590422865527483],[128.24093753470223,-31.948488864877856],[127.10286746633831,-32.28226694105105],[126.14871382050116,-32.21596607842061],[125.08862348846561,-32.728751316052836],[124.22164798390494,-32.95948658623607],[124.02894656788854,-33.483847344701715],[123.65966678273072,-33.89017913181273],[122.81103641163364,-33.91446705498984],[122.18306440642286,-34.003402194964224],[121.2991907085026,-33.82103606540613],[120.58026818245814,-33.930176690406626],[119.89369510302824,-33.976065362281815],[119.2988993673488,-34.50936614353397],[119.007340936358,-34.464149265278536],[118.5057178081008,-34.7468193499151],[118.02497195848953,-35.064732761374714],[117.29550744025747,-35.02545867283287],[116.62510908413495,-35.02509693780683],[115.56434695847972,-34.386427911111554],[115.02680870977954,-34.196517022438925],[115.04861616420679,-33.62342538832203],[115.5451233256671,-33.48725798923296],[115.71467370001668,-33.25957162855495],[115.6793786967614,-32.90036874769413],[115.80164513556397,-32.20506235120703],[115.68961063035513,-31.61243702568379],[115.16090905157697,-30.60159433362246],[114.99704308477945,-30.030724786094165],[115.04003787644628,-29.461095472940798],[114.64197431850201,-28.810230808224713],[114.61649783738217,-28.516398614213042],[114.17357913620847,-28.11807667410733],[114.04888390508816,-27.334765313427127],[113.4774975932369,-26.543134047147902],[113.3389530782625,-26.116545098578484],[113.77835778204026,-26.54902516042918],[113.44096235560662,-25.621278171493156],[113.93690107631167,-25.911234633082884],[114.23285200404732,-26.298446140245872],[114.21616051641703,-25.786281019801105],[113.72125532435771,-24.998938897402127],[113.62534386602405,-24.683971042583153],[113.39352339076267,-24.38476449961327],[113.50204389857564,-23.806350192970257],[113.70699262904517,-23.560215345964068],[113.8434184102957,-23.059987481378737],[113.7365515483161,-22.47547535572538],[114.1497563009219,-21.755881036061012],[114.22530724493268,-22.517488295178634],[114.64776207891869,-21.829519952076904],[115.46016727097933,-21.495173435148544],[115.94737267462702,-21.06868783944371],[116.71161543179156,-20.70168181730682],[117.16631635952771,-20.623598728113805],[117.44154503791427,-20.746898695562162],[118.22955895393298,-20.374208265873236],[118.83608523974273,-20.26331064217483],[118.98780724495177,-20.044202569257322],[119.25249393115065,-19.95294198982984],[119.80522505094457,-19.976506442954985],[120.85622033089666,-19.68370777758919],[121.39985639860723,-19.239755547769732],[121.65513797412909,-18.705317885007133],[122.24166548064177,-18.19764861417177],[122.28662397673567,-17.798603204013915],[122.31277225147544,-17.25496713630345],[123.01257449757193,-16.405199883695857],[123.43378909718304,-17.268558037996225],[123.85934451710662,-17.069035332917252],[123.50324222218326,-16.596506036040367],[123.81707319549193,-16.111316013251994],[124.25828657439988,-16.327943617419564],[124.37972619028582,-15.567059828353976],[124.92615278534005,-15.075100192935324],[125.16727501841389,-14.680395603090004],[125.67008670461385,-14.510070082256021],[125.6857963400305,-14.230655612853838],[126.12514936737611,-14.347340996968953],[126.14282270721989,-14.095986830301213],[126.58258914602376,-13.95279143642041],[127.06586714081735,-13.817967624570926],[127.80463341686195,-14.276906019755046],[128.35968997610897,-14.869169610252257],[128.98554324759593,-14.875990899314742],[129.62147342337963,-14.969783623924556],[129.409600050983,-14.420669854391035],[129.88864057832862,-13.618703301653483],[130.33946577364296,-13.357375583553477],[130.183506300986,-13.107520033422304],[130.617795037967,-12.536392103732467],[131.22349450086003,-12.183648776908115],[131.73509118054952,-12.302452894747162],[132.57529829318312,-12.114040622611014],[132.55721154188106,-11.603012383676685],[131.82469811414367,-11.273781833545101],[132.35722374891142,-11.128519382372644],[133.01956058159644,-11.376411228076847],[133.55084598198906,-11.786515394745138],[134.393068475482,-12.042365411022175],[134.67863244032705,-11.9411829565947],[135.29849124566803,-12.248606052299051],[135.88269331272764,-11.962266940969798],[136.25838097548947,-12.04934172938161],[136.49247521377166,-11.857208754120393],[136.95162031468502,-12.351958916882737],[136.68512495335577,-12.887223402562057],[136.30540652887512,-13.291229750219898],[135.96175825413414,-13.324509372615893],[136.07761681533256,-13.724278252825783],[135.78383629775325,-14.223989353088214],[135.42866417861123,-14.7154322241839],[135.50018436090318,-14.99774057379443],[136.29517459528137,-15.550264987859123],[137.0653601421595,-15.870762220933356],[137.58047081924482,-16.215082289294084],[138.303217401279,-16.807604261952658],[138.5851640158634,-16.806622409739177],[139.1085429221155,-17.06267913174537],[139.26057498591823,-17.371600843986187],[140.2152453960783,-17.710804945550066],[140.87546349503927,-17.369068698803943],[141.0711104676963,-16.832047214426723],[141.27409549373883,-16.388870131091608],[141.3982222841038,-15.840531508042588],[141.70218305884467,-15.04492115647693],[141.5633801617087,-14.56133310308951],[141.63552046118812,-14.270394789286284],[141.51986860571898,-13.698078301653808],[141.650920038011,-12.944687595270565],[141.84269127824624,-12.74154753993119],[141.6869901877508,-12.407614434461138],[141.92862918514757,-11.87746591557878],[142.118488397388,-11.32804208745162],[142.14370649634637,-11.042736504768143],[142.51526004452498,-10.668185723516643],[142.79731001197408,-11.157354831591519],[142.8667631369743,-11.784706719614931],[143.1159468934857,-11.905629571177911],[143.1586316265588,-12.325655612846191],[143.5221236512999,-12.834358412327433],[143.5971578309877,-13.400422051652598],[143.56181115129996,-13.763655694232213]]]]}},{"type":"Feature","properties":{"abbrev":"Fiji","name":"Fiji","name_long":"Fiji","iso_a2":"FJ","iso_a3":"FJI","iso_n3":"242"},"geometry":{"type":"MultiPolygon","coordinates":[[[[178.3736,-17.33992],[178.71806,-17.62846],[178.55271,-18.15059],[177.93266,-18.28799],[177.38146,-18.16432],[177.28504,-17.72465],[177.67087,-17.38114],[178.12557,-17.50481],[178.3736,-17.33992]]],[[[179.36414266196428,-16.80135407694685],[178.7250593629971,-17.01204167436802],[178.59683859511708,-16.63915],[179.09660936299716,-16.43398427754742],[179.41350936299713,-16.379054277547397],[180.00000000000014,-16.06713266364244],[180.00000000000014,-16.55521656663916],[179.36414266196428,-16.80135407694685]]],[[[-179.91736938476524,-16.50178313564936],[-180,-16.55521656663916],[-180,-16.06713266364244],[-179.79332010904858,-16.02088225674123],[-179.91736938476524,-16.50178313564936]]]]}},{"type":"Feature","properties":{"abbrev":"New C.","name":"New Caledonia","name_long":"New Caledonia","iso_a2":"NC","iso_a3":"NCL","iso_n3":"540"},"geometry":{"type":"Polygon","coordinates":[[[165.77998986232637,-21.08000497811563],[166.59999148993384,-21.700018812753523],[167.1200114280869,-22.159990736583488],[166.74003462144478,-22.39997608814695],[166.18973229396866,-22.12970834726045],[165.47437544175222,-21.679606621998232],[164.82981530177568,-21.14981983814195],[164.16799523341365,-20.444746595951628],[164.029605747736,-20.105645847252354],[164.45996707586272,-20.1200118954295],[165.02003624904205,-20.45999114347773],[165.46000939357512,-20.80002206795826],[165.77998986232637,-21.08000497811563]]]}},{"type":"Feature","properties":{"abbrev":"N.Z.","name":"New Zealand","name_long":"New Zealand","iso_a2":"NZ","iso_a3":"NZL","iso_n3":"554"},"geometry":{"type":"MultiPolygon","coordinates":[[[[173.02037479074076,-40.919052422856424],[173.24723432850206,-41.331998793300784],[173.95840538970288,-40.92670053483562],[174.24758670480813,-41.34915536882167],[174.2485168805895,-41.770008233406756],[173.8764465680879,-42.233184096038826],[173.22273969959568,-42.970038344088564],[172.71124637277077,-43.372287693048506],[173.0801127464702,-43.85334360125358],[172.30858361235252,-43.865694268571346],[171.45292524646365,-44.24251881284372],[171.18513797432726,-44.89710418068489],[170.61669721911662,-45.90892872495971],[169.8314221540093,-46.3557748349876],[169.33233117093428,-46.641235446967855],[168.41135379462858,-46.61994475686359],[167.76374474514685,-46.29019744240921],[166.67688602118423,-46.21991749449224],[166.5091443219647,-45.85270476662622],[167.04642418850327,-45.11094125750867],[168.3037634625969,-44.12397307716613],[168.94940880765157,-43.93581918719142],[169.66781456937318,-43.55532561622634],[170.52491987536618,-43.03168832781283],[171.125089960004,-42.51275359473778],[171.56971398344322,-41.767424411792135],[171.94870893787194,-41.51441659929115],[172.09722700427878,-40.95610442480968],[172.798579543344,-40.493962090823466],[173.02037479074076,-40.919052422856424]]],[[[174.61200890533055,-36.156397393540544],[175.3366158389272,-37.20909799575826],[175.35759647043753,-36.52619394302113],[175.8088867536425,-36.79894215265769],[175.9584900251275,-37.55538176854606],[176.76319542877658,-37.8812533505787],[177.4388131045605,-37.961248467766495],[178.0103544457087,-37.57982472102013],[178.51709354076283,-37.6953732236248],[178.27473107331386,-38.58281259537309],[177.97046023997936,-39.166342868812976],[177.20699262929915,-39.145775648760846],[176.93998050364704,-39.44973642350158],[177.0329464053401,-39.87994272233148],[176.88582360260526,-40.065977878582174],[176.50801720611938,-40.60480803808959],[176.0124402204403,-41.28962411882151],[175.239567499083,-41.68830779395324],[175.0678983910094,-41.42589487077508],[174.65097293527847,-41.28182097754545],[175.22763024322367,-40.459235528323404],[174.90015669179,-39.90893320084723],[173.82404666574402,-39.50885426204351],[173.85226199777534,-39.14660247167746],[174.5748018740804,-38.797683200842755],[174.74347374908106,-38.027807712558385],[174.69701663645063,-37.38112883885796],[174.29202843657922,-36.71109221776144],[174.31900353423555,-36.53482390721389],[173.84099653553582,-36.121980889634116],[173.0541711774596,-35.23712533950034],[172.63600548735374,-34.52910654066939],[173.00704227120949,-34.45066171645034],[173.55129845610747,-35.006183363587965],[174.3293904971263,-35.26549570082862],[174.61200890533055,-36.156397393540544]]]]}},{"type":"Feature","properties":{"abbrev":"P.N.G.","name":"Papua New Guinea","name_long":"Papua New Guinea","iso_a2":"PG","iso_a3":"PNG","iso_n3":"598"},"geometry":{"type":"MultiPolygon","coordinates":[[[[155.88002566957843,-6.81999684003776],[155.5999910829888,-6.919990736522493],[155.16699425681512,-6.535931491729301],[154.72919152243836,-5.900828138862209],[154.51411421123967,-5.139117526880014],[154.65250369691736,-5.042430922061839],[154.7599906760844,-5.339983819198494],[155.06291792217937,-5.566791680527487],[155.54774620994172,-6.200654799019659],[156.01996544822478,-6.540013929880388],[155.88002566957843,-6.81999684003776]]],[[[151.9827958518545,-5.478063246282346],[151.45910688700866,-5.56028045005874],[151.3013904156539,-5.840728448106702],[150.7544470562767,-6.083762709175389],[150.24119673075384,-6.317753594592986],[149.70996300679332,-6.316513360218053],[148.89006473205046,-6.026040134305433],[148.31893680236075,-5.74714242922613],[148.4018257997569,-5.437755629094724],[149.29841190002082,-5.583741550319217],[149.84556196512725,-5.505503431829339],[149.9962504416903,-5.026101169457675],[150.13975589416495,-5.001348158389789],[150.23690758687349,-5.532220147324281],[150.8074670758081,-5.455842380396888],[151.089672072554,-5.113692722192368],[151.64788089417087,-4.757073662946169],[151.53786176982155,-4.16780730552189],[152.13679162008438,-4.14879037843852],[152.33874311748102,-4.312966403829762],[152.31869266175178,-4.86766122805075],[151.9827958518545,-5.478063246282346]]],[[[147.19187381407494,-7.38802418378998],[148.0846358583494,-8.044108168167611],[148.7341052593936,-9.104663588093757],[149.30683515848446,-9.07143564213007],[149.26663089416135,-9.514406019736027],[150.03872846903434,-9.684318129111702],[149.73879845601226,-9.872937106977005],[150.80162763895916,-10.293686618697421],[150.69057498596388,-10.582712904505868],[150.02839318257585,-10.652476088099931],[149.782310012002,-10.393267103723943],[148.92313764871722,-10.280922539921363],[147.91301842670802,-10.130440769087471],[147.13544315001226,-9.492443536012019],[146.56788089415062,-8.942554619994155],[146.04848107318494,-8.06741423913131],[144.74416792213802,-7.630128269077473],[143.8970878440097,-7.915330498896281],[143.2863757671843,-8.245491224809056],[143.4139132020807,-8.983068942910947],[142.62843143124422,-9.326820570516503],[142.06825890520022,-9.159595635620036],[141.0338517600139,-9.117892754760419],[141.01705691951904,-5.859021905138022],[141.00021040259188,-2.600151055515624],[142.7352466167915,-3.289152927263217],[144.58397098203326,-3.861417738463401],[145.27317955951,-4.373737888205028],[145.82978641172568,-4.876497897972683],[145.98192182839298,-5.465609226100014],[147.6480733583476,-6.083659356310804],[147.8911076194162,-6.614014580922315],[146.9709053895949,-6.721656589386257],[147.19187381407494,-7.38802418378998]]],[[[153.14003787659877,-4.499983412294114],[152.8272921083683,-4.766427097190999],[152.638673130503,-4.176127211120928],[152.40602583232496,-3.789742526874562],[151.95323693258356,-3.462062269711822],[151.38427941305005,-3.035421644710112],[150.66204959533886,-2.741486097833956],[150.93996544820456,-2.500002129734028],[151.4799841656545,-2.779985039891386],[151.82001509013512,-2.999971612157907],[152.2399894553711,-3.240008640153661],[152.64001671774253,-3.659983005389648],[153.01999352438466,-3.980015150573294],[153.14003787659877,-4.499983412294114]]]]}},{"type":"Feature","properties":{"abbrev":"S. Is.","name":"Solomon Is.","name_long":"Solomon Islands","iso_a2":"SB","iso_a3":"SLB","iso_n3":"090"},"geometry":{"type":"MultiPolygon","coordinates":[[[[162.11902469304087,-10.482719008021135],[162.39864586817222,-10.82636728276212],[161.70003218001838,-10.820011081590224],[161.31979699121476,-10.204751478723125],[161.917383254238,-10.446700534713656],[162.11902469304087,-10.482719008021135]]],[[[160.85222863183796,-9.872937106977005],[160.46258833235729,-9.895209649294841],[159.8494474632142,-9.794027194867368],[159.64000288313517,-9.63997975020527],[159.70294477766666,-9.242949720906779],[160.36295617089846,-9.400304457235533],[160.6885176943372,-9.610162448772812],[160.85222863183796,-9.872937106977005]]],[[[161.67998172428915,-9.599982191611375],[161.52939660059053,-9.784312025596435],[160.78825320866056,-8.91754322676492],[160.57999718652437,-8.320008640173967],[160.92002811100494,-8.320008640173967],[161.28000613835,-9.120011488484451],[161.67998172428915,-9.599982191611375]]],[[[159.8750272971986,-8.337320244991716],[159.917401971678,-8.538289890174866],[159.1336771995394,-8.114181410355398],[158.58611372297472,-7.754823500197715],[158.21114953026486,-7.421872246941149],[158.35997765526545,-7.320017998893917],[158.82000125552773,-7.560003350457392],[159.64000288313517,-8.020026950719569],[159.8750272971986,-8.337320244991716]]],[[[157.5384257346893,-7.34781991946693],[157.33941979393327,-7.404767347852555],[156.9020304710148,-7.176874281445392],[156.49135786359133,-6.765943291860395],[156.54282759015396,-6.59933847415148],[157.1400004417189,-7.021638278840655],[157.5384257346893,-7.34781991946693]]]]}},{"type":"Feature","properties":{"abbrev":"Van.","name":"Vanuatu","name_long":"Vanuatu","iso_a2":"VU","iso_a3":"VUT","iso_n3":"548"},"geometry":{"type":"MultiPolygon","coordinates":[[[[167.8448767438451,-16.466333103097156],[167.5151811058229,-16.597849623279966],[167.18000776597782,-16.15999521247096],[167.21680138576963,-15.891846205308452],[167.8448767438451,-16.466333103097156]]],[[[167.10771243720149,-14.933920179913954],[167.27002811103026,-15.740020847234874],[167.00120731024796,-15.614602146062495],[166.79315799384088,-15.668810723536723],[166.64985924709558,-15.392703545801195],[166.62913699774649,-14.626497084209603],[167.10771243720149,-14.933920179913954]]]]}}]}
diff --git a/viz-lib/src/visualizations/choropleth/maps/japan.prefectures.geo.json b/viz-lib/src/visualizations/choropleth/maps/japan.prefectures.geo.json
new file mode 100644
index 000000000..5cbab8deb
--- /dev/null
+++ b/viz-lib/src/visualizations/choropleth/maps/japan.prefectures.geo.json
@@ -0,0 +1 @@
+{"type":"FeatureCollection","features":[{"type":"Feature","properties":{"iso_3166_2":"JP-","name":null,"name_alt":null,"name_local":null,"type":null,"type_en":null,"region":null,"postal":null,"region_code":null},"geometry":{"type":"MultiPolygon","coordinates":[[[[128.35124759200008,31.99673086100013],[128.3546655610002,31.98928457200016],[128.34896894600004,31.990383205000015],[128.34603925899998,31.986151434000178],[128.3438419930001,31.991319078000103],[128.34620201900023,31.99534739800005],[128.34766686300011,32.00063711100013],[128.34473717500006,32.00340403900019],[128.34310957100016,32.007228908000016],[128.35002688900025,32.00796133000013],[128.35629316500004,32.00934479400003],[128.35124759200008,31.99673086100013]]],[[[128.39405358200005,32.0548363300001],[128.40276126400025,32.05292389500012],[128.41391035200016,32.054388739],[128.40487714900004,32.03864166900006],[128.39747155000006,32.04157135600015],[128.3887638680001,32.039903062000135],[128.38371829499997,32.043768622000144],[128.38982181100008,32.04645416900003],[128.39405358200005,32.0548363300001]]],[[[132.49187259200002,32.73611074400013],[132.48796634200002,32.733181057000095],[132.48633873800011,32.73375071800017],[132.48715254000004,32.74001699400013],[132.49227949300015,32.74249909100014],[132.49415123800011,32.74074941600007],[132.49187259200002,32.73611074400013]]],[[[132.4976505870002,32.79930247600011],[132.49236087300014,32.7966576190001],[132.48951256600017,32.79726797100007],[132.48226972700016,32.7954369160001],[132.48609459700018,32.80540599200019],[132.499766472,32.80353424700003],[132.4976505870002,32.79930247600011]]],[[[133.54265384200008,34.130316473000065],[133.53183027400004,34.12352122600005],[133.52369225400005,34.13389720300013],[133.53174889400006,34.13703034100003],[133.53842207100016,34.13218821800014],[133.54265384200008,34.130316473000065]]],[[[133.21192467500012,34.24811432500012],[133.20915774800002,34.24233633000016],[133.20256595099997,34.24278392100014],[133.2006942070001,34.260199286000116],[133.19857832099999,34.263902085000055],[133.2002873060001,34.27000560100005],[133.21371503999998,34.28554922100015],[133.21916751400013,34.28819407800013],[133.224457227,34.29087962400003],[133.23129316500004,34.28432851800012],[133.23170006600006,34.27224355700004],[133.2115991550002,34.258937893],[133.20964603000002,34.25377024900011],[133.21192467500012,34.24811432500012]]],[[[135.01848392000014,34.28290436400006],[135.01596113400004,34.278591213000155],[135.01197350400005,34.27480703300013],[135.0104272800002,34.27480703300013],[135.00228925900015,34.277004299000126],[135.00139407599997,34.28213125200013],[135.00359134200008,34.28477610900005],[135.00757897200006,34.282294012000094],[135.01783287900017,34.28978099200016],[135.0240177740002,34.29234446800008],[135.0245874360002,34.29035065300003],[135.02182050900015,34.288560289000046],[135.02125084700018,34.28449127800009],[135.01848392000014,34.28290436400006]]],[[[135.05681399800008,34.29539622600008],[135.04167728000007,34.29104238500018],[135.03850345100003,34.29344310100011],[135.03459720100003,34.29323965100015],[135.04590905000006,34.298488674000154],[135.0586857430002,34.29783763200011],[135.05681399800008,34.29539622600008]]],[[[133.4517521490001,34.34275950700011],[133.45460045700023,34.337144273000106],[133.44597415500002,34.33588288],[133.43987063900025,34.337144273000106],[133.43604576900023,34.340236721000096],[133.43262780000012,34.338975328000075],[133.42709394600004,34.34662506700012],[133.43156985800024,34.348944403000175],[133.44157962300008,34.35020579600008],[133.4517521490001,34.34275950700011]]],[[[133.58041425900004,34.34988027600015],[133.57422936300023,34.347113348],[133.5674748060002,34.35521067900014],[133.58008873800011,34.361558335000055],[133.58847089900004,34.36233144700016],[133.5900171230002,34.35936107000008],[133.58383222700004,34.35374583500008],[133.58041425900004,34.34988027600015]]],[[[133.55258222700016,34.39069245000012],[133.54737389400006,34.38442617400007],[133.54680423300007,34.37681712400003],[133.55176842500023,34.37697988500018],[133.55412845100003,34.37555573100012],[133.5567326180002,34.37669505400005],[133.55901126400025,34.37754954600014],[133.55949954499997,34.370957749000084],[133.5567326180002,34.36635976800015],[133.54493248800023,34.36517975500011],[133.53939863400004,34.36827220300002],[133.529144727,34.37592194200012],[133.51661217500006,34.38727448100012],[133.52295983200023,34.39256419499999],[133.52499433700004,34.39061107000013],[133.52719160200004,34.39118073100009],[133.5279240240001,34.39284902600012],[133.53565514400006,34.39439524900014],[133.5377710300002,34.39866771000008],[133.54704837300002,34.39899323100009],[133.5558374360002,34.395860093000024],[133.55738366000006,34.39219798400016],[133.55518639400017,34.39097728100013],[133.55258222700016,34.39069245000012]]],[[[139.54997806100002,39.18345774900014],[139.5489201180001,39.18195221600011],[139.53899173300024,39.189113674000154],[139.53996829500014,39.19318268400009],[139.53956139400023,39.19590892100017],[139.546153191,39.20282623900009],[139.55665123800006,39.204331773000135],[139.56275475400017,39.197577216000084],[139.55510501400013,39.19472890800013],[139.55062910200016,39.19070058800018],[139.5489201180001,39.18553294499999],[139.54997806100002,39.18345774900014]]]]}},{"type":"Feature","properties":{"iso_3166_2":"JP-34","name":"Hiroshima","name_alt":"Hirosima","name_local":"広島県","type":"Ken","type_en":"Prefecture","region":"Chugoku","postal":"HS","region_code":"JPN-CGK"},"geometry":{"type":"MultiPolygon","coordinates":[[[[132.4972436860002,33.96796295800014],[132.49463951900012,33.96466705900012],[132.4930119150001,33.96727122600011],[132.49447675900015,33.97064850500011],[132.49789472700016,33.97178782800016],[132.4960229830002,33.98021067900011],[132.5001733730002,33.984849351000136],[132.50733483200017,33.98834870000003],[132.51164798300024,33.989528713000155],[132.51295006600017,33.99026113500018],[132.51441491000006,33.9911156270001],[132.51848391999997,33.989528713000155],[132.52377363400015,33.98834870000003],[132.5240177740001,33.98826732000005],[132.52287845100008,33.9872093770001],[132.51815839900004,33.982855536],[132.51351972700004,33.9759789080001],[132.50652103000007,33.97365957200013],[132.50473066500015,33.96946849200019],[132.4972436860002,33.96796295800014]]],[[[132.42693118600008,34.01504140800016],[132.42562910200016,34.01129791900003],[132.40796959700006,34.015244859000106],[132.40178470100003,34.02228424700017],[132.40902754000004,34.029893296000026],[132.41871178500017,34.02566152600009],[132.42416425900004,34.020209052000055],[132.42628014400012,34.016302802000055],[132.42693118600008,34.01504140800016]]],[[[132.53744550899998,34.05943431200008],[132.53207441500004,34.04747142100014],[132.52523847700004,34.04913971600014],[132.5235294930002,34.05719635600009],[132.52588951900017,34.06334056200008],[132.5297143890002,34.068793036000116],[132.533457879,34.07335032800016],[132.53744550899998,34.05943431200008]]],[[[132.39031009200002,34.17649974200019],[132.40455162900005,34.16982656500012],[132.4104923840001,34.171128648000135],[132.41529381600017,34.159287828000075],[132.39641360800013,34.145941473000065],[132.38754316499998,34.15025462400014],[132.3839624360002,34.156317450000145],[132.38217207100004,34.17239004100004],[132.39031009200002,34.17649974200019]]],[[[132.5494897800002,34.12148672100004],[132.55152428500006,34.108587958],[132.5776473320001,34.11888255400011],[132.58057701900012,34.09983958500011],[132.5698348320001,34.07587311400009],[132.55518639400006,34.07135651200012],[132.53223717500012,34.08209870000003],[132.47803795700023,34.08047109600001],[132.4553328790001,34.08812083500014],[132.4739689460001,34.105210679],[132.49732506600017,34.11713288000011],[132.51002037900005,34.13182200700011],[132.49683678500017,34.15704987200009],[132.50660241000006,34.16779205900009],[132.51929772200018,34.174383856000176],[132.53248131600006,34.177313544000086],[132.54330488400015,34.17670319200015],[132.55152428500006,34.17064036700005],[132.5490014980002,34.16632721600014],[132.54786217500006,34.161688544000114],[132.54509524800014,34.15814850500014],[132.5378524100001,34.15704987200009],[132.54623457100016,34.14496491100009],[132.5490014980002,34.13336823100015],[132.5494897800002,34.12148672100004]]],[[[132.79989668100004,34.17332591400013],[132.78256269600016,34.16148509300017],[132.77051842500023,34.1677513690001],[132.7803654310001,34.187933661000145],[132.79989668100004,34.17332591400013]]],[[[132.842051629,34.15900299700003],[132.81438235800007,34.15208567900014],[132.80648847700004,34.15456777600015],[132.80290774800008,34.15973541900017],[132.80331464900004,34.16636790600013],[132.80713951900006,34.17572663000006],[132.81861412900005,34.185614325000174],[132.83253014400012,34.188910223000036],[132.83668053500006,34.19179922100015],[132.84066816500004,34.19261302300005],[132.84465579500002,34.195095119000186],[132.8499455090001,34.19627513200011],[132.85189863400004,34.193304755],[132.8536889980002,34.188625393000095],[132.86361738400004,34.182806708000115],[132.85873457100004,34.170152085000055],[132.842051629,34.15900299700003]]],[[[132.3184513680001,34.19074127800009],[132.3048608730002,34.18390534100017],[132.30014082100004,34.188544012000094],[132.29395592500023,34.18748607000005],[132.29420006600017,34.19647858300006],[132.30543053500017,34.19822825700005],[132.31430097700004,34.1958275410001],[132.3184513680001,34.19074127800009]]],[[[132.76140384200008,34.17715078300013],[132.75611412900017,34.16746653900016],[132.74740644599999,34.162543036000116],[132.740000847,34.15989817900014],[132.73755944100017,34.16160716400013],[132.73731530000023,34.16840241100006],[132.73161868600008,34.17133209800009],[132.72364342500012,34.17080312700001],[132.69792728000007,34.18134186400006],[132.68897545700023,34.189886786],[132.695160352,34.20014069200012],[132.70899498800011,34.20331452000009],[132.72885175899998,34.19879791900003],[132.73853600400017,34.196966864000146],[132.75505618600002,34.18911367400007],[132.76140384200008,34.17715078300013]]],[[[132.67554772200006,34.17792389500006],[132.67473392000014,34.17332591400013],[132.6705835300002,34.17283763200014],[132.6641544930001,34.1695824240001],[132.6622827480002,34.16946035400012],[132.65992272200006,34.173692124000056],[132.65520267000014,34.174261786],[132.64861087300008,34.17035553600003],[132.64649498800023,34.17951080900009],[132.64787845100014,34.18789297100015],[132.6617130870002,34.19879791900003],[132.67164147200006,34.203517971000124],[132.67750084700018,34.19712962400011],[132.68262780000012,34.186997789000074],[132.67554772200006,34.17792389500006]]],[[[132.93230228000013,34.27484772300012],[132.9284774100001,34.25193919500013],[132.91911868600008,34.232896226000136],[132.91675866,34.221869208],[132.90577233200023,34.21308014500012],[132.883067254,34.208644924000154],[132.86312910200004,34.20848216400019],[132.8499455090001,34.21515534100014],[132.84302819100017,34.228420315000065],[132.84644616000017,34.24022044500005],[132.85401451900023,34.24502187700013],[132.85718834700018,34.24583567900014],[132.88599694100006,34.25702545800006],[132.89714603000007,34.25674062700001],[132.90821373800011,34.262884833],[132.92115319100017,34.27732982000005],[132.9284774100001,34.284002997000115],[132.93230228000013,34.27484772300012]]],[[[132.29590905000006,34.24323151200004],[132.27930748800023,34.238348700000174],[132.26791425900015,34.24445221600014],[132.26726321700014,34.253607489000146],[132.28663170700023,34.279120184000035],[132.29883873800011,34.292222398000106],[132.31446373800011,34.30044179900001],[132.32862389400012,34.30621979400017],[132.33838951900023,34.304429429],[132.34424889400012,34.295640367000104],[132.345469597,34.286566473000036],[132.34498131600006,34.28196849200016],[132.32553144600004,34.26471588700015],[132.29590905000006,34.24323151200004]]],[[[132.44174238400015,34.30272044499999],[132.44239342500006,34.29783763200011],[132.43555748800006,34.29975006700006],[132.43230228000002,34.29783763200011],[132.42562910200016,34.30105215100015],[132.41936282600003,34.301174221000124],[132.417246941,34.30426666900003],[132.42269941500015,34.306341864000146],[132.43010501400013,34.31350332200016],[132.43197675900004,34.31724681200002],[132.43254641999997,34.322821356000034],[132.43881269600004,34.32623932500003],[132.4454044930001,34.32208893400009],[132.44564863400015,34.31191640800013],[132.44174238400015,34.30272044499999]]],[[[132.993980748113,35.08054637281687],[133.02286787335376,35.06654205976828],[133.03759565591488,35.06302806229529],[133.05439049692384,35.06336395907944],[133.09702355369407,35.07145132122146],[133.12792605964003,35.06731720612409],[133.1659599142188,35.0615294464268],[133.22941857340848,35.059953315293214],[133.26430016482075,35.050625718801925],[133.30414269363044,34.99739899276936],[133.30962039586464,34.96721995723529],[133.30651981044085,34.93337189369795],[133.30667483917236,34.90869639702116],[133.3100854838581,34.87688955351014],[133.3159765972422,34.85802765585173],[133.3229529162442,34.843635769175464],[133.36222700427285,34.79270864468826],[133.36563764895837,34.7800479187765],[133.36610273695172,34.7669221048712],[133.36419070903403,34.750127264761474],[133.36377729698464,34.72893992803533],[133.36548261932754,34.70780426725317],[133.3715287623426,34.68943329511053],[133.39312951111802,34.64899648709827],[133.39266442312467,34.60822378230178],[133.39809044761617,34.59318594047873],[133.4056352073989,34.58104197850447],[133.42785607289957,34.55313670519489],[133.44149865074226,34.53008901649493],[133.44697635297618,34.517583320214],[133.44914676331248,34.508798326081845],[133.44676964740134,34.4878176949306],[133.44304894435336,34.47277985310781],[133.44302287120527,34.47267264568025],[133.43034915500007,34.47296784100017],[133.41911868600008,34.46792226800015],[133.41480553500006,34.45123932500012],[133.42221113400015,34.445013739000146],[133.41244550899998,34.4244652360001],[133.341075066,34.348049221000096],[133.32553144600004,34.3368187520001],[133.29542076900006,34.32489655200014],[133.28174889400023,34.321519273000135],[133.269786004,34.322414455000015],[133.26465905000012,34.33173248900006],[133.26986738399998,34.33917877800003],[133.28223717500023,34.34271881700012],[133.29590905000018,34.345038153000175],[133.30551191500015,34.34882233300003],[133.31495201900023,34.36603424700003],[133.30469811300023,34.37759023600013],[133.28321373800011,34.38312409100017],[133.25847415500002,34.382310289000074],[133.25847415500002,34.38979726800012],[133.27662194100006,34.40176015800016],[133.26661217500023,34.420599677],[133.247325066,34.42649974200013],[133.2296655610002,34.376166083000086],[133.21322675900004,34.36310455900009],[133.19499759200014,34.35370514500009],[133.18213951900012,34.34137604400003],[133.20191491,34.32831452000015],[133.20866946700008,34.307806708],[133.20289147200018,34.28888580900018],[133.18555748800011,34.280503648000106],[133.17823326900012,34.282782294000086],[133.16578209700018,34.29230377800009],[133.16098066499998,34.29417552300005],[133.15560957100004,34.29181549700009],[133.1440535820001,34.28261953300013],[133.12517337300008,34.2762718770001],[133.10271243600008,34.25714752800003],[133.09327233200017,34.252630927000084],[133.07642662900017,34.25958893400015],[133.07064863399998,34.277248440000065],[133.07227623800011,34.31753164300015],[133.07691491000006,34.316717841000056],[133.0874129570001,34.32648346600017],[133.10328209700006,34.34511953300016],[133.11402428500017,34.35175202000012],[133.11793053500006,34.34227122600011],[133.11703535200016,34.32656484600015],[133.11329186300023,34.314113674000126],[133.13314863400004,34.31818268400009],[133.14747155000012,34.35138580900012],[133.16846764400023,34.35504791900017],[133.16846764400023,34.36249420800014],[133.15259850400005,34.373846747000115],[133.13428795700005,34.382310289000074],[133.12322024800002,34.384344794000086],[133.11329186300023,34.383978583000086],[133.10352623800011,34.384588934000035],[133.09327233200017,34.38979726800012],[133.07911217500023,34.382310289000074],[133.085785352,34.351019598],[133.05909264400006,34.33234284100003],[133.01832116,34.32330963700012],[132.91187584700006,34.314764716000084],[132.883067254,34.30459219000015],[132.85303795700017,34.28733958500014],[132.83619225400017,34.311102606000034],[132.81820722700004,34.303371486000046],[132.79908287900005,34.284002997000115],[132.778086785,34.273098049000126],[132.76221764400006,34.27033112200017],[132.76400800900015,34.26316966400013],[132.77279707100004,34.25340403900019],[132.778086785,34.24274323100015],[132.77149498800023,34.23529694200009],[132.75660241000017,34.232326565000065],[132.72657311300023,34.23212311400012],[132.7029728520001,34.225490627000156],[132.65626061300011,34.19928620000012],[132.62720787900005,34.197984117000104],[132.62224368600008,34.201890367000104],[132.61841881600006,34.20888906500009],[132.61557050900004,34.21548086100016],[132.61353600400017,34.21845123900009],[132.60425866000006,34.21662018400009],[132.59945722700004,34.2123070330001],[132.59652754000004,34.207424221000124],[132.59302819100006,34.204250393000066],[132.56617272200006,34.19196198100012],[132.55445397200006,34.19236888200011],[132.544688347,34.204250393000066],[132.559825066,34.2184105490001],[132.55062910200004,34.23086172100001],[132.533457879,34.244777736000074],[132.5210067070001,34.269761460000026],[132.50733483200017,34.283026434000035],[132.503672722,34.28733958500014],[132.50342858200005,34.30036041900003],[132.507090691,34.30841705900015],[132.50904381600017,34.31622955900015],[132.503672722,34.32831452000015],[132.51075280000018,34.32982005400011],[132.5231225920002,34.33429596600017],[132.53101647200018,34.335150458000086],[132.52613366,34.34560781500015],[132.51758873800011,34.353013414000046],[132.49683678500017,34.36249420800014],[132.48129316499998,34.35455963700018],[132.46168053500006,34.34955475500014],[132.44157962300008,34.350002346000124],[132.405528191,34.368068752000156],[132.38347415500002,34.36566803600003],[132.34603925899998,34.34882233300003],[132.3123478520001,34.326971747000144],[132.22250410200016,34.23895905200014],[132.23170006600006,34.22524648600002],[132.23829186300023,34.204250393000066],[132.24040774780988,34.18980540594744],[132.2327352238515,34.19202179586917],[132.19981733630098,34.201530260413236],[132.1714469749978,34.215534573461824],[132.16059492421644,34.21801504216053],[132.14400678878238,34.22835032810521],[132.12643680231653,34.24876251937481],[132.0708846381156,34.35945343752606],[132.06111779205256,34.43505605689158],[132.05042077000243,34.45784536407233],[132.047785271673,34.473632513829486],[132.0434444518999,34.482443346383334],[132.0412740415638,34.495207424183306],[132.04856041892808,34.50869497329445],[132.06390831911372,34.52652334217841],[132.0949141787464,34.553420925135626],[132.10979699093835,34.5775538194532],[132.11635989789093,34.594581204458976],[132.11930545458316,34.61181529414047],[132.12333621599348,34.624811916836464],[132.131191034139,34.63871287709766],[132.1474174343671,34.659176744311324],[132.15082807815335,34.66842682553765],[132.14927778544146,34.68067414029936],[132.1420947608644,34.69299896942697],[132.14380008410663,34.705013740192],[132.15330854685206,34.71653758454188],[132.20746544797206,34.748370266474595],[132.22854943281007,34.76330475550999],[132.24126183466606,34.77482859986007],[132.2479280953053,34.78294179952444],[132.2595552924429,34.781443182756774],[132.2668933448521,34.77410513034759],[132.27650516218338,34.76847239848247],[132.289372592771,34.76769725212658],[132.30761437370447,34.77640473099349],[132.35221113523576,34.78686920814745],[132.36776574099625,34.784492092236306],[132.37934126218957,34.779686184469895],[132.39040001764673,34.778911038114],[132.40218224531444,34.78340688751787],[132.4145845888078,34.7937163359402],[132.42409305155323,34.79973664053354],[132.43969933505613,34.80009837484015],[132.4541687360983,34.7954991717494],[132.46920657792126,34.79198517517578],[132.509100782675,34.789504706477075],[132.52227827432293,34.79214020390732],[132.54553266769838,34.79914236133099],[132.58697716696273,34.817616686261104],[132.66785078298724,34.838235582206394],[132.67792768831217,34.844178372433944],[132.6799430690173,34.85624481914316],[132.6726566916531,34.866244208303655],[132.66056440562275,34.87404735050477],[132.6479553565546,34.879447537473894],[132.64144412734467,34.88391754845607],[132.64010053930846,34.888671780278415],[132.6425293320631,34.89469208397257],[132.6498157094275,34.90334788689542],[132.6694010756992,34.92195140213546],[132.68087324410496,34.930426337005784],[132.69374067559184,34.937661038426214],[132.71410119001794,34.94381053332948],[132.7292940605724,34.950218411550495],[132.74712243125524,34.962207342994546],[132.80841067920946,35.02755219257965],[132.8286161640049,35.055276597836794],[132.8391581564239,35.06649038292484],[132.8540409686158,35.07325999635184],[132.87574507107806,35.0777558457557],[132.93879031821862,35.06881582289192],[132.95398318877315,35.06922923404194],[132.9812683453579,35.08008128482341],[132.993980748113,35.08054637281687]]]]}},{"type":"Feature","properties":{"iso_3166_2":"JP-33","name":"Okayama","name_alt":null,"name_local":"岡山県","type":"Ken","type_en":"Prefecture","region":"Chugoku","postal":"OY","region_code":"JPN-CGK"},"geometry":{"type":"MultiPolygon","coordinates":[[[[133.7771916020001,34.423081773000106],[133.77035566500015,34.416856187000164],[133.76311282600014,34.41901276200015],[133.75879967500023,34.427191473000065],[133.75847415500013,34.4305687520001],[133.76295006600017,34.42959219000004],[133.7671818370002,34.426540432000124],[133.77540123800011,34.425848700000174],[133.7771916020001,34.423081773000106]]],[[[134.13158572819881,35.242784532180465],[134.13964725191911,35.226790675948976],[134.1437813661171,35.21495677323655],[134.15204959541248,35.201727607443146],[134.15577029756113,35.19258087810512],[134.15856082642094,35.18023021145511],[134.16445193890578,35.167440294334156],[134.17458052017477,35.161626695315775],[134.1888432147426,35.16524404647565],[134.24734093563566,35.185759588734],[134.2688383316237,35.188240058332056],[134.28423790865244,35.18808502870105],[134.29607181226427,35.18568207526759],[134.30816409739523,35.18663808877683],[134.3253723486549,35.19247752531764],[134.34774824378636,35.206171780003686],[134.3956522972159,35.22921946870353],[134.3956522972159,35.216791286788364],[134.38821089111966,35.18751658792023],[134.39399865081705,35.17134186543474],[134.39709923714022,35.15206655482764],[134.39410200360456,35.14069774010868],[134.38557539279017,35.131757717244895],[134.37394819565267,35.12286937122455],[134.3626310568778,35.11103546851204],[134.31328006442348,35.04101390236973],[134.26532433505,35.00269582785022],[134.26361901270715,35.00096466708571],[134.26361901270715,35.000189520729876],[134.26501427578833,34.99352326098976],[134.2656343934125,34.98189606385229],[134.26454918779487,34.96742666281027],[134.25865807531002,34.936549994386795],[134.26361901270715,34.8971983910928],[134.26392907106973,34.872858792099535],[134.2577278993232,34.850973823383285],[134.25679772423567,34.83585846629525],[134.2597432800283,34.821337389309164],[134.28863040616832,34.799529934059294],[134.3061487157905,34.778135890858735],[134.31064456609377,34.77033275045609],[134.31400353393585,34.761237697961334],[134.3163806498471,34.74408112174642],[134.3143652691418,34.73175629351819],[134.30470177586622,34.70925120717739],[134.30464055720617,34.709108550374495],[134.27637780000023,34.71523672100001],[134.24781334700018,34.71816640800013],[134.22071373800023,34.72846100500006],[134.208750847,34.728013414000046],[134.21680748800023,34.711900132],[134.22689863400004,34.70791250200001],[134.2788192070001,34.69822825700005],[134.2710067070001,34.696275132],[134.2516382170002,34.693752346000096],[134.24480228000007,34.69147370000012],[134.22445722700016,34.66766998900012],[134.22022545700017,34.66351959800009],[134.21225019599999,34.66136302299999],[134.19629967500012,34.652004299000126],[134.17823326900006,34.64883047100007],[134.17066491000006,34.645982164000046],[134.15528405000006,34.63686758000013],[134.16211998800011,34.632228908000016],[134.17025800900004,34.630764065000065],[134.17969811300023,34.6323102890001],[134.18946373800006,34.63686758000013],[134.1772567070001,34.61444733300014],[134.14795983200005,34.596991278000175],[134.11304772200006,34.585638739],[134.08366946700008,34.581529039000046],[134.06934655000006,34.58584219000015],[134.04737389400023,34.604641018],[134.02881920700023,34.60887278900013],[133.99439537900005,34.60871002800015],[133.97925866000006,34.605902411000116],[133.9538680350001,34.59300364800002],[133.93669681100008,34.58722565300003],[133.92514082100016,34.577866929000024],[133.92945397200006,34.561102606000176],[133.94255618600013,34.55512116100006],[133.95736738399998,34.564439195000105],[133.9840600920002,34.589056708000115],[134.00074303500006,34.594468492000075],[134.01929772200006,34.596828518],[134.03565514400006,34.59341054900001],[134.04615319100006,34.581529039000046],[134.04566491000006,34.56391022300012],[134.03345787900017,34.55247630400008],[134.01758873800023,34.54364655200011],[134.00513756600006,34.5338402360001],[134.00766035200016,34.53050364800008],[134.00863691500004,34.528550523000106],[134.01197350400005,34.520086981000176],[133.98316491,34.52863190300009],[133.96656334700006,34.506415106000034],[133.9538680350001,34.473822333000086],[133.93628991000017,34.45123932500012],[133.85906009200002,34.462876695000105],[133.82178795700005,34.46214427299999],[133.8264266290001,34.437567450000174],[133.7944442070001,34.44293854400003],[133.780528191,34.46336497600002],[133.76889082100004,34.488023179],[133.7438257170002,34.50584544500008],[133.73682701900023,34.50238678600006],[133.73047936300011,34.506984768],[133.7257593110002,34.51642487200003],[133.72339928500006,34.52757396000014],[133.716563347,34.520086981000176],[133.69996178500017,34.52594635600012],[133.6850692070001,34.520086981000176],[133.66944420700023,34.51080963700012],[133.64063561300011,34.50169505400014],[133.59620201900006,34.482326565],[133.58619225400017,34.47573476800012],[133.58334394600016,34.46869538000006],[133.57667076900012,34.46332428600003],[133.56885826900012,34.459906317],[133.55046634200008,34.45701732000008],[133.54330488400004,34.453070380000085],[133.53809655000012,34.44855377800003],[133.53207441500004,34.445013739000146],[133.47006269600016,34.423976955000015],[133.5092879570001,34.462103583],[133.52247155000023,34.48305898600013],[133.50114993600008,34.49217357000013],[133.49024498800011,34.48956940300003],[133.468516472,34.476996161000145],[133.4565535820001,34.47235748900012],[133.44302287120527,34.47267264568025],[133.44304894435336,34.47277985310781],[133.44676964740134,34.4878176949306],[133.44914676331248,34.508798326081845],[133.44697635297618,34.517583320214],[133.44149865074226,34.53008901649493],[133.42785607289957,34.55313670519489],[133.4056352073989,34.58104197850447],[133.39809044761617,34.59318594047873],[133.39266442312467,34.60822378230178],[133.39312951111802,34.64899648709827],[133.3715287623426,34.68943329511053],[133.36548261932754,34.70780426725317],[133.36377729698464,34.72893992803533],[133.36419070903403,34.750127264761474],[133.36610273695172,34.7669221048712],[133.36563764895837,34.7800479187765],[133.36222700427285,34.79270864468826],[133.3229529162442,34.843635769175464],[133.3159765972422,34.85802765585173],[133.3100854838581,34.87688955351014],[133.30667483917236,34.90869639702116],[133.30651981044085,34.93337189369795],[133.30962039586464,34.96721995723529],[133.30414269363044,34.99739899276936],[133.26430016482075,35.050625718801925],[133.2796997418496,35.06597361898726],[133.28946658701344,35.07248484999583],[133.3069848984343,35.075895493782085],[133.36005659393678,35.0952741562772],[133.37793663966423,35.10576447185288],[133.3832076363233,35.11506622992262],[133.38444786977337,35.124264635204796],[133.38300092984903,35.13276540849684],[133.38289757706164,35.141757107304684],[133.38734174962198,35.15036123338429],[133.39716027162936,35.156614081075034],[133.4470797057638,35.15868113952298],[133.4962756685873,35.17475250922091],[133.50144331335824,35.17697459640057],[133.50423384041935,35.18116038744192],[133.50516401640616,35.18782664628266],[133.50526736919377,35.197335109927295],[133.50702436658113,35.211442775763445],[133.51291548086468,35.22095124030754],[133.52449100205817,35.22839264640358],[133.53554975841476,35.233663642163336],[133.5446964868535,35.24092418110614],[133.55001915855726,35.25038096790742],[133.56087121023828,35.28164520905911],[133.57358361209415,35.30616567610498],[133.57993981257218,35.31515737581229],[133.59203209860257,35.32099681235299],[133.6078967627253,35.32228872354578],[133.73522749225495,35.295339463745236],[133.75579471225618,35.28849233685186],[133.77016076140998,35.28022410755649],[133.78432010319014,35.27001801192175],[133.81108849493822,35.24224192982116],[133.8234908393308,35.2390379907108],[133.83423953732475,35.24312042896473],[133.84374800007018,35.25394664222385],[133.84932905509189,35.26407522169417],[133.856615431557,35.272963569513095],[133.86808759996282,35.28009491634738],[133.90069542915072,35.29239390705327],[133.91046227431443,35.300352077986005],[133.9177486507796,35.31102326071483],[133.92906578955458,35.31939484279776],[133.94999474476177,35.3261902937471],[133.9705102888187,35.32727549936472],[133.98694339372267,35.32502757376359],[133.99970747332125,35.31665599258004],[134.0013611188207,35.3099638944182],[134.0009477067713,35.30531301538342],[133.99826053339703,35.29841421254598],[133.99970747332125,35.29360830298073],[134.0013611188207,35.290843614341284],[134.0066321145804,35.287872219227594],[134.08114953012685,35.27916474125986],[134.11360232968386,35.2607420922737],[134.13158572819881,35.242784532180465]]]]}},{"type":"Feature","properties":{"iso_3166_2":"JP-32","name":"Shimane","name_alt":"Simane","name_local":"島根県","type":"Ken","type_en":"Prefecture","region":"Chugoku","postal":"SM","region_code":"JPN-CGK"},"geometry":{"type":"MultiPolygon","coordinates":[[[[133.11973193300017,35.58490697300003],[133.14142764200008,35.57016529100012],[133.15646656900017,35.56262168500017],[133.18966112899997,35.571907532000026],[133.20706772900022,35.572828130000076],[133.22473074000018,35.58294498500014],[133.23016293200013,35.578197844],[133.22315514400012,35.56850820500013],[133.22803795700005,35.56468333500011],[133.2393363700002,35.56361480200009],[133.24625319200007,35.567319817000126],[133.26637679800004,35.57423650500009],[133.2867788330001,35.576192753000115],[133.3087723730001,35.577188578000076],[133.326019727,35.56850820500013],[133.31290421499997,35.561976121000114],[133.2988742620001,35.55863831700019],[133.28692853600015,35.55372692200014],[133.27013504800001,35.54961013700013],[133.25749759207022,35.53620026206629],[133.2536031427709,35.53695262326495],[133.2096781757073,35.52418854456563],[133.20487226794077,35.52116547350779],[133.20084150563108,35.51648875605129],[133.2039420919539,35.512277127487536],[133.20781782373368,35.508737290693446],[133.2194966977144,35.50150259017248],[133.2232174007623,35.49809194638614],[133.22616295835397,35.494164536863835],[133.2286434270525,35.4900304235653],[133.2312789253821,35.48145213500804],[133.2332943060873,35.476775418450714],[133.24202762337606,35.46383047079958],[133.24988243972294,35.45613068318444],[133.27530724523322,35.43915497502216],[133.2872961766772,35.43328970005963],[133.3169584491732,35.42362620678402],[133.32000735865282,35.4215333108137],[133.3225395041948,35.4195954453735],[133.32512332568106,35.416133123844574],[133.32574344330524,35.41148224480979],[133.32326297370727,35.40597870505324],[133.31561486203626,35.400578518084174],[133.3112740422633,35.39902822537228],[133.30636478081013,35.3963410510987],[133.30388431211125,35.38926138020854],[133.2973730820021,35.33378672947403],[133.30016360906328,35.30081716597944],[133.29980187385726,35.282446193836805],[133.29318729096067,35.26916535120007],[133.27158654218525,35.25583283082052],[133.18750898705,35.22244985617591],[133.1746415546639,35.21444000929894],[133.16440962060747,35.20588756006286],[133.1656498558563,35.19498383243787],[133.17169599797197,35.186224676727434],[133.17495161302648,35.17402903880914],[133.17231611469683,35.15782847790196],[133.1476147813971,35.12186168087196],[133.12792605964003,35.06731720612409],[133.09702355369407,35.07145132122146],[133.05439049692384,35.06336395907944],[133.03759565591488,35.06302806229529],[133.02286787335376,35.06654205976828],[132.993980748113,35.08054637281687],[132.9812683453579,35.08008128482341],[132.95398318877315,35.06922923404194],[132.93879031821862,35.06881582289192],[132.87574507107806,35.0777558457557],[132.8540409686158,35.07325999635184],[132.8391581564239,35.06649038292484],[132.8286161640049,35.055276597836794],[132.80841067920946,35.02755219257965],[132.74712243125524,34.962207342994546],[132.7292940605724,34.950218411550495],[132.71410119001794,34.94381053332948],[132.69374067559184,34.937661038426214],[132.68087324410496,34.930426337005784],[132.6694010756992,34.92195140213546],[132.6498157094275,34.90334788689542],[132.6425293320631,34.89469208397257],[132.64010053930846,34.888671780278415],[132.64144412734467,34.88391754845607],[132.6479553565546,34.879447537473894],[132.66056440562275,34.87404735050477],[132.6726566916531,34.866244208303655],[132.6799430690173,34.85624481914316],[132.67792768831217,34.844178372433944],[132.66785078298724,34.838235582206394],[132.58697716696273,34.817616686261104],[132.54553266769838,34.79914236133099],[132.52227827432293,34.79214020390732],[132.509100782675,34.789504706477075],[132.46920657792126,34.79198517517578],[132.4541687360983,34.7954991717494],[132.43969933505613,34.80009837484015],[132.42409305155323,34.79973664053354],[132.4145845888078,34.7937163359402],[132.40218224531444,34.78340688751787],[132.39040001764673,34.778911038114],[132.37934126218957,34.779686184469895],[132.36776574099625,34.784492092236306],[132.35221113523576,34.78686920814745],[132.30761437370447,34.77640473099349],[132.289372592771,34.76769725212658],[132.27650516218338,34.76847239848247],[132.2668933448521,34.77410513034759],[132.2595552924429,34.781443182756774],[132.2479280953053,34.78294179952444],[132.24126183466606,34.77482859986007],[132.22854943281007,34.76330475550999],[132.20746544797206,34.748370266474595],[132.15330854685206,34.71653758454188],[132.14380008410663,34.705013740192],[132.1420947608644,34.69299896942697],[132.14927778544146,34.68067414029936],[132.15082807815335,34.66842682553765],[132.1474174343671,34.659176744311324],[132.131191034139,34.63871287709766],[132.12333621599348,34.624811916836464],[132.11930545458316,34.61181529414047],[132.11635989789093,34.594581204458976],[132.10979699093835,34.5775538194532],[132.0949141787464,34.553420925135626],[132.06390831911372,34.52652334217841],[132.04856041892808,34.50869497329445],[132.0412740415638,34.495207424183306],[132.0434444518999,34.482443346383334],[132.047785271673,34.473632513829486],[132.05042077000243,34.45784536407233],[131.9916129898476,34.41335195622786],[131.98773725806805,34.40177643503445],[131.98990766840424,34.38617015243055],[131.99688398740616,34.37800527592266],[132.00029463119225,34.37242422090107],[132.00199995263577,34.36394928603083],[131.9985893088494,34.3583423943859],[131.99362837055284,34.35345897135453],[131.96623986208002,34.34343374287293],[131.96226077661348,34.33966136298143],[131.9586951031964,34.33397695607174],[131.95218387308725,34.31671702706909],[131.9467578467971,34.30604584434032],[131.939471470332,34.303177802013934],[131.93089318267428,34.3075702995297],[131.92055789583017,34.3157351751383],[131.90805219865004,34.31955923097375],[131.89632164872503,34.31769887989931],[131.8454203626595,34.30307444922646],[131.8126575047401,34.299637966119306],[131.79508751827436,34.30173086208963],[131.78196170526851,34.30653676985604],[131.77141971195013,34.31426239679227],[131.7647534531093,34.324055081276995],[131.75839725173168,34.33746511512301],[131.75322960786005,34.351753648112336],[131.7512659039983,34.36345836051494],[131.7513692567857,34.37350942651888],[131.7554000181963,34.38177765581416],[131.77250491756783,34.40376597821735],[131.77265994719895,34.40973460506798],[131.7684741561575,34.41614248328899],[131.69648888615322,34.4289840763541],[131.68325971856123,34.437743232064534],[131.67922895715074,34.44709666607834],[131.68155439711782,34.45660512972306],[131.68108930912436,34.4678447541322],[131.6720976103164,34.479394436004426],[131.66713667201984,34.49608592422605],[131.6688419943625,34.50978017801272],[131.6784538107947,34.52368113917329],[131.69349165261772,34.55504873311257],[131.69938276600195,34.5622834345328],[131.7034135283118,34.57104258934406],[131.70331017462476,34.58104197850447],[131.68558515762905,34.61576854118529],[131.6818644545809,34.625225327986485],[131.67922895715074,34.64062490501534],[131.6789188987881,34.64894481115404],[131.68046919239944,34.66227732973503],[131.6796245203553,34.66648457050654],[131.67562866336792,34.67214318498067],[131.68033219599997,34.67464904300006],[131.71159915500013,34.67157623900012],[131.74608180700014,34.675353457000185],[131.7903751960001,34.68610260600015],[131.8229558310002,34.698283032000134],[131.8407843850001,34.705328510000086],[131.85840905000023,34.71450429900007],[131.86312910200016,34.73749420800006],[131.86687259200008,34.746039130000085],[131.87375767000017,34.75922287700014],[131.89633222700016,34.76292552300008],[131.9013219030002,34.77045129700015],[131.92378849800005,34.78785980400009],[131.95700657400002,34.813030243000085],[131.99732506600017,34.837225653000175],[132.02116946700008,34.86587148600013],[132.0345512000001,34.876579005000124],[132.0538843110002,34.872259833000086],[132.06055748800023,34.88568756700006],[132.06330411800005,34.907489343000165],[132.11117597700004,34.94310130400008],[132.13184655000023,34.95864492400007],[132.15794037100002,34.97613237400016],[132.2163192070001,35.013576565000065],[132.23649497000022,35.034818088000165],[132.2708418870001,35.040329058000154],[132.29361034800016,35.04840696100017],[132.3168499870001,35.062346339000115],[132.32659426800015,35.09206984399999],[132.35704074200024,35.11120724300018],[132.37994884300022,35.12498077800008],[132.3892122780001,35.13482940100006],[132.38657425800014,35.14553759200011],[132.40235436300023,35.16046784100017],[132.408084915,35.17505067800006],[132.46767755800008,35.21314807900002],[132.4958267010002,35.232455210000026],[132.52971849900004,35.24491322199999],[132.53193742200008,35.25767159600012],[132.55026525600024,35.26243229300012],[132.57561724500025,35.27327009700004],[132.6211415370001,35.28444409600017],[132.63867918900004,35.29464467300012],[132.6513954430001,35.31292353300013],[132.66334675600004,35.32953554900017],[132.6714464620001,35.35512813600012],[132.67413653100007,35.372037254000034],[132.67402321100022,35.38542475600015],[132.67079114300012,35.3994745880001],[132.653742456,35.406869889000134],[132.6311420550002,35.41981396300018],[132.62380835800005,35.43106990400007],[132.63535916900017,35.44095469500009],[132.65587637100012,35.44299398600016],[132.6820987360002,35.449016416000106],[132.70144369900007,35.44921971800012],[132.7344381420002,35.44863223200012],[132.7485510070002,35.451549379000156],[132.75473933400022,35.4562450750001],[132.74447675899998,35.46356842700011],[132.72549563500016,35.47077964400002],[132.73627944100022,35.47274245600006],[132.75271983700006,35.477077635000015],[132.7754265140001,35.48100749600012],[132.8048266220002,35.49518180100013],[132.8376793790001,35.50612318400012],[132.86490913700007,35.5109826810001],[132.92223136400006,35.513175013000065],[132.94636538000012,35.51867749700013],[132.96973717500023,35.51699453300016],[132.97320551100003,35.54188385],[132.99148534400015,35.54455131400009],[133.01439948700025,35.54078011700007],[133.03348937900014,35.545992142],[133.04249238800006,35.561527969000096],[133.051772182,35.57373032500011],[133.0646006050001,35.580271302000156],[133.0814422240002,35.57532590200016],[133.09134539000016,35.58753877200017],[133.09126101299998,35.60148491100007],[133.10535285100016,35.59751658900008],[133.11973193300017,35.58490697300003]]],[[[133.06666100400005,36.006537177000084],[133.07911217500023,35.993638414000074],[133.06495201900012,35.99506256700012],[133.02784264400012,35.993638414000074],[133.02133222700004,35.99575429900007],[133.01612389400012,36.00092194200006],[133.01295006600006,36.00779857],[133.01246178500017,36.014797268000066],[133.02418053500006,36.02558014500006],[133.0451766290001,36.02000560100005],[133.06666100400005,36.006537177000084]]],[[[133.09945722700004,36.03750234600001],[133.07911217500023,36.02094147300012],[133.07862389400023,36.049994208000115],[133.08130944100006,36.08014557500003],[133.09351647200012,36.102769273000106],[133.12134850400017,36.109767971000096],[133.1354272800002,36.08954498900006],[133.12322024800002,36.062933661000116],[133.09945722700004,36.03750234600001]]],[[[133.11361738400015,36.11351146000011],[133.09327233200017,36.109767971000096],[133.09058678500017,36.11786530200011],[133.09327233200017,36.123358466000056],[133.11361738400015,36.11351146000011]]],[[[133.03874759200008,36.13080475500011],[133.05665123800023,36.124945380000085],[133.07422936300006,36.127915757],[133.08757571700008,36.12702057500009],[133.08814537900005,36.11827220300002],[133.08716881600017,36.11078522300015],[133.07276451900012,36.107855536000116],[133.05836022200006,36.10317617400001],[133.05176842500018,36.085516669000086],[133.05396569100006,36.074896552000055],[133.05697675900015,36.06769440300012],[133.05583743600002,36.06175364799999],[133.04493248800023,36.055121161000116],[133.03598066500004,36.053900458000115],[133.0270288420002,36.056301174000154],[133.01978600400017,36.060614325000145],[133.0171004570001,36.065008856000034],[133.01677493600008,36.074774481000176],[133.01490319100012,36.07977936400012],[133.01002037900005,36.0815290390001],[133.00025475400017,36.08177317900005],[132.99040774800008,36.077053127000156],[132.99317467500012,36.06635163000011],[133.0040796230002,36.048285223],[132.99496504000004,36.03823476800012],[132.98145592500023,36.039862372000144],[132.96550540500002,36.04913971600011],[132.94939212300008,36.06195709800015],[132.969493035,36.082017320000105],[133.01449628999998,36.11098867400001],[133.03874759200008,36.13080475500011]]],[[[133.37924238399998,36.20823802299999],[133.37338300900015,36.197699286000116],[133.36019941499998,36.19163646000014],[133.35254967500023,36.203517971000096],[133.34351647200006,36.20433177300002],[133.3343205090001,36.198879299000154],[133.326019727,36.19163646000014],[133.33765709700012,36.184393622000115],[133.34131920700017,36.17503489799999],[133.33741295700017,36.16559479400014],[133.326019727,36.158148505],[133.31836998800006,36.15843333500011],[133.27833092500023,36.164984442],[133.25635826900012,36.164984442],[133.24976647200006,36.16828034100014],[133.20264733200023,36.202297268000066],[133.19263756600017,36.20595937700004],[133.1877547540001,36.21613190300015],[133.19629967500012,36.27798086100016],[133.20948326900017,36.29718659100011],[133.29200280000018,36.34247467700011],[133.2928166020001,36.33055247599999],[133.30079186300023,36.32587311400006],[133.31120853000002,36.32428620000003],[133.32016035200016,36.321844794000114],[133.32349694100017,36.318345445000105],[133.32650800899998,36.30939362200009],[133.32943769600004,36.30491771000011],[133.33570397200006,36.30093008000013],[133.34864342500023,36.297593492000104],[133.35401451900012,36.294663804],[133.35938561300006,36.2885602890001],[133.36361738399998,36.27928294500005],[133.367035352,36.27423737200003],[133.38184655000006,36.25771719000015],[133.37924238399998,36.20823802299999]]]]}},{"type":"Feature","properties":{"iso_3166_2":"JP-31","name":"Tottori","name_alt":null,"name_local":"鳥取県","type":"Ken","type_en":"Prefecture","region":"Chugoku","postal":"TT","region_code":"JPN-CGK"},"geometry":{"type":"Polygon","coordinates":[[[134.43647667885563,35.21748891877854],[134.42329918810702,35.220847887519994],[134.41585778201107,35.22617055922393],[134.3956522972158,35.22921946870349],[134.34774824378633,35.20617178000364],[134.32537234865492,35.19247752531757],[134.30816409739515,35.18663808877679],[134.29607181226424,35.18568207526755],[134.28423790865247,35.188085028701096],[134.26883833162367,35.18824005833201],[134.24734093563563,35.185759588734015],[134.18884321474258,35.16524404647558],[134.1745805201748,35.16162669531573],[134.1644519389058,35.167440294334114],[134.15856082642097,35.18023021145504],[134.15577029756116,35.192580878105076],[134.15204959541245,35.201727607443104],[134.14378136611708,35.21495677323651],[134.1396472519191,35.22679067594893],[134.1315857281988,35.24278453218042],[134.11360232968383,35.260742092273745],[134.08114953012677,35.27916474125982],[134.00663211458038,35.28787221922755],[134.00136111882063,35.29084361434133],[133.99970747332122,35.29360830298077],[133.99826053339694,35.29841421254591],[134.00094770677123,35.30531301538335],[134.00136111882063,35.30996389441813],[133.99970747332122,35.316655992579996],[133.98694339372264,35.32502757376355],[133.97051028881867,35.32727549936476],[133.94999474476168,35.32619029374703],[133.9290657895545,35.31939484279772],[133.91774865077957,35.311023260714876],[133.91046227431445,35.300352077985934],[133.9006954291507,35.292393907053224],[133.86808759996273,35.28009491634734],[133.85661543155692,35.27296356951314],[133.8493290550918,35.26407522169413],[133.84374800007015,35.25394664222378],[133.83423953732472,35.24312042896469],[133.82349083933076,35.23903799071073],[133.81108849493813,35.242241929821205],[133.7843201031901,35.27001801192171],[133.77016076141,35.28022410755645],[133.75579471225615,35.2884923368519],[133.73522749225492,35.295339463745194],[133.60789676272532,35.32228872354574],[133.5920320986025,35.320996812352945],[133.5799398125722,35.31515737581225],[133.57358361209407,35.306165676105024],[133.5608712102382,35.28164520905915],[133.55001915855723,35.250380967907375],[133.5446964868534,35.24092418110607],[133.53554975841467,35.23366364216329],[133.52449100205814,35.228392646403535],[133.51291548086465,35.2209512403075],[133.50702436658116,35.21144277576349],[133.50526736919375,35.19733510992734],[133.50516401640618,35.1878266462827],[133.50423384041937,35.18116038744185],[133.5014433133582,35.17697459640053],[133.4962756685872,35.17475250922092],[133.44707970576377,35.15868113952294],[133.39716027162928,35.15661408107499],[133.387341749622,35.150361233384245],[133.38289757706156,35.14175710730464],[133.383000929849,35.132765408496795],[133.38444786977334,35.12426463520475],[133.38320763632328,35.115066229922576],[133.37793663966414,35.10576447185284],[133.3600565939367,35.09527415627724],[133.30698489843428,35.07589549378204],[133.28946658701335,35.07248484999579],[133.27969974184958,35.0659736189873],[133.26430016482072,35.05062571880188],[133.2294185734084,35.05995331529323],[133.16595991421872,35.06152944642676],[133.12792605963995,35.06731720612413],[133.14761478139707,35.121861680871916],[133.17231611469686,35.157828477901916],[133.17495161302645,35.174029038809095],[133.17169599797188,35.18622467672739],[133.1656498558562,35.19498383243791],[133.16440962060744,35.20588756006279],[133.17464155466394,35.21444000929898],[133.18750898705002,35.22244985617587],[133.27158654218516,35.25583283082048],[133.29318729096065,35.26916535120003],[133.2998018738573,35.28244619383676],[133.30016360906325,35.300817165979396],[133.29737308200208,35.333786729473985],[133.30388431211122,35.389261380208495],[133.30636478081004,35.39634105109863],[133.31127404226328,35.39902822537232],[133.31561486203623,35.40057851808413],[133.32326297370724,35.40597870505317],[133.3257434433052,35.41148224480972],[133.32512332568098,35.41613312384459],[133.32253950419476,35.41959544537346],[133.32000735865273,35.42153331081366],[133.31695844917311,35.42362620678398],[133.28729617667716,35.43328970005959],[133.27530724523314,35.43915497502212],[133.24988243972285,35.45613068318448],[133.2420276233761,35.463830470799536],[133.23329430608726,35.47677541845076],[133.23127892538207,35.48145213500797],[133.22864342705248,35.49003042356526],[133.22616295835388,35.49416453686388],[133.22321740076234,35.49809194638618],[133.21949669771436,35.501502590172436],[133.2078178237336,35.508737290693404],[133.20394209195388,35.51227712748749],[133.200841505631,35.516488756051245],[133.2048722679408,35.52116547350775],[133.2096781757072,35.524188544565675],[133.25360314277083,35.53695262326491],[133.25749759207014,35.536200262066245],[133.254730665,35.53384023600012],[133.25416100400003,35.5217959660001],[133.26050866000008,35.50995514500005],[133.2646590500001,35.49616120000013],[133.29454316300013,35.4804164630001],[133.3296256210001,35.465504387000124],[133.3608574540001,35.46041669200008],[133.38068988100014,35.45641486000008],[133.40015709700003,35.454291083000015],[133.41741190900007,35.45654296500001],[133.44124508900006,35.491037665000135],[133.49275500400012,35.51036183600013],[133.5255946270001,35.52242699200008],[133.58018171100008,35.533602742000085],[133.63256824800015,35.52132835600014],[133.73114464200006,35.50290661400001],[133.91154673700015,35.514594572000135],[134.0083833370001,35.53704892300004],[134.03478971200008,35.519355662000066],[134.17366172700008,35.536271360000086],[134.23776516100008,35.546651206000064],[134.26206575800006,35.55358778700014],[134.28158613400007,35.564886786000045],[134.29387121000002,35.58589395600009],[134.34262129,35.59381745000013],[134.35206139400015,35.594183661000045],[134.36150149800005,35.595770575000074],[134.36558094755821,35.59996541641965],[134.36883222862446,35.59756907855018],[134.39844282427697,35.57860382720489],[134.41678795799788,35.54418732378596],[134.44443484888916,35.43871572545038],[134.46799930242582,35.40011343009067],[134.47404544544088,35.38316356124929],[134.47854129394545,35.36187286993703],[134.50210574838155,35.33239146639309],[134.50613650889278,35.32226288512402],[134.50758344881712,35.313917141462895],[134.50789350807884,35.30601064737348],[134.51068403514,35.28880239521436],[134.51006391841509,35.27187836389541],[134.50479292175595,35.25820994673171],[134.49218387268752,35.244334824892235],[134.4627283057667,35.22531789850217],[134.44846561119897,35.21867747718383],[134.43647667885563,35.21748891877854]]]}},{"type":"Feature","properties":{"iso_3166_2":"JP-35","name":"Yamaguchi","name_alt":"Yamaguti","name_local":"山口県","type":"Ken","type_en":"Prefecture","region":"Chugoku","postal":"YC","region_code":"JPN-CGK"},"geometry":{"type":"MultiPolygon","coordinates":[[[[132.15390058700004,33.72728099200005],[132.1321720710001,33.712347723],[132.1285099620002,33.72109609600007],[132.13851972700004,33.72984446800014],[132.14267011800004,33.738511460000055],[132.13900800900004,33.74062734600015],[132.13949628999998,33.747788804000024],[132.14201907600003,33.75112539300012],[132.1442163420002,33.75413646000014],[132.14682050899998,33.75844961100013],[132.14893639400012,33.76296621300018],[132.1534123060001,33.762722072000045],[132.14771569100017,33.75413646000014],[132.15137780000023,33.75035228100002],[132.15186608200023,33.746161200000174],[132.14714603000013,33.73895905200014],[132.15390058700004,33.72728099200005]]],[[[131.97120201900023,33.7711449240001],[131.95818118600008,33.76935455900012],[131.95036868600008,33.77313873900012],[131.94516035200016,33.77912018400015],[131.96322675899998,33.79165273600013],[131.97510826900023,33.79657623900003],[131.98829186300006,33.786932684000035],[131.98585045700023,33.77753327000012],[131.97120201900023,33.7711449240001]]],[[[132.25245201900023,33.78534577],[132.27409915500002,33.77220286700005],[132.2729598320001,33.768540757],[132.2573348320001,33.766017971000096],[132.23633873800006,33.768540757],[132.20443769600016,33.782131252000156],[132.18832441499998,33.77968984600004],[132.19532311300006,33.79352448100012],[132.20875084700006,33.80011627800009],[132.22575931100002,33.799872137000065],[132.24366295700005,33.79328034100017],[132.25245201900023,33.78534577]]],[[[132.0198673840001,33.86041901200004],[132.02165774800008,33.85350169500013],[132.02182050900004,33.84800853100002],[132.00196373800011,33.853013414000046],[131.99952233200005,33.85769277600015],[132.00586998800011,33.85736725500014],[132.01124108200005,33.85630931200008],[132.01262454500014,33.86680735900016],[132.01750735800013,33.86672597900018],[132.01807701900006,33.861761786000116],[132.0198673840001,33.86041901200004]]],[[[132.07016035200004,33.86741771000011],[132.0647892590001,33.862982489000146],[132.05925540500007,33.86908600500011],[132.0565698580002,33.87730540600005],[132.06267337300008,33.88231028900016],[132.06584720100014,33.87824127800012],[132.06682376400008,33.87274811400009],[132.07016035200004,33.86741771000011]]],[[[132.29818769600016,33.93048737200003],[132.32618248800006,33.896307684000035],[132.34009850400017,33.89720286700013],[132.35320071700002,33.903387762000094],[132.37403405000012,33.91681549700009],[132.3802189460001,33.917547919000114],[132.3952742850001,33.915472723],[132.40121504000004,33.91681549700009],[132.40707441500015,33.92304108300014],[132.40967858200017,33.93390534100003],[132.4155379570001,33.937933661],[132.42758222700004,33.939886786000145],[132.45394941500004,33.937567450000174],[132.469493035,33.937933661],[132.45785566500004,33.927679755000085],[132.43653405000023,33.90355052300005],[132.42847741,33.90253327000009],[132.41895592500012,33.90566640800016],[132.39454186300017,33.89931875200013],[132.38477623800023,33.89419179900004],[132.38070722700016,33.88641998900012],[132.37940514400017,33.86188385600009],[132.37745201900012,33.85203685100008],[132.37403405000012,33.841701565000065],[132.36255944100017,33.845445054000024],[132.34058678500006,33.844956773000106],[132.33236738400015,33.84796784100003],[132.32837975400017,33.85651276200004],[132.3296004570001,33.86579010600009],[132.32862389400012,33.875067450000145],[132.31861412900005,33.88328685100005],[132.311778191,33.875881252000156],[132.29810631600017,33.88401927300008],[132.29184004000004,33.87872955900009],[132.28882897200006,33.868353583],[132.28451582100004,33.86155833500008],[132.2721460300002,33.86041901200004],[132.25464928500006,33.865668036000116],[132.24366295700005,33.86155833500008],[132.23617597700004,33.86904531500012],[132.23121178500017,33.863918361000046],[132.22641035200016,33.860663153000175],[132.2163192070001,33.85537344],[132.20826256600017,33.87518952000012],[132.19336998800011,33.897650458000115],[132.18628991000017,33.92121002800015],[132.20191491000006,33.944769598000036],[132.22608483200023,33.95270416900017],[132.2535913420002,33.95010000200007],[132.2794702480002,33.941229559000035],[132.29818769600016,33.93048737200003]]],[[[132.35531660200004,33.93939850500006],[132.353363477,33.93789297100001],[132.34050540500007,33.947170315000065],[132.33798261800004,33.94818756700012],[132.33871503999998,33.95262278900019],[132.34327233200023,33.95856354400003],[132.34970136800015,33.96027252800003],[132.35482832100016,33.951198635000125],[132.35531660200004,33.93939850500006]]],[[[130.86426842500012,33.97044505400008],[130.86101321700008,33.96898021000011],[130.86467532600003,33.982692776000036],[130.86793053500017,33.97801341400013],[130.86426842500012,33.97044505400008]]],[[[131.86068769600004,33.9892845720001],[131.86329186300011,33.98049551000004],[131.868907097,33.9819196640001],[131.87590579500002,33.9720726580001],[131.87745201900023,33.968369859000134],[131.87053470100014,33.96898021000011],[131.8612573580002,33.959947007000025],[131.8585718110002,33.94969310100008],[131.84799238400015,33.94529857],[131.8360294930002,33.93349844000012],[131.83033287900005,33.931870835],[131.82219485800013,33.92959219000012],[131.819590691,33.92788320500004],[131.81918379000004,33.93394603100002],[131.81609134200002,33.93537018400009],[131.8062443370002,33.94065989800008],[131.80600019600016,33.949571031000104],[131.8130802740002,33.955877997000144],[131.820078972,33.95701732],[131.81836998800011,33.953884182000095],[131.8214624360002,33.94985586100013],[131.82715905000018,33.94782135600012],[131.8335067070001,33.948757229000094],[131.8330998060001,33.955471096000124],[131.84148196700008,33.95713939000014],[131.8478296230002,33.953884182000095],[131.84937584700006,33.95876699400016],[131.8467716810002,33.96617259300017],[131.84253991,33.96902090100009],[131.84961998800006,33.9720726580001],[131.85320071700002,33.97475820500007],[131.85450280000023,33.979030666000185],[131.85808353000013,33.983994859000134],[131.86068769600004,33.9892845720001]]],[[[132.26986738400004,34.00010814000011],[132.27125084700018,33.99591705900018],[132.2639266290001,33.99770742400007],[132.2609155610002,34.00153229400017],[132.26368248800023,34.01129791900003],[132.26986738400004,34.00010814000011]]],[[[131.73349043100004,33.98781972900015],[131.7233179050002,33.9798851580001],[131.71965579500014,33.98737213700015],[131.71216881600017,33.992336330000015],[131.70801842500023,33.99827708500014],[131.70248457100004,34.00010814000011],[131.69556725400005,34.006374416000156],[131.69141686300006,34.00792064000011],[131.69548587300002,34.01166413000014],[131.70248457100004,34.01943594000012],[131.70248457100004,34.02940501500002],[131.7125757170002,34.034369208000086],[131.7086694670002,34.027573960000055],[131.71111087300014,34.01618073100009],[131.71045983200005,34.00482819200012],[131.72046959700006,33.993597723000036],[131.73349043100004,33.98781972900015]]],[[[131.76148522200018,34.03843821800014],[131.75530032600003,34.0312767600001],[131.7496037120002,34.03062571800014],[131.74480228000002,34.025702216000084],[131.73666425900004,34.02313873900009],[131.72494550900004,34.03359609600015],[131.72730553500017,34.03770579600011],[131.73340905000018,34.03904857000002],[131.73609459700006,34.03969961100013],[131.74040774800002,34.04063548400005],[131.7422794930002,34.03876373900006],[131.75066165500007,34.036891994000186],[131.75676517000008,34.04653554900007],[131.7609155610002,34.04783763200005],[131.76596113400004,34.04474518400018],[131.7657169930001,34.04059479400006],[131.76148522200018,34.03843821800014]]],[[[130.79729251400008,34.10541413000014],[130.7960718110002,34.09357330900018],[130.79314212300008,34.098456122000144],[130.7842716810002,34.10057200700005],[130.77808678500006,34.10415273600013],[130.7749129570001,34.11660390800013],[130.78239993600008,34.11314524900014],[130.79265384200008,34.10984935100011],[130.7960718110002,34.109116929],[130.79729251400008,34.10541413000014]]],[[[130.85092207099999,34.347113348],[130.84725996200015,34.34210846600014],[130.83725019600016,34.35362376500011],[130.85279381600017,34.356472072000045],[130.86133873800006,34.36265696800011],[130.86841881600006,34.36701080900009],[130.86532636800004,34.37636953300013],[130.87183678500006,34.37295156500012],[130.87305748800006,34.37063222900015],[130.87712649800002,34.37014394700016],[130.88021894600004,34.36635976800015],[130.8702905610002,34.356472072000045],[130.86508222700004,34.35455963700018],[130.8565373060001,34.352687893],[130.85092207099999,34.347113348]]],[[[131.41846764400023,34.500026760000125],[131.40650475400005,34.490952867000104],[131.40113366000017,34.50560130400011],[131.41301517000002,34.51512278900013],[131.413910352,34.50967031500009],[131.41846764400023,34.500026760000125]]],[[[131.2759708990002,34.52151113500004],[131.2838647800002,34.51463450700014],[131.2885848320001,34.51573314000008],[131.29127037900017,34.513861395000035],[131.29346764400006,34.50967031500009],[131.29013105600004,34.50653717700011],[131.27686608200023,34.49909088700004],[131.2759708990002,34.52151113500004]]],[[[131.68046919239944,34.66227732973503],[131.6789188987881,34.64894481115404],[131.67922895715074,34.64062490501534],[131.6818644545809,34.625225327986485],[131.68558515762905,34.61576854118529],[131.70331017462476,34.58104197850447],[131.7034135283118,34.57104258934406],[131.69938276600195,34.5622834345328],[131.69349165261772,34.55504873311257],[131.6784538107947,34.52368113917329],[131.6688419943625,34.50978017801272],[131.66713667201984,34.49608592422605],[131.6720976103164,34.479394436004426],[131.68108930912436,34.4678447541322],[131.68155439711782,34.45660512972306],[131.67922895715074,34.44709666607834],[131.68325971856123,34.437743232064534],[131.69648888615322,34.4289840763541],[131.7684741561575,34.41614248328899],[131.77265994719895,34.40973460506798],[131.77250491756783,34.40376597821735],[131.7554000181963,34.38177765581416],[131.7513692567857,34.37350942651888],[131.7512659039983,34.36345836051494],[131.75322960786005,34.351753648112336],[131.75839725173168,34.33746511512301],[131.7647534531093,34.324055081276995],[131.77141971195013,34.31426239679227],[131.78196170526851,34.30653676985604],[131.79508751827436,34.30173086208963],[131.8126575047401,34.299637966119306],[131.8454203626595,34.30307444922646],[131.89632164872503,34.31769887989931],[131.90805219865004,34.31955923097375],[131.92055789583017,34.3157351751383],[131.93089318267428,34.3075702995297],[131.939471470332,34.303177802013934],[131.9467578467971,34.30604584434032],[131.95218387308725,34.31671702706909],[131.9586951031964,34.33397695607174],[131.96226077661348,34.33966136298143],[131.96623986208002,34.34343374287293],[131.99362837055284,34.35345897135453],[131.9985893088494,34.3583423943859],[132.00199995263577,34.36394928603083],[132.00029463119225,34.37242422090107],[131.99688398740616,34.37800527592266],[131.98990766840424,34.38617015243055],[131.98773725806805,34.40177643503445],[131.9916129898476,34.41335195622786],[132.05042077000243,34.45784536407233],[132.06111779205256,34.43505605689158],[132.0708846381156,34.35945343752606],[132.12643680231653,34.24876251937481],[132.14400678878238,34.22835032810521],[132.16059492421644,34.21801504216053],[132.1714469749978,34.215534573461824],[132.19981733630098,34.201530260413236],[132.2327352238515,34.19202179586917],[132.24040774780988,34.18980540594744],[132.24366295700005,34.166937567],[132.23894290500007,34.14264557500003],[132.22754967500012,34.132025458000086],[132.21371504000004,34.12433502800015],[132.20191491000006,34.108587958],[132.199066602,34.06476471600014],[132.21094811300023,34.02521393400009],[132.21322675900004,33.98965078300013],[132.18148847700016,33.95783112200009],[132.15723717500006,33.94891998900006],[132.14258873800006,33.94643789300012],[132.13559003999998,33.93842194200009],[132.13379967500012,33.913397528000175],[132.13892662900005,33.894964911000145],[132.15992272200006,33.85732656500015],[132.16163170700005,33.841701565000065],[132.15007571700002,33.83014557500006],[132.10580488399998,33.809027411000116],[132.07593834700018,33.78705475500011],[132.05591881600006,33.77716705900009],[132.04135175900004,33.77627187700001],[132.0444442070001,33.79328034100017],[132.06544030000012,33.80695221600011],[132.06885826900023,33.81167226800004],[132.0763452480002,33.826727606000034],[132.07846113400004,33.83490631700015],[132.08716881600012,33.82510000200001],[132.09888756600017,33.82363515800013],[132.10889733200005,33.830267645000035],[132.11329186300023,33.84487539300012],[132.109222852,33.86261627800003],[132.09945722700016,33.872259833],[132.08708743600013,33.878566799000126],[132.075450066,33.88641998900012],[132.0577905610002,33.89524974200016],[131.99480228000007,33.91347890800016],[131.97234134200008,33.91681549700009],[131.966563347,33.9215355490001],[131.94190514400012,33.950913804],[131.93091881600006,33.95697663],[131.90333092500023,33.96670156500012],[131.89356530000012,33.97142161700005],[131.87086022200006,33.98851146],[131.85206139400012,33.99835846600011],[131.83366946700008,33.99469635600015],[131.812266472,33.97142161700005],[131.82650800900004,33.97142161700005],[131.82650800900004,33.96523672100007],[131.79135175900015,33.96405670800006],[131.77955162900017,33.96967194200015],[131.77751712300008,33.98574453300013],[131.80730228000007,34.005804755],[131.82390384200014,34.02016836100016],[131.82276451900006,34.02667877800015],[131.8136499360002,34.02875397300009],[131.79957116000006,34.0377464860001],[131.74146569100012,34.05621979400003],[131.703379754,34.044175523000106],[131.688731316,34.04718659100011],[131.67611738400004,34.04018789300012],[131.64486738400015,34.02887604400014],[131.6334741550002,34.02667877800015],[131.606211785,34.02667877800015],[131.60173587300002,34.03001536700019],[131.59815514400017,34.0360375020001],[131.5932723320001,34.037298895],[131.5851343110002,34.02667877800015],[131.59400475400005,34.01532623900009],[131.59742272200006,34.00263092700011],[131.59302819100006,33.991685289000074],[131.57886803500006,33.98574453300013],[131.57178795700005,33.985174872000144],[131.56763756600006,33.98627350500011],[131.56568444100017,33.98965078300013],[131.5651961600001,33.99628327],[131.56226647200018,34.00462474200016],[131.5561629570001,34.00519440300003],[131.55111738400015,34.00214264500012],[131.55103600400017,33.99941640800007],[131.519297722,34.008490302000084],[131.51050866000006,34.012396552000055],[131.49301191499998,34.02814362200003],[131.48292076900023,34.032049872000115],[131.46900475400017,34.02667877800015],[131.47380618600008,34.01862213700012],[131.47429446700002,34.013983466000084],[131.46900475400017,34.00617096600011],[131.46631920700005,34.00678131700006],[131.4567163420002,33.99933502800009],[131.45533287900005,33.99315013200011],[131.45199628999998,33.98956940300015],[131.45183353000002,33.985907294000086],[131.44955488400015,33.982245184000035],[131.44117272200018,33.97890859600001],[131.43433678500017,33.98021067900011],[131.42823326900012,33.985907294000086],[131.4235132170002,33.99310944200012],[131.42058353000007,33.99941640800007],[131.41553795700023,33.989406643000095],[131.4096785820001,33.98305898600016],[131.40251712300002,33.98139069200015],[131.39332116000017,33.98574453300013],[131.40219160200004,33.99933502800009],[131.40479576900012,34.01727936400012],[131.40064537900017,34.03294505400011],[131.38990319100017,34.03974030200014],[131.38314863400004,34.03302643400009],[131.35572350400017,33.989447333000086],[131.33253014400023,33.962103583],[131.3219507170002,33.95307038],[131.2722274100001,33.92682526200015],[131.2579858730002,33.92479075700014],[131.24984785200016,33.937933661],[131.24252363400015,33.9344750020001],[131.23357181100002,33.93305084800012],[131.22584069100006,33.935003973000065],[131.22266686300017,33.94135163000003],[131.22071373800011,33.950384833000115],[131.21583092500023,33.95075104400003],[131.20923912900017,33.94725169500005],[131.20215905000012,33.944769598000036],[131.20036868600002,33.94253164300012],[131.19467207100016,33.93764883000016],[131.1870223320001,33.932766018000095],[131.17823326900023,33.93048737200003],[131.17318769600004,33.93398672100001],[131.1706649100001,33.94188060099999],[131.16026595300016,33.95279605600014],[131.16153708300018,33.964374254000134],[131.16684003999998,33.97239817900011],[131.16602623800006,33.977118231000034],[131.15739993600008,33.97890859600001],[131.1239987910001,33.999931396000036],[131.10316468400006,34.03021689000015],[131.07242398400004,34.03699727700011],[131.035594808,34.047975095000155],[131.01396225400018,34.01476201500013],[130.96859785200016,33.97142161700005],[130.93208630100006,33.945365284],[130.92629066500004,33.92269067000011],[130.9157534550002,33.91398982200015],[130.89918053500006,33.92426178600006],[130.8937280610002,33.932318427],[130.87940514400012,33.937933661],[130.88022440100022,33.95043178000019],[130.89942467500018,33.94985586100013],[130.90965033600017,33.973651604000096],[130.90772545700023,33.98493073100012],[130.91342207100004,33.99941640800007],[130.91713452200005,34.01091306300016],[130.91281170100015,34.021920678000114],[130.90528405000012,34.029608466000084],[130.91257739700004,34.053341562000085],[130.90391367800024,34.06582577800019],[130.87842858200023,34.06785716400013],[130.87322024800002,34.07819245000003],[130.86931399800002,34.091742255],[130.86280358200023,34.10179271000008],[130.86158287900005,34.11273834800015],[130.87322024800002,34.12909577000006],[130.88648522200018,34.13898346600017],[130.89926191500004,34.14565664300012],[130.91114342500023,34.15448639500009],[130.92090905000012,34.17064036700005],[130.92335045700023,34.18378327],[130.92025800900015,34.19257233300006],[130.91578209700018,34.19969310100011],[130.91041100400005,34.224920966000084],[130.8967391290001,34.244818427000084],[130.8937280610002,34.25604889500009],[130.89161217500006,34.25983307500009],[130.87623131600006,34.27000560100005],[130.87159264400012,34.27924225500011],[130.87533613400015,34.286688544000086],[130.8820093110002,34.293402411000116],[130.88624108200023,34.30044179900001],[130.88965905000023,34.331203518000095],[130.89307701900023,34.34349192900014],[130.89991295700017,34.35504791900017],[130.91114342500023,34.35089752800003],[130.9274194670002,34.348944403000175],[130.94190514400023,34.350978908000016],[130.94825280000018,34.3587914080001],[130.95476321700008,34.361721096000124],[130.99610436300011,34.36933014500006],[131.01172936300006,34.37596263200011],[131.03360681,34.38178924000012],[131.01788186800005,34.39329681000014],[131.00359134200008,34.39288971600011],[130.96509850400017,34.39996979400017],[130.95508873800011,34.403469143000066],[130.94890384200014,34.39500560100011],[130.94629967500012,34.39240143400012],[130.93392988399998,34.39598216400019],[130.93921959700006,34.40770091400016],[130.94776451900006,34.418931382],[130.95875084700006,34.42743561400012],[130.97639607600004,34.43896729200016],[130.98973169800004,34.435038253000144],[131.00284535400024,34.42594628900015],[131.00114993600002,34.41486237200003],[131.00977623800023,34.41030508000007],[131.02263431100008,34.409369208],[131.03728274800008,34.411118882],[131.0509546230002,34.41518789300015],[131.06120853000002,34.42084381700015],[131.07471764400012,34.42475006700012],[131.09937584700018,34.413275458],[131.11571755700007,34.40979405500018],[131.13392298800002,34.411561804000044],[131.1407983730002,34.37848541900014],[131.15365644600004,34.36933014500006],[131.17269941500004,34.367743231000034],[131.178957564,34.378775997000034],[131.1917016570002,34.39364779300003],[131.173594597,34.41022370000009],[131.17058353000013,34.41681549700017],[131.17131454900013,34.42953460500014],[131.19271894599999,34.42475006700012],[131.20736738400004,34.42894114800008],[131.23487389400023,34.43349844],[131.25263176100012,34.43738699200016],[131.26453684000015,34.428087194000014],[131.28121391700003,34.40795780000012],[131.2662558520001,34.4094488410001],[131.2510269640002,34.41913055400012],[131.24101992700017,34.421183598000184],[131.22950280000006,34.41771067900008],[131.22201582100004,34.40839264500012],[131.21607506600017,34.39691803600009],[131.21176191499998,34.38377513200011],[131.20899498800023,34.36933014500006],[131.21607506600017,34.37230052300008],[131.22877037900005,34.38019440300015],[131.23617597700004,34.382310289000074],[131.28448215100005,34.384211288000145],[131.32309029500007,34.393011809000186],[131.33473090300006,34.416114291000056],[131.36505001200013,34.41565087500008],[131.414317254,34.423976955000015],[131.4133146280001,34.45387373300012],[131.42640717300017,34.46564545000014],[131.4562280610002,34.49038320500013],[131.46192467500012,34.49925364799999],[131.45476321700008,34.519110419000086],[131.46176191500004,34.523504950000174],[131.4826766290001,34.52757396000014],[131.52076256600017,34.551906643],[131.53646894600016,34.56561920800014],[131.55103600400017,34.581529039000046],[131.55543053500006,34.592189846000096],[131.55729919400002,34.614856999],[131.5647924990001,34.61949431700019],[131.58518438800016,34.61842166400008],[131.5958764980002,34.61684804900007],[131.59424889400006,34.62567780200014],[131.59410358500023,34.64205125400004],[131.5968715730002,34.65958937200004],[131.61524189000014,34.66488063600015],[131.62940514400023,34.65924713700015],[131.65641471600006,34.65358629000012],[131.67085855700023,34.66281777400009],[131.67335498800017,34.670931860000096],[131.67562866336792,34.67214318498067],[131.6796245203553,34.66648457050654],[131.68046919239944,34.66227732973503]]],[[[131.1486108730002,34.760321356000176],[131.14014733200017,34.75910065300015],[131.13607832099999,34.762030341000084],[131.12810306100008,34.78432851800012],[131.13575280000006,34.79100169499999],[131.147715691,34.78961823100009],[131.1499129570001,34.78742096600011],[131.14820397200018,34.78375885600015],[131.14828535200016,34.78066640800007],[131.15219160200016,34.779079494000044],[131.15748131600006,34.77891673400008],[131.16114342500012,34.775824286],[131.16049238400015,34.76850006700009],[131.1563419930002,34.76341380400005],[131.1486108730002,34.760321356000176]]]]}},{"type":"Feature","properties":{"iso_3166_2":"JP-41","name":"Saga","name_alt":null,"name_local":"佐賀県","type":"Ken","type_en":"Prefecture","region":null,"postal":"SG","region_code":null},"geometry":{"type":"MultiPolygon","coordinates":[[[[129.9767358730002,33.53139883000007],[129.96827233200017,33.526109117000104],[129.96452884200002,33.53188711100016],[129.96656334700006,33.53876373900009],[129.96322675900004,33.53921133000007],[129.97706139400023,33.5442162130001],[129.9767358730002,33.53139883000007]]],[[[129.86878891900002,33.53939995000006],[129.88583138300007,33.53584022100013],[129.910059486,33.547204999000044],[129.942149285,33.531683661000116],[129.96127363399998,33.512762762000094],[129.9569968010001,33.502782411000155],[129.94554470200003,33.49085512700013],[129.94120890100012,33.47953658700011],[129.95333126000017,33.47365559600017],[129.96264789400018,33.48260727800009],[129.96690162200017,33.472528834000016],[129.966868876,33.46302701300014],[129.97538907600003,33.45414314300014],[129.98894602800024,33.44885137800016],[130.016856316,33.44578685099999],[130.02881920700023,33.45066966400016],[130.036274927564,33.45759283361518],[130.03643517494348,33.457596340199004],[130.09074710479499,33.458784897704916],[130.1211328468033,33.462195543289724],[130.16350752205452,33.46173045529635],[130.21203169220897,33.468706773398836],[130.23084191302397,33.46948191975484],[130.25895389190853,33.46798330298709],[130.27523196808093,33.46446930641328],[130.28995975244075,33.45883657544762],[130.350834589245,33.42700389351491],[130.3658724310678,33.42085439681291],[130.37967003764217,33.41315460919786],[130.40106408084264,33.39406016754266],[130.4142932484347,33.38654124618158],[130.42623050303533,33.38695465823098],[130.44664269430493,33.40178579447881],[130.45863162664833,33.40852956768542],[130.48689863516384,33.41961416336302],[130.50669070880903,33.42354157198595],[130.51929975787758,33.42085439681291],[130.52663781118602,33.41423981391621],[130.52891157430977,33.40933055336241],[130.5364046572491,33.37698110569353],[130.53666303876824,33.36969472922833],[130.53190880694578,33.33788788481813],[130.5261210472486,33.33085988987203],[130.51743940590384,33.327681790082565],[130.5076725607402,33.32651907009905],[130.49583865802768,33.32199738227338],[130.48395307757247,33.31481435769648],[130.47790693635616,33.30427236617682],[130.470930617354,33.28729665801437],[130.46503950397008,33.28132803026445],[130.45336062998902,33.26471405730787],[130.4442139024496,33.259727281488935],[130.42359500470567,33.259107163864556],[130.41408654196024,33.25448212325141],[130.4041646671657,33.24815176029553],[130.39083214678627,33.243242498842264],[130.38122033125333,33.23644704789292],[130.37470910024493,33.227248644409414],[130.37021325084098,33.2074565698649],[130.36664757742372,33.19978261977208],[130.36230675675156,33.19520925510308],[130.35372846909368,33.18877554025899],[130.34675215099108,33.17991303176099],[130.3453568870108,33.16712311553941],[130.34628706299756,33.15686534306114],[130.3493359715778,33.14216339802242],[130.34936061834557,33.14204455304544],[130.33741295700023,33.14337799700017],[130.31478925900015,33.14850495000009],[130.30054772200018,33.149644273000135],[130.29044274400022,33.14958862900015],[130.2581486340001,33.17865631700003],[130.2413964770001,33.188234066000135],[130.21930161999998,33.159465952000076],[130.17823326900006,33.13491445500013],[130.15088951900012,33.11188385600015],[130.12756487200014,33.12093662000011],[130.13194608500007,33.10197172699999],[130.14512925400018,33.08483626000016],[130.1604923840001,33.05410390800013],[130.20390147900017,32.99178161500005],[130.22231019900008,32.975205048000035],[130.21914692699997,32.955059859000144],[130.20425778500024,32.95087110800013],[130.20410127959255,32.94357262887702],[130.10340783070686,32.959952296960935],[130.0595345395873,32.97323314139642],[130.03219770705854,32.98754751190809],[130.01576460215475,32.99976898914748],[129.99716108601527,33.01718394598241],[129.92517581601103,33.06878286403803],[129.9171142931901,33.078317166104355],[129.915408969948,33.086740424131264],[129.93091189976442,33.09896190047128],[129.93540775006775,33.10741099691997],[129.93587283716184,33.11846975417576],[129.93013675340845,33.132086492697496],[129.91933637857093,33.14428213151517],[129.90517703679083,33.14986318653693],[129.86218224481482,33.159862575697346],[129.82921268132023,33.17508128557286],[129.8150016617973,33.18595917387684],[129.80647505098275,33.196682034348484],[129.80321943592824,33.20629384988122],[129.7981034689,33.216396592728486],[129.7666841981173,33.25610993122835],[129.7594494975963,33.268202216359256],[129.75820926324687,33.27910594308479],[129.7641003766311,33.288226834001264],[129.79479617700204,33.31724315045112],[129.8101957540309,33.32509796769709],[129.81454436463432,33.331246004800775],[129.8145451180002,33.331244208],[129.814707879,33.33087799700009],[129.8198348320001,33.30475495000003],[129.82715905000012,33.29389069200015],[129.83790123800023,33.28538646000011],[129.85157311300006,33.28001536700005],[129.84799238399998,33.29340241100006],[129.84132811800018,33.31597731400008],[129.846295401,33.34796460600005],[129.8590081340001,33.367514084],[129.87102535699998,33.378177884000124],[129.86186331800016,33.390046186000134],[129.8686629570001,33.39744700700008],[129.816392187,33.4261020310001],[129.79688561300023,33.444484768000095],[129.78725722300024,33.45451903900006],[129.79717159900005,33.46758179600015],[129.80424474499998,33.48182305800013],[129.81844004700005,33.48421177600015],[129.8354598320001,33.46637604400003],[129.84131920700023,33.45441315300009],[129.84888756600017,33.44245026200015],[129.86207116000006,33.43699778900013],[129.8713485040001,33.44293854400014],[129.86687259200002,33.45673248900006],[129.84395138900007,33.48121705400017],[129.83683473900007,33.51325412100006],[129.85457924400012,33.53285385400012],[129.85318715600013,33.55250171100006],[129.86878891900002,33.53939995000006]]],[[[129.88990319100012,33.55349355700015],[129.87663821700008,33.5442162130001],[129.87273196700008,33.545355536000145],[129.8722436860002,33.553778387000094],[129.87232506600017,33.559759833000115],[129.87712649800008,33.56427643400015],[129.8834741550002,33.565863348],[129.89063561300023,33.558050848],[129.88990319100012,33.55349355700015]]],[[[129.76303144600016,33.58279043200018],[129.7701929050002,33.57221100500014],[129.7662866550002,33.568996486000074],[129.76246178500017,33.56622955900012],[129.76075280000006,33.56382884300017],[129.75782311300017,33.56346263200005],[129.75098717500023,33.56720612200009],[129.7442326180002,33.57013580900012],[129.74236087300002,33.57237376500011],[129.73975670700023,33.57562897300015],[129.74097741000017,33.58116282800016],[129.7452091810001,33.58279043200018],[129.750254754,33.58091868700002],[129.75033613399998,33.58091868700002],[129.76303144600016,33.58279043200018]]],[[[129.86548912900005,33.59121328300013],[129.85808353000007,33.58779531500012],[129.84815514400023,33.59979889500015],[129.84961998800011,33.6025658220001],[129.84815514400023,33.60460032800013],[129.8492944670002,33.60635000200013],[129.85206139400023,33.60891347900004],[129.85434004000004,33.61212799700009],[129.85499108200005,33.61766185100011],[129.86272220100003,33.618272203000075],[129.86150149800008,33.60728587400003],[129.85987389400023,33.60460032800013],[129.86117597700016,33.60024648600013],[129.86426842500023,33.59837474200016],[129.86614017000002,33.597316799000126],[129.86614017000002,33.593207098000065],[129.86548912900005,33.59121328300013]]]]}},{"type":"Feature","properties":{"iso_3166_2":"JP-40","name":"Fukuoka","name_alt":"Hukuoka","name_local":"福岡県","type":"Ken","type_en":"Prefecture","region":"Kyushu","postal":"FO","region_code":"JPN-KYS"},"geometry":{"type":"MultiPolygon","coordinates":[[[[130.31324303500006,33.62051015800016],[130.30022220100014,33.60643138200011],[130.29330488400015,33.613023179],[130.29639733200023,33.62018463700004],[130.30144290500007,33.63821035400015],[130.31324303500006,33.62051015800016]]],[[[130.37940514400012,33.76093170800006],[130.37973066500015,33.75800202000012],[130.37110436300023,33.75938548400002],[130.36605879000004,33.75877513200005],[130.36182701900006,33.75413646000014],[130.3599552740002,33.76780833500008],[130.36972089900004,33.76683177299999],[130.37940514400012,33.76093170800006]]],[[[130.50407962300008,33.90306224200016],[130.50709069100017,33.89492422100015],[130.49496504000015,33.899562893000066],[130.49211673300013,33.90517812700007],[130.48650149800002,33.9142113300001],[130.49805748800023,33.912827867000104],[130.49903405000023,33.907375393000066],[130.50407962300008,33.90306224200016]]],[[[130.43742923300007,33.89866771],[130.42432701900012,33.88967519700016],[130.4119572270001,33.89826080900018],[130.407481316,33.90884023600013],[130.41407311300011,33.91299062700007],[130.42969811300006,33.91555410400018],[130.44206790500013,33.913397528000175],[130.43742923300007,33.89866771]]],[[[130.99292883500007,33.89766466700014],[131.00177079800008,33.88722868400005],[130.99982932100008,33.8738635400001],[130.98460705500023,33.87396048700013],[130.98808132899998,33.864284161000015],[130.9906843900001,33.85682718300005],[130.98433485600017,33.84869791800013],[130.97974694100017,33.84271881700012],[130.96357418600005,33.83323528200016],[130.96192467500012,33.82005442900008],[130.96168053500017,33.81622955900015],[130.96599368600008,33.81305573100009],[130.98551079600023,33.808664865000154],[131.00694470900024,33.813087590000166],[131.00359134200008,33.77968984600004],[131.0060327480002,33.77228424700003],[131.00977623800023,33.746161200000174],[131.019786004,33.726548570000105],[131.05079186300023,33.681870835000055],[131.06446373800006,33.65326569200009],[131.08130944100017,33.634955145000035],[131.10297618100017,33.62425323800015],[131.11997169700024,33.62633852100011],[131.14587465700012,33.62163367200013],[131.18869910100003,33.61602829300013],[131.20089214658574,33.61270976599219],[131.1951241398672,33.607302964859954],[131.18220503063768,33.5970968692251],[131.17951785726328,33.59273021103043],[131.17517703659084,33.58332510017321],[131.17517703659084,33.56844228798123],[131.18313520662448,33.545446275225444],[131.18111982591913,33.535937812479986],[131.1750736838034,33.52549917194928],[131.16298139867266,33.51304515251188],[131.15709028528843,33.50361420323283],[131.14949384956165,33.495656033199296],[131.13972700439766,33.491547756523815],[131.1244824569998,33.49015249344275],[131.06427941286475,33.49811066347628],[131.0042313992598,33.500126044181556],[130.99508466992168,33.498937485776324],[130.9806669457229,33.49578522440858],[130.95053958523377,33.48519155514613],[130.93798221210935,33.47733673790019],[130.92557986861598,33.46612295191274],[130.9108004092116,33.44875967102199],[130.88584069169448,33.425401923060306],[130.8748336121814,33.4078319356952],[130.86491173738685,33.38468089420796],[130.84129560790595,33.3520213890758],[130.83850507994546,33.34551015896669],[130.83710981686457,33.33974823679175],[130.83633466960944,33.331454169074576],[130.83695478723374,33.32251414621079],[130.8430009302488,33.294402167326226],[130.84114057827506,33.27721975448809],[130.8262577660831,33.23298472816272],[130.83075361458756,33.21471710880748],[130.85214765778815,33.159733385387526],[130.8560233913665,33.14299022122184],[130.83473270095342,33.0809268251128],[130.78682864842344,33.10051219318315],[130.72864098499346,33.13446360950799],[130.71592858313764,33.13914032606512],[130.70089074131468,33.140587266888886],[130.68518110592336,33.14004466452958],[130.67308882079234,33.13531627022975],[130.64983442561837,33.11312124315084],[130.635881789413,33.10428457307465],[130.6177950381106,33.10113231080753],[130.57986453721858,33.09836762126862],[130.56368981293454,33.09167552310696],[130.54648156077533,33.07746450538259],[130.52178022657628,33.0615998403603],[130.50824100242042,33.04945587838604],[130.4989909202948,33.033978786991426],[130.50048953706246,33.01620209405134],[130.5019364769868,33.00984589357323],[130.49945600828826,33.00248200094369],[130.49821577393882,33.000234076241654],[130.48395307757247,32.99467886054096],[130.44514407843647,32.989511217568676],[130.4293827662017,32.98064870907065],[130.4291583888049,32.980522543166174],[130.42644290500002,33.00714752800009],[130.42847741000017,33.05052317900008],[130.42164147200006,33.069769598],[130.42221113400004,33.08258698100006],[130.42066491000017,33.08759186400009],[130.41504967500018,33.09162018400015],[130.4096785820001,33.09267812700001],[130.4044702480002,33.093003648000135],[130.400157097,33.09503815300015],[130.37940514400012,33.107855536],[130.37224368600008,33.11489492400007],[130.36752363400015,33.126369533000016],[130.36801191500015,33.13495514500012],[130.3647567070001,33.14032623900009],[130.34936061834557,33.14204455304544],[130.3493359715778,33.14216339802242],[130.34628706299756,33.15686534306114],[130.3453568870108,33.16712311553941],[130.34675215099108,33.17991303176099],[130.35372846909368,33.18877554025899],[130.36230675675156,33.19520925510308],[130.36664757742372,33.19978261977208],[130.37021325084098,33.2074565698649],[130.37470910024493,33.227248644409414],[130.38122033125333,33.23644704789292],[130.39083214678627,33.243242498842264],[130.4041646671657,33.24815176029553],[130.41408654196024,33.25448212325141],[130.42359500470567,33.259107163864556],[130.4442139024496,33.259727281488935],[130.45336062998902,33.26471405730787],[130.46503950397008,33.28132803026445],[130.470930617354,33.28729665801437],[130.47790693635616,33.30427236617682],[130.48395307757247,33.31481435769648],[130.49583865802768,33.32199738227338],[130.5076725607402,33.32651907009905],[130.51743940590384,33.327681790082565],[130.5261210472486,33.33085988987203],[130.53190880694578,33.33788788481813],[130.53666303876824,33.36969472922833],[130.5364046572491,33.37698110569353],[130.52891157430977,33.40933055336241],[130.52663781118602,33.41423981391621],[130.51929975787758,33.42085439681291],[130.50669070880903,33.42354157198595],[130.48689863516384,33.41961416336302],[130.45863162664833,33.40852956768542],[130.44664269430493,33.40178579447881],[130.42623050303533,33.38695465823098],[130.4142932484347,33.38654124618158],[130.40106408084264,33.39406016754266],[130.37967003764217,33.41315460919786],[130.3658724310678,33.42085439681291],[130.350834589245,33.42700389351491],[130.28995975244075,33.45883657544762],[130.27523196808093,33.46446930641328],[130.25895389190853,33.46798330298709],[130.23084191302397,33.46948191975484],[130.21203169220897,33.468706773398836],[130.16350752205452,33.46173045529635],[130.1211328468033,33.462195543289724],[130.09074710479499,33.458784897704916],[130.03643517494348,33.457596340199004],[130.036274927564,33.45759283361518],[130.0402124360002,33.46124909100011],[130.04462561600022,33.48574090400011],[130.0552943830002,33.495225676000175],[130.08597211100007,33.50653186400014],[130.10384486200022,33.51190524500011],[130.11526180200022,33.50895078600017],[130.12598717500023,33.51618073100009],[130.12989342500023,33.51898834800015],[130.14275149800008,33.520493882000025],[130.1564233730002,33.52537669500008],[130.16797936300023,33.534084377000156],[130.17416425900004,33.546861070000105],[130.16187584700006,33.54661692900005],[130.12989342500023,33.540025132],[130.12037194100017,33.54315827000006],[130.11793053500006,33.556830145],[130.10914147200006,33.55988190300009],[130.09693444100017,33.56171295800006],[130.092051629,33.566473700000145],[130.09302819100017,33.57343170800006],[130.09848066500004,33.581691799000126],[130.10914147200006,33.589748440000065],[130.11939537900017,33.59125397300012],[130.12916100400005,33.59125397300012],[130.13941491000006,33.59467194200012],[130.15666362200002,33.60650551500011],[130.15383933900003,33.61894298100016],[130.15954752700023,33.62959605400009],[130.17074629000004,33.62885163000011],[130.18189537900005,33.62905508000007],[130.19068444100017,33.63031647300009],[130.19776451900023,33.63361237200003],[130.20476321700002,33.63971588700012],[130.20801124200003,33.66507643700014],[130.22055097700016,33.65973541900017],[130.23170006600012,33.65330638200008],[130.2365014980002,33.64423248900006],[130.2271562330001,33.6348435390001],[130.23138438300006,33.61884615200013],[130.24537194100006,33.61176178600009],[130.25147545700023,33.60797760600015],[130.2719213730002,33.61166814100015],[130.27544953700007,33.60336765000001],[130.26543167800006,33.58857951500009],[130.27324374700018,33.58264295600004],[130.28541100400017,33.57697174700003],[130.29029381600006,33.57420482000008],[130.29529753400007,33.57904258200013],[130.30152428500006,33.579657294000114],[130.30543053500006,33.584947007],[130.315307038,33.59736182000002],[130.33026873200018,33.59791994000001],[130.3580496240002,33.5972586000001],[130.37303995000016,33.603144833000144],[130.39086562400016,33.60487402200012],[130.3994783520001,33.61611050099999],[130.4024076850001,33.63092078800018],[130.40750100800008,33.650468484],[130.40326038100002,33.65818688100002],[130.39869225400005,33.669134833],[130.37924238400015,33.659247137000094],[130.36158287900005,33.64622630400011],[130.34897188800002,33.64113020500015],[130.3361683330002,33.647677552000104],[130.32478674000012,33.65303453300014],[130.31839397600018,33.65838070800008],[130.30698072000015,33.65544060500018],[130.29490003900005,33.66435087500004],[130.28926262000007,33.681544502000136],[130.29428057700014,33.6892394070001],[130.30496604600015,33.68744291200012],[130.31061090100005,33.67261755300014],[130.32412225900012,33.664887418000134],[130.34549789700012,33.66247159000007],[130.38648522200018,33.67723216400013],[130.40202884200008,33.68939850500011],[130.415293816,33.702826239],[130.42872155000012,33.71369049700009],[130.44459069100006,33.71820709800015],[130.4521130860002,33.72797385299999],[130.4676738440002,33.743563601000105],[130.46998655100006,33.762869178000145],[130.46675959500013,33.780352986000096],[130.45570365100016,33.78223217800014],[130.44800866000006,33.78994375200013],[130.44955488399998,33.8022321640001],[130.45435631600017,33.80768463700004],[130.4620874360002,33.81118398600013],[130.47217858200023,33.817531643000066],[130.47779381600006,33.825140692],[130.48894290500007,33.85537344],[130.49708092500006,33.84813060099999],[130.50757897200006,33.849066473000065],[130.53052819100006,33.86155833500008],[130.53907311300017,33.86945221600014],[130.54232832100004,33.87596263200014],[130.54818769600016,33.88076406500012],[130.56470787900005,33.88328685100005],[130.61207116000017,33.879787502000156],[130.633067254,33.882473049000126],[130.65406334700006,33.896307684000035],[130.68441816500004,33.93423086100016],[130.69239342500006,33.937323309000035],[130.7052514980002,33.938706773000106],[130.71705162900017,33.93789297100001],[130.73150483800012,33.93184873400004],[130.75604891900016,33.943681113000125],[130.79049451200004,33.94441130800014],[130.82822790400004,33.93958513800014],[130.8213388820001,33.9202871370001],[130.83586868700016,33.925729009000136],[130.8614234190001,33.925567718000124],[130.87119899500024,33.91351609900012],[130.88085281300008,33.89593952100013],[130.89698326900023,33.88930898600013],[130.9135848320001,33.89118073100012],[130.926036004,33.8990746110001],[130.94141686300023,33.91681549700009],[130.94947136400017,33.93819283900014],[130.9765672460001,33.95736693000005],[131.00714759400014,33.96605493200009],[131.01868565800012,33.956262097000135],[131.01531009200008,33.93512604400014],[131.00635826900012,33.92291901200015],[131.00359134200008,33.91681549700009],[131.00416100400005,33.91107819200003],[130.99292883500007,33.89766466700014]]],[[[130.7164819670002,34.00010814000011],[130.71713300900015,33.99778880400005],[130.71070397200006,33.99892812700007],[130.71404056100008,34.00682200700005],[130.7164819670002,34.00010814000011]]],[[[130.11361738400004,34.24603913],[130.10474694100017,34.238714911],[130.10775800899998,34.24957916900017],[130.11361738400004,34.24603913]]]]}},{"type":"Feature","properties":{"iso_3166_2":"JP-43","name":"Kumamoto","name_alt":null,"name_local":"熊本県","type":"Ken","type_en":"Prefecture","region":"Kyushu","postal":"KM","region_code":"JPN-KYS"},"geometry":{"type":"MultiPolygon","coordinates":[[[[130.04224694100006,32.17430247600005],[130.04574629000004,32.164048570000105],[130.04468834700018,32.1615257830001],[130.04428144600016,32.1563988300001],[130.0325626960001,32.17177969000012],[130.02247155000012,32.160589911000116],[130.0177514980002,32.161078192],[130.01701907599997,32.1676292990001],[130.01701907599997,32.17177969000012],[130.01718183700015,32.178208726000136],[130.02230879000015,32.18740469],[130.0289819670002,32.19114817900005],[130.03744550900015,32.18252187700013],[130.03956139400017,32.18040599200013],[130.03614342500023,32.179754950000174],[130.04224694100006,32.17430247600005]]],[[[130.16732832099999,32.11432526200012],[130.1492619150001,32.110500393],[130.13461347700016,32.11798737200017],[130.12777754000015,32.13231028900016],[130.13331139400017,32.149115302000084],[130.1232202480002,32.158921617000104],[130.1150822270001,32.17544179900007],[130.111094597,32.19330475500014],[130.11329186300011,32.207586981000034],[130.12110436300011,32.21263255400008],[130.13200931100008,32.21133047100007],[130.15308678500017,32.203762111000046],[130.17603600400017,32.20335521000011],[130.18726647200018,32.19635651200004],[130.1941024100001,32.17641836100016],[130.19076582100016,32.164618231000176],[130.17359459700006,32.12433502800012],[130.16732832099999,32.11432526200012]]],[[[130.21184329500002,32.21832916900014],[130.20378665500007,32.20311107],[130.20215905000023,32.20840078300016],[130.20199629000015,32.21417877800012],[130.19906660200016,32.20892975500011],[130.18848717500012,32.22101471600003],[130.193207227,32.228054104000094],[130.19385826900023,32.23533763200011],[130.1919865240001,32.2431908220001],[130.19776451900023,32.242987372000144],[130.20126386800015,32.236110744000044],[130.2101343110002,32.227403062000135],[130.20842532599997,32.22337474200019],[130.20899498800023,32.219916083],[130.21184329500002,32.21832916900014]]],[[[130.17383873800011,32.23301829600014],[130.16757246200015,32.22675202],[130.16342207099999,32.230088609000134],[130.16016686300023,32.23086172100015],[130.15748131600017,32.238714911000145],[130.16203860800013,32.24249909100014],[130.1639103520001,32.24518463700004],[130.16667728000007,32.25075918200007],[130.16985110800013,32.25633372600005],[130.1797794930002,32.26076894700013],[130.1871037120002,32.26809316600004],[130.18775475400017,32.26003652600009],[130.18344160200016,32.25633372600005],[130.17839603000002,32.25104401200018],[130.17562910200016,32.2389183610001],[130.17383873800011,32.23301829600014]]],[[[130.22315514400006,32.25706614799999],[130.21509850400005,32.252671617000104],[130.21070397200006,32.25535716400019],[130.21094811300011,32.26577383000007],[130.21290123800023,32.27667877800015],[130.21705162900017,32.28693268400018],[130.22291100400005,32.292059637000094],[130.22852623800023,32.293036200000145],[130.231211785,32.29511139500009],[130.23226972700016,32.29865143400015],[130.24390709700018,32.30182526200004],[130.26026451900006,32.2950707050001],[130.26644941500015,32.28705475500006],[130.26303144600016,32.281317450000174],[130.25359134200002,32.271633205000015],[130.24284915500013,32.2630882830001],[130.23267662900017,32.258775132],[130.22315514400006,32.25706614799999]]],[[[130.33130944100006,32.30548737200009],[130.30266360800024,32.30426666900017],[130.30119876400013,32.305853583],[130.30534915500007,32.30963776200012],[130.3103947270001,32.31061432500009],[130.32935631600012,32.31842682500009],[130.33041425900015,32.32713450700008],[130.33497155000012,32.340521552000084],[130.3462833990001,32.34979889500012],[130.3536076180001,32.350897528000175],[130.3600366550002,32.348781643000066],[130.36947675900004,32.34813060100011],[130.37045332099999,32.341742255],[130.35515384200002,32.32217031500012],[130.33130944100006,32.30548737200009]]],[[[130.3159285820001,32.36912669500005],[130.31820722700016,32.36782461100016],[130.32073001400008,32.368150132],[130.32252037900017,32.36550527600009],[130.32178795700023,32.36196523600002],[130.32276451900012,32.3594017600001],[130.3255314460001,32.36107005400011],[130.33212324300004,32.358547268],[130.3340763680002,32.35476308800018],[130.3404240240002,32.35228099200005],[130.3267521490001,32.34760163000014],[130.31877688900025,32.33950429900001],[130.31706790500007,32.341213283000016],[130.3125919930001,32.34076569200012],[130.3121037120001,32.34686920800003],[130.3198348320001,32.34792715100015],[130.31836998800023,32.34935130400014],[130.31625410200004,32.350897528000175],[130.3112085300002,32.349636135000154],[130.29900149800014,32.35602448100009],[130.3042098320001,32.362575588000155],[130.3107202480002,32.36107005400011],[130.31324303500006,32.3672142600001],[130.31495201900023,32.36831289300015],[130.3159285820001,32.36912669500005]]],[[[130.42969811300006,32.382350979000094],[130.4317326180002,32.37864817900005],[130.4273380870002,32.373195705000015],[130.42188561300006,32.370388088000155],[130.4205021490001,32.36692942900008],[130.4156193370002,32.36831289300015],[130.41602623800023,32.37653229400014],[130.41586347700016,32.380601304000024],[130.4122827480002,32.380601304000024],[130.40780683700015,32.3930931660001],[130.41285241000017,32.399888414000046],[130.4161889980002,32.396185614],[130.4244083990001,32.38898346600014],[130.4235132170002,32.38340892100014],[130.42969811300006,32.382350979000094]]],[[[130.38331139400012,32.5094261740001],[130.39177493600008,32.50873444200015],[130.41000410200004,32.51162344000009],[130.44019616000006,32.52399323100012],[130.45704186300023,32.52558014500015],[130.46851647200018,32.51162344000009],[130.43482506600017,32.49274323100015],[130.392832879,32.397162177000084],[130.36231530000018,32.374986070000105],[130.35873457099999,32.37995026200015],[130.35792076900006,32.39118073100015],[130.358653191,32.41290924700003],[130.35385175900004,32.42413971600003],[130.34310957100004,32.42182038000006],[130.32447350400005,32.409816799000126],[130.28443444100017,32.40753815300015],[130.26482181100002,32.403631903000175],[130.241953972,32.39549388200005],[130.22169030000012,32.42186107000005],[130.2130639980002,32.43650950700005],[130.21363366000017,32.45042552300005],[130.21859785200004,32.455959377000156],[130.22510826900012,32.45819733300014],[130.23910566499998,32.46027252800015],[130.24789472700016,32.46458567900008],[130.26783287900005,32.484198309000035],[130.29029381600006,32.49795156500015],[130.30518639400012,32.50405508000013],[130.34156334700018,32.514349677000055],[130.36304772200012,32.527085679000024],[130.37094160200016,32.52704498900003],[130.37720787900005,32.522894598000065],[130.37964928500017,32.51532623900012],[130.38331139400012,32.5094261740001]]],[[[130.18946373800006,32.52179596600003],[130.19898522200018,32.48016998900006],[130.20150800899998,32.39549388200005],[130.20411217500006,32.38764069200006],[130.20679772200006,32.38125234600015],[130.20834394599999,32.373277085],[130.20557701900023,32.34662506700006],[130.20337975400005,32.33885325700005],[130.19922936300011,32.33274974200016],[130.19068444100017,32.32355377800009],[130.18140709700006,32.31826406500012],[130.1577254570001,32.31024811400009],[130.15308678500017,32.303371486000074],[130.13331139400017,32.26512278900013],[130.12777754000015,32.26141998900009],[130.10531660200016,32.25214264500012],[130.09693444100017,32.24502187700007],[130.07496178500017,32.22077057500009],[130.06104576900012,32.21185944200015],[130.03687584700018,32.19977448100015],[130.01197350400005,32.19061920800006],[129.99545332100016,32.19065989800005],[129.994395379,32.19989655200011],[130.00912519600004,32.25214264500012],[129.99732506600006,32.244045315],[129.98633873800006,32.24437083500011],[129.975840691,32.24591705900015],[129.95834394600016,32.237534898000106],[129.95801842500023,32.24237702000009],[129.96127363399998,32.25214264500012],[129.96534264400023,32.258205471000124],[129.99626712300008,32.28217194200009],[130.01661217500006,32.29311758000013],[130.03012129000015,32.29523346600014],[130.04216556100008,32.29450104400003],[130.05323326900012,32.296535549000154],[130.06430097700004,32.30678945500007],[130.05420983200005,32.30695221600014],[130.04615319100006,32.308254299000126],[130.03028405000012,32.313625393],[130.00879967500006,32.30589427299999],[129.99146569100017,32.314439195000105],[129.979746941,32.33299388200011],[129.97527103000007,32.35541413000011],[129.97657311300023,32.36644114799999],[129.98047936300023,32.37563711100013],[129.98698978000002,32.38296133000016],[129.99545332100016,32.38865794500013],[129.98902428500017,32.40448639500006],[129.994395379,32.42413971600003],[130.0065210300002,32.44403717700011],[130.02003014400006,32.46067942900008],[130.03028405000012,32.48240794500005],[130.02540123800023,32.50214264500006],[130.00294030000023,32.53335195500016],[130.01547285200004,32.532782294000086],[130.02475019599999,32.52773672100015],[130.03296959700018,32.521918036],[130.043223504,32.51902903900016],[130.05648847700016,32.52118561400006],[130.07691491,32.530991929],[130.10279381600006,32.536525783000016],[130.1202905610002,32.54287344000015],[130.13982181100008,32.54767487200003],[130.1604923840001,32.54633209800015],[130.18946373800006,32.52179596600003]]],[[[130.46745853000002,32.544623114000146],[130.46257571700008,32.54165273600013],[130.46184329500014,32.562323309000064],[130.46037845099997,32.57575104400006],[130.46233157600014,32.57920970300013],[130.46729576900006,32.58360423400002],[130.47494550900004,32.585109768000066],[130.48137454500002,32.57444896000014],[130.48170006600006,32.561428127000156],[130.46745853000002,32.544623114000146]]],[[[130.5108341810002,32.59304433800004],[130.4971623060001,32.579982815000065],[130.4871525400001,32.57558828300007],[130.48682701900023,32.58405182500012],[130.4878849620002,32.590236721000096],[130.4819442070001,32.58864980700015],[130.47885175900004,32.59048086100013],[130.47990970100014,32.59300364800005],[130.47852623800006,32.59495677299999],[130.4805607430002,32.59780508000013],[130.47689863400015,32.59951406500012],[130.4796655610002,32.60675690300015],[130.48845462300008,32.609727281000076],[130.49708092500006,32.60781484600004],[130.51010175900015,32.60691966400013],[130.5108341810002,32.59304433800004]]],[[[130.452891472,32.6109886740001],[130.45004316500015,32.60325755400008],[130.44678795700023,32.596828518000066],[130.45264733200005,32.59064362200009],[130.45386803500017,32.58006419500005],[130.45093834700006,32.563421942],[130.44581139400023,32.55255768400009],[130.43189537900017,32.54987213700004],[130.42457116000017,32.54682038000014],[130.42758222700016,32.53729889500012],[130.4213973320001,32.54075755400014],[130.40919030000012,32.54926178600006],[130.40674889400006,32.56098053600006],[130.411387566,32.57387929900007],[130.40772545700017,32.58173248900006],[130.39966881600006,32.58641185100008],[130.39877363400004,32.593166408000016],[130.4135848320001,32.613592841000084],[130.41651451900023,32.613959052],[130.41684004000015,32.610052802],[130.4200952480002,32.611558335000055],[130.42847741000017,32.617661851000136],[130.43653405000012,32.62067291900014],[130.4464624360002,32.61660390800007],[130.452891472,32.6109886740001]]],[[[131.20907677607224,33.030206407099925],[131.22039391484728,33.000492459559425],[131.23465661031426,32.97519684525817],[131.2382222837314,32.96387970648327],[131.24008263570502,32.95450043404783],[131.24380333875305,32.90651886715206],[131.2461804546642,32.89385814124033],[131.26214847157465,32.86628876381532],[131.32390180932114,32.822286282386116],[131.27052005365746,32.81050405471838],[131.25806603422004,32.80381195745592],[131.24225304604138,32.793269965036885],[131.23605187429453,32.78365814950406],[131.22519982261386,32.757070624010126],[131.21042036320912,32.73469472887861],[131.181378209237,32.70864980754264],[131.17517703659084,32.70144094544328],[131.15957075398703,32.67565440472704],[131.14654829286943,32.66296784129277],[131.12541263208735,32.64604380997393],[131.11285525896315,32.631109320938336],[131.10458702966778,32.61408193593256],[131.09998782837565,32.586383368197815],[131.09502689007903,32.57578969983474],[131.0856734560651,32.57134552727432],[131.07327111167243,32.569226792882105],[131.05921512267977,32.56873586736633],[131.04660607271208,32.564498399481565],[131.03513390520553,32.55287120234409],[131.0225248561371,32.53408681905144],[131.00412804557274,32.48742300087072],[130.99989057768798,32.47055064549592],[131.0000456082183,32.4601120058643],[131.00206098802417,32.4509136014815],[131.00578169197152,32.439079697869786],[131.01306806933601,32.42228485776006],[131.0215946801504,32.410580146256834],[131.04366051602008,32.39210582132661],[131.05420250933847,32.38078868345109],[131.0631425313027,32.36370962250113],[131.06893029189953,32.34815501584127],[131.08350304572886,32.325184841507294],[131.0878438664013,32.31366099715733],[131.08712039598956,32.299630845686934],[131.08091922424288,32.28740936934692],[131.06179894416587,32.264335842225265],[131.05032677576006,32.24619741497868],[131.05032677576006,32.233769233063626],[131.0549776547949,32.222581285497895],[131.0717208189607,32.19782827445523],[131.07843875464468,32.18364309335412],[131.08164269375536,32.16369599097716],[131.07590661000202,32.155634467256945],[131.06505455922044,32.15206879294051],[131.05296227408965,32.153231512923995],[131.0056266623407,32.165788886048276],[130.99725508025764,32.16268829972522],[130.98645470631973,32.15447174727326],[130.96743777903018,32.13188914656688],[130.9522449075764,32.12013275822032],[130.93689700739108,32.11496511524793],[130.90925011560049,32.121915594928694],[130.89684777210707,32.122432358866305],[130.88367028225778,32.11915090628925],[130.85183760032496,32.10163259486838],[130.83741987522708,32.0956639671184],[130.82346723812245,32.09214997054467],[130.81075483626674,32.09083222093027],[130.7418184748427,32.09351939520384],[130.71236290882112,32.0909097361954],[130.67448408387324,32.112226264130825],[130.61087039595205,32.15702973123702],[130.5897864120134,32.16346344698057],[130.57438683498438,32.160672919019945],[130.5635347842028,32.15400665928],[130.55268273342145,32.14997589786931],[130.5387300972162,32.146151842033944],[130.52550092962431,32.139847317499786],[130.47186079334082,32.12723826843127],[130.44979495657194,32.11884084702753],[130.42437015196097,32.11341482253603],[130.40788537021368,32.11372487999928],[130.39331261638407,32.118375759034066],[130.3826155952336,32.12646312117609],[130.35589887942976,32.15302480734904],[130.3453568870108,32.161215522278454],[130.3448401230731,32.161706447794344],[130.34465862896903,32.161778425075354],[130.34498131600017,32.16274648600002],[130.34848066500015,32.166571356000034],[130.3569442070001,32.16937897300009],[130.358653191,32.17267487200003],[130.35775800900004,32.18724192900005],[130.358653191,32.19065989800005],[130.43100019600016,32.257147528000175],[130.441172722,32.28261953300007],[130.44402103000007,32.28782786700016],[130.45704186300023,32.29486725500014],[130.46168053500017,32.299953518000066],[130.46371504000004,32.30939362200017],[130.46045983200017,32.318182684000064],[130.46168053500017,32.32721588700015],[130.46957441500015,32.34711334800015],[130.47706139400012,32.349025783000016],[130.50318444100017,32.32721588700015],[130.51246178500006,32.33820221600011],[130.51392662900017,32.350327867000104],[130.51002037900017,32.378485419000086],[130.51490319100006,32.385891018000066],[130.54053795700023,32.416001695000105],[130.56202233200023,32.42706940300015],[130.57129967500012,32.451890367000104],[130.56763756600006,32.47768789300012],[130.55046634200002,32.49168528900019],[130.55884850400017,32.50177643400015],[130.57007897200018,32.50560130400008],[130.59880618600002,32.50535716400013],[130.59058678500006,32.5184593770001],[130.56771894600004,32.53416575700005],[130.56470787900005,32.54633209800015],[130.57007897200018,32.55459219000012],[130.6412866550002,32.60748932500009],[130.6564233730002,32.62372467700014],[130.66830488400015,32.64874909100014],[130.64144941500015,32.64834219000012],[130.4780379570001,32.62201569200012],[130.46168053500017,32.615220445000105],[130.44800866000006,32.62140534100017],[130.4572046230002,32.63519928600009],[130.47527103000002,32.647040106000034],[130.54420006600017,32.67670319200009],[130.56544030000023,32.69342682500012],[130.57650800900004,32.69839101800015],[130.59197024800014,32.69721100500011],[130.60816491000017,32.70221588700015],[130.61646569100006,32.70376211100002],[130.62598717500023,32.704006252000156],[130.62598717500023,32.71141185100005],[130.61231530000012,32.71625397300012],[130.60141035200004,32.72614166900003],[130.59449303500006,32.737982489],[130.59197024800014,32.74872467700011],[130.59376061300011,32.75560130400011],[130.59815514400012,32.76308828300007],[130.60938561300011,32.77570221600017],[130.61304772200006,32.78123607],[130.61133873800023,32.78546784100011],[130.60767662900017,32.78986237200009],[130.60564212300008,32.79645416900014],[130.59302819100017,32.815863348000065],[130.51612389400006,32.86847565300009],[130.4702254570001,32.90973541900014],[130.441254102,32.923651434000035],[130.4331160820001,32.94171784100014],[130.4291583888049,32.980522543166174],[130.4293827662017,32.98064870907065],[130.44514407843647,32.989511217568676],[130.48395307757247,32.99467886054096],[130.49821577393882,33.000234076241654],[130.49945600828826,33.00248200094369],[130.5019364769868,33.00984589357323],[130.50048953706246,33.01620209405134],[130.4989909202948,33.033978786991426],[130.50824100242042,33.04945587838604],[130.52178022657628,33.0615998403603],[130.54648156077533,33.07746450538259],[130.56368981293454,33.09167552310696],[130.57986453721858,33.09836762126862],[130.6177950381106,33.10113231080753],[130.635881789413,33.10428457307465],[130.64983442561837,33.11312124315084],[130.67308882079234,33.13531627022975],[130.68518110592336,33.14004466452958],[130.70089074131468,33.140587266888886],[130.71592858313764,33.13914032606512],[130.72864098499346,33.13446360950799],[130.78682864842344,33.10051219318315],[130.83473270095342,33.0809268251128],[130.8708028498717,33.07082408316499],[130.95121137880213,33.03227346374943],[130.9769462417756,33.028862819963095],[130.99089887888024,33.03310028694868],[130.99523969865314,33.044985867403895],[131.0085722190327,33.07121165589321],[131.009657423751,33.0795315620319],[131.00361128073595,33.08911754004238],[130.9859379423822,33.10955556883452],[130.9797367697361,33.119942532521904],[130.97301883405206,33.14461802829932],[130.97291548126438,33.1542040063098],[130.97756636029916,33.1607152373184],[131.00795210230777,33.16668386506838],[131.02893273255958,33.177019151013056],[131.0449007512686,33.18115326611034],[131.05942182825473,33.18061066285175],[131.0906343925631,33.1650043811472],[131.12494754409389,33.14244761796324],[131.14076053317214,33.12596283621595],[131.17228315584296,33.07413137506292],[131.1812748564495,33.06289175155315],[131.20142866440145,33.04201447229009],[131.20907677607224,33.030206407099925]]]]}},{"type":"Feature","properties":{"iso_3166_2":"JP-45","name":"Miyazaki","name_alt":null,"name_local":"宮崎県","type":"Ken","type_en":"Prefecture","region":"Kyushu","postal":"MZ","region_code":"JPN-KYS"},"geometry":{"type":"MultiPolygon","coordinates":[[[[131.41496829500008,31.527858791000043],[131.417735222,31.511053778000033],[131.4053654310001,31.523504950000145],[131.40984134200008,31.542588609000134],[131.413828972,31.539862372000172],[131.41496829500008,31.527858791000043]]],[[[131.82471764400023,32.669541734000134],[131.82886803500017,32.668402411],[131.83757571700008,32.66868724200013],[131.8296818370001,32.66046784100003],[131.8245548840001,32.65159739799999],[131.82268313900008,32.65184153900013],[131.82292728000007,32.65525950700014],[131.82642662900005,32.65660228100005],[131.820078972,32.65525950700014],[131.8130802740002,32.65558502800015],[131.81421959700018,32.65802643400009],[131.8101505870002,32.66205475500006],[131.812266472,32.66583893400009],[131.81137129000004,32.66766998900006],[131.8091740240002,32.669175523000106],[131.81421959700018,32.67133209800012],[131.81820722700004,32.67422109600015],[131.82471764400023,32.669541734000134]]],[[[131.83022749210502,32.75239390745283],[131.83456831277752,32.740017402381184],[131.8392191918123,32.73410045057541],[131.87233051605838,32.731657540330914],[131.872325066,32.73163483300006],[131.87110436300011,32.72679271],[131.86687259200008,32.72272370000003],[131.86215254000015,32.72036367400007],[131.85938561300011,32.7176781270001],[131.85699406300003,32.70086428700016],[131.85592484900022,32.686084221],[131.84791100400017,32.68183014500009],[131.83395173900024,32.69866452900014],[131.82193770100017,32.70268559100013],[131.8165644120002,32.689146346000044],[131.80063958399998,32.68083304800011],[131.78842207100004,32.662990627000156],[131.7756453790001,32.6537132830001],[131.770762566,32.64874909100014],[131.767832879,32.64411041900003],[131.7682397800002,32.64240143400012],[131.76978600400005,32.63955312700007],[131.770762566,32.63174062700007],[131.76685631600006,32.62079498900012],[131.74903405000023,32.59406159100011],[131.74333743600008,32.58795807500012],[131.72950280000018,32.58405182500012],[131.70879259100016,32.585903477000116],[131.7047128720001,32.58157515700019],[131.69906660200004,32.56452057500003],[131.68213951900023,32.53506094000015],[131.68506920700023,32.52244700700008],[131.69564863400004,32.51146067900011],[131.71265709700018,32.51162344000009],[131.7189233730002,32.50873444200015],[131.73650149800008,32.49168528900019],[131.71729576900012,32.47296784100003],[131.69548587300002,32.4682477890001],[131.6789456940002,32.473907004000026],[131.65979027600022,32.476819574000146],[131.65662940000018,32.45735773000003],[131.67388918300006,32.44180489400016],[131.68913158600017,32.42173733500012],[131.66358483200023,32.40643952000012],[131.65308678500006,32.40127187700001],[131.64136803500017,32.39923737200009],[131.6334741550002,32.39549388200005],[131.62940514400023,32.386786200000174],[131.62183678500017,32.360296942],[131.61947675900004,32.33710358300006],[131.61646569100006,32.33234284100017],[131.6110132170002,32.32998281500004],[131.60279381600017,32.32355377800009],[131.59253991000017,32.303656317],[131.5804142590001,32.25397370000012],[131.5624169000001,32.2179163710001],[131.55032724200024,32.169466089000096],[131.53052845600016,32.10739128200008],[131.49648639400007,32.012744267000116],[131.4585703370001,31.90545186200002],[131.44727623800006,31.876898505000085],[131.44996178500017,31.858710028000175],[131.44762186299997,31.847434831000115],[131.45590347800018,31.82197397700004],[131.46804227599998,31.804899433000045],[131.49634850400005,31.795965887000094],[131.49301191499998,31.786932684000092],[131.47852623800023,31.77033112200003],[131.4752710300002,31.762152411000116],[131.45053144600004,31.651109117000132],[131.45533287900005,31.62091705900012],[131.42335045700023,31.59833405200014],[131.41146894600016,31.586127020000063],[131.40691165500002,31.569728908000158],[131.40406334700018,31.568060614000146],[131.39079837300008,31.54881419500002],[131.38648522200006,31.539007880000057],[131.38526451900023,31.526922919000143],[131.387950066,31.520493882000054],[131.39144941500004,31.516750393000038],[131.39332116000017,31.512274481000148],[131.39372806100008,31.491034247000172],[131.38892662900017,31.485581773000135],[131.37623131600006,31.47443268400012],[131.37354576900023,31.467352606000148],[131.36378014400012,31.419663804],[131.35865319100017,31.410467841000113],[131.34546959700006,31.394964911],[131.34180748800011,31.386053778000147],[131.34058678500017,31.37872955900015],[131.33822675900004,31.37262604400017],[131.331309441,31.367661851000108],[131.32764733200005,31.371323960000083],[131.32496178500017,31.37287018400012],[131.31820722700016,31.3751488300001],[131.32260175900015,31.38129303600006],[131.32374108200005,31.38393789300015],[131.32504316500015,31.388128973000093],[131.28484134200008,31.381984768],[131.26587975400017,31.381170966000084],[131.24984785200016,31.388128973000093],[131.24512780000018,31.39557526200015],[131.2457788420002,31.412176825000117],[131.24301191500015,31.422267971000096],[131.2386173840001,31.428412177000055],[131.21924889400023,31.446478583000086],[131.21265709700018,31.45473867400007],[131.20780235400005,31.456049140000133],[131.20034249199998,31.457373282],[131.1786330130001,31.452428893],[131.16155688500012,31.463997931000122],[131.15064537914046,31.471340236031565],[131.152904494247,31.47389313436075],[131.1553849629456,31.478414822186252],[131.181378209237,31.51177195930852],[131.18664920499694,31.5250011260011],[131.18732099766592,31.540943305389263],[131.19150678870736,31.564120185298307],[131.19181684796925,31.57466217681805],[131.18623579294749,31.586831977214004],[131.1747636254411,31.60026784948174],[131.1560050796708,31.61274770824015],[131.12634280807416,31.616959336804015],[131.11580081565515,31.616726792807313],[131.10696414557893,31.617889512790825],[131.10076297383213,31.619413967081],[131.0711007022355,31.633624985704458],[131.04722619033632,31.637268175286025],[131.03585737471818,31.645355536528868],[131.01663374185378,31.675922145690507],[131.01260298134255,31.686309109377888],[131.0108976581004,31.69605011612002],[131.0102258654314,31.705946153392304],[131.00764204304588,31.71364594190665],[131.002371047286,31.723516139858063],[130.97601606668812,31.747209783704605],[130.9654740742691,31.76067149529335],[130.89700280173795,31.78426178635233],[130.88909630674928,31.790230414102425],[130.8810347839282,31.801340847302285],[130.8763839048934,31.82444021284546],[130.8811898126597,31.870225531882895],[130.8734383491005,31.88756297525113],[130.84703169165928,31.909525458333277],[130.8237772973844,31.91960236275891],[130.8027966662331,31.935053615731746],[130.783883090832,31.954845689377166],[130.7211995788974,32.04106781732584],[130.71096764484096,32.04964610408446],[130.70011559495865,32.06703522429622],[130.71236290882112,32.0909097361954],[130.7418184748427,32.09351939520384],[130.81075483626674,32.09083222093027],[130.82346723812245,32.09214997054467],[130.83741987522708,32.0956639671184],[130.85183760032496,32.10163259486838],[130.88367028225778,32.11915090628925],[130.89684777210707,32.122432358866305],[130.90925011560049,32.121915594928694],[130.93689700739108,32.11496511524793],[130.9522449075764,32.12013275822032],[130.96743777903018,32.13188914656688],[130.98645470631973,32.15447174727326],[130.99725508025764,32.16268829972522],[131.0056266623407,32.165788886048276],[131.05296227408965,32.153231512923995],[131.06505455922044,32.15206879294051],[131.07590661000202,32.155634467256945],[131.08164269375536,32.16369599097716],[131.07843875464468,32.18364309335412],[131.0717208189607,32.19782827445523],[131.0549776547949,32.222581285497895],[131.05032677576006,32.233769233063626],[131.05032677576006,32.24619741497868],[131.06179894416587,32.264335842225265],[131.08091922424288,32.28740936934692],[131.08712039598956,32.299630845686934],[131.0878438664013,32.31366099715733],[131.08350304572886,32.325184841507294],[131.06893029189953,32.34815501584127],[131.0631425313027,32.36370962250113],[131.05420250933847,32.38078868345109],[131.04366051602008,32.39210582132661],[131.0215946801504,32.410580146256834],[131.01306806933601,32.42228485776006],[131.00578169197152,32.439079697869786],[131.00206098802417,32.4509136014815],[131.0000456082183,32.4601120058643],[130.99989057768798,32.47055064549592],[131.00412804557274,32.48742300087072],[131.0225248561371,32.53408681905144],[131.03513390520553,32.55287120234409],[131.04660607271208,32.564498399481565],[131.05921512267977,32.56873586736633],[131.07327111167243,32.569226792882105],[131.0856734560651,32.57134552727432],[131.09502689007903,32.57578969983474],[131.09998782837565,32.586383368197815],[131.10458702966778,32.61408193593256],[131.11285525896315,32.631109320938336],[131.12541263208735,32.64604380997393],[131.14654829286943,32.66296784129277],[131.15957075398703,32.67565440472704],[131.17517703659084,32.70144094544328],[131.181378209237,32.70864980754264],[131.21042036320912,32.73469472887861],[131.22519982261386,32.757070624010126],[131.23605187429453,32.78365814950406],[131.24225304604138,32.793269965036885],[131.25806603422004,32.80381195745592],[131.27052005365746,32.81050405471838],[131.32390180932114,32.822286282386116],[131.34281538292353,32.81073659871505],[131.35661299039717,32.80463877975596],[131.3823995302142,32.80192576795976],[131.4016231630786,32.802158311057255],[131.42146691266797,32.80479381028614],[131.45004398044537,32.81649852088999],[131.46415164628152,32.817893784870265],[131.47831098806174,32.81499990502154],[131.4900932148299,32.80848867401305],[131.49768965055696,32.800401312770376],[131.50311567594773,32.7927532010993],[131.50342573520945,32.783218899032974],[131.5012553239741,32.77515737621202],[131.4998600608932,32.767018338125766],[131.5018754415983,32.75916351998053],[131.50776655498262,32.75164459951863],[131.51562137312786,32.74593435328775],[131.5268868350595,32.74298879749496],[131.5397025897029,32.743040473439024],[131.55897789941062,32.747562161264696],[131.57076012617884,32.75409922889635],[131.5903454942492,32.75978363670551],[131.68325971856123,32.76332347349951],[131.69566206295397,32.76582977972056],[131.7002095892012,32.770971585170614],[131.70651411283595,32.779808255246806],[131.72082848514648,32.805749823795296],[131.7268746281616,32.81368215630651],[131.73493615098252,32.8204259304123],[131.7468734073818,32.823035590320316],[131.76118777879296,32.82218292869926],[131.7802047060823,32.816421007423614],[131.7952942238493,32.81432811145321],[131.80924686095395,32.80897960132749],[131.8191687357485,32.79836009454279],[131.82785037709326,32.76833608684099],[131.83022749210502,32.75239390745283]]]]}},{"type":"Feature","properties":{"iso_3166_2":"JP-38","name":"Ehime","name_alt":null,"name_local":"愛媛県","type":"Ken","type_en":"Prefecture","region":"Shikoku","postal":"EH","region_code":"JPN-SHK"},"geometry":{"type":"MultiPolygon","coordinates":[[[[132.45980879000015,32.94464752800015],[132.44621829500002,32.93996816600004],[132.43702233200023,32.94090403900013],[132.4385685560001,32.94293854400014],[132.45590254000015,32.95022207200016],[132.45980879000015,32.94464752800015]]],[[[132.3326929050002,33.1100121110001],[132.32032311300023,33.10130442900011],[132.31723066500015,33.10814036700013],[132.3326929050002,33.1100121110001]]],[[[132.41618899800008,33.11033763200011],[132.41179446700008,33.10130442900011],[132.40902754000004,33.10460032800013],[132.41537519600016,33.11334870000003],[132.42139733200023,33.11155833500014],[132.41618899800008,33.11033763200011]]],[[[132.27051842500018,33.17633698100015],[132.27800540500002,33.17536041900017],[132.28134199300004,33.17666250200007],[132.28744550900015,33.17588939000014],[132.29053795700023,33.17808665600013],[132.29395592500023,33.175441799000154],[132.29509524800008,33.17080312700013],[132.29363040500013,33.17080312700013],[132.292816602,33.170721747000144],[132.28956139400023,33.16502513200008],[132.29395592500023,33.16075267100014],[132.30111738399998,33.16030508000016],[132.30713951900012,33.163600979000094],[132.30648847700004,33.157985744000186],[132.30746504000004,33.15249258000007],[132.31332441500015,33.14948151200015],[132.31161543100004,33.148016669000114],[132.296722852,33.15330638200008],[132.28874759200008,33.15566640800013],[132.28663170700023,33.15802643400018],[132.28459720100003,33.16498444200009],[132.28060957100004,33.16889069200006],[132.26490319100017,33.16856517100014],[132.26189212300008,33.17597077000012],[132.26596113400004,33.18073151200004],[132.27051842500018,33.17633698100015]]],[[[132.37240644599999,33.20563385600015],[132.3667098320001,33.202785549000126],[132.36133873800023,33.200954494000044],[132.3615828790001,33.19843170800014],[132.36052493600002,33.19513580900009],[132.36361738400004,33.189683335000055],[132.35954837300008,33.18724192900011],[132.35515384200008,33.190130927000055],[132.35474694100017,33.19460683800013],[132.353363477,33.19932689000002],[132.35246829500002,33.20123932500009],[132.34782962300008,33.204657294000086],[132.34172610800007,33.2045759140001],[132.34758548300013,33.2076683610001],[132.3536076180002,33.20563385600015],[132.36353600400005,33.20966217700014],[132.36963951900023,33.21470774900017],[132.37151126400008,33.215643622000144],[132.37435957100004,33.218247789000046],[132.37566165500002,33.22138092700011],[132.37859134200008,33.219183661000116],[132.38086998800023,33.2081159530001],[132.37240644599999,33.20563385600015]]],[[[132.47453860800024,33.26268138200008],[132.4703882170002,33.255764065000065],[132.4629826180002,33.257595119000044],[132.4649357430001,33.2612165390001],[132.46916751400008,33.26589590100012],[132.46973717500023,33.26854075700011],[132.46794681100008,33.275091864],[132.47307376400008,33.27265045800006],[132.47754967500023,33.26788971600014],[132.47453860800024,33.26268138200008]]],[[[132.3619897800002,33.37120189000014],[132.3577580090001,33.367254950000145],[132.3546655610002,33.371486721000096],[132.34392337300008,33.37653229400003],[132.35108483200023,33.37848541900017],[132.3575138680002,33.37771230700004],[132.3619897800002,33.37120189000014]]],[[[132.34424889400012,33.39590078300013],[132.341644727,33.38035716400013],[132.33822675899998,33.38800690300015],[132.34424889400012,33.39590078300013]]],[[[132.48194420700023,33.73346588700012],[132.47543379000015,33.73232656500009],[132.4791772800002,33.738511460000055],[132.48226972700016,33.739691473000065],[132.48918704500008,33.739691473000065],[132.4933374360002,33.738511460000055],[132.49236087300014,33.736517645],[132.48861738399998,33.73541901200015],[132.48194420700023,33.73346588700012]]],[[[132.53459720100014,33.84849681200011],[132.53207441500004,33.84190501500002],[132.5267033210001,33.85016510600012],[132.52116946700008,33.85154857],[132.5240991550002,33.85476308800004],[132.53459720100014,33.84849681200011]]],[[[132.69336998800011,33.91559479400017],[132.69320722700016,33.90330638200011],[132.6813257170002,33.90167877800009],[132.6761987640002,33.88886139500015],[132.68156985800013,33.88308340100009],[132.68311608200005,33.879787502000156],[132.68921959700018,33.877468166000185],[132.6882430350001,33.874009507],[132.68368574300004,33.87274811400009],[132.67701256600017,33.87453847900015],[132.6709904310001,33.86989980700004],[132.66732832100004,33.869370835000055],[132.66260826900023,33.87433502800012],[132.6635848320001,33.87933991100006],[132.66456139400006,33.8878034530001],[132.665293816,33.89964427300005],[132.66049238400004,33.902370510000125],[132.65300540500007,33.89679596600003],[132.65862063900025,33.9067650410001],[132.6641544930001,33.911118882000025],[132.66684004000015,33.91063060100011],[132.67286217500023,33.910549221000124],[132.6769311860002,33.91046784100014],[132.67969811300006,33.916367906000076],[132.68238366000006,33.922267971000124],[132.6885685560002,33.922267971000124],[132.68978925900015,33.926011460000055],[132.69288170700023,33.926011460000055],[132.69882246200004,33.92690664300015],[132.69662519600016,33.920762437000164],[132.69336998800011,33.91559479400017]]],[[[132.55526777400004,33.935695705000015],[132.54704837300008,33.93162669500005],[132.5327254570001,33.9271507830001],[132.52898196700008,33.926011460000055],[132.5231225920002,33.92727285400015],[132.5162052740002,33.930365302000055],[132.5171004570001,33.93349844000012],[132.52173912900005,33.93581777600018],[132.52588951900017,33.9353294940001],[132.53174889400012,33.93492259300008],[132.53956139400012,33.934393622000115],[132.54346764400012,33.936346747000144],[132.55144290500007,33.938299872000115],[132.55526777400004,33.935695705000015]]],[[[132.67359459700018,33.95701732],[132.66993248800023,33.9555931660001],[132.66537519599999,33.955918687000135],[132.65739993600002,33.95034414300012],[132.65170332100016,33.95530833500008],[132.6563419930001,33.96898021000011],[132.66195722700016,33.974595445000105],[132.66740970100003,33.9720726580001],[132.67253665500002,33.96657949400016],[132.67221113400004,33.96043528900019],[132.67359459700018,33.95701732]]],[[[132.54420006600006,33.96698639500006],[132.53956139400012,33.96088288],[132.5347599620002,33.96670156500012],[132.53549238400015,33.97085195500007],[132.53956139400012,33.976426499000084],[132.53581790500007,33.98021067900011],[132.53459720100014,33.98826732000005],[132.5396427740001,33.99079010600015],[132.5542098320001,33.993353583000086],[132.56495201900023,33.9897321640001],[132.55656985800024,33.98375071800008],[132.55404707100016,33.978338934000064],[132.55103600400005,33.975124416000185],[132.54420006600006,33.96698639500006]]],[[[133.367035352,33.993923244000044],[133.36369876400025,33.99079010600015],[133.35995527400016,33.99095286700013],[133.35181725400005,33.99522532800013],[133.34945722700016,34.00010814000011],[133.35743248800023,34.005764065],[133.36304772200006,34.007310289000046],[133.36760501400025,34.00763580900015],[133.36784915500013,34.00250885600015],[133.3702091810001,33.995306708000115],[133.367035352,33.993923244000044]]],[[[132.62029056100013,33.95380280200011],[132.60043379000004,33.94989655200011],[132.58912194100006,33.956447658000016],[132.58692467500023,33.96967194200015],[132.59636478000007,33.98094310100005],[132.60645592500012,33.98920319200012],[132.61378014400023,33.994045315],[132.61793053500017,33.99567291900003],[132.62452233200023,33.99909088700004],[132.6364038420002,34.00828685100011],[132.64136803500006,34.01406484600007],[132.64389082100016,34.011419989],[132.64429772200018,34.00088125200013],[132.64275149800014,33.98993561400006],[132.64096113400015,33.98395416900014],[132.63697350400017,33.97923411700005],[132.635020379,33.974839585000055],[132.63445071700002,33.96482982000008],[132.62029056100013,33.95380280200011]]],[[[132.9613228950001,34.12113403200006],[132.96631920700023,34.11432526200018],[132.97657311300006,34.108587958],[133.03184883800012,34.05273441000004],[133.06031334700018,33.99135976800012],[133.06919679500007,33.97422315400003],[133.07729439200003,33.95973272000005],[133.0866003050002,33.949313315],[133.1077633450001,33.94117284200014],[133.12701088800023,33.93329063900016],[133.14670395600004,33.931541102],[133.17329223100003,33.94058406500001],[133.20886842399997,33.947403314000056],[133.2436802240001,33.95625729500007],[133.24887447000006,33.97410853100014],[133.27904556000013,33.98327675900005],[133.2998234300002,33.98102486000006],[133.32260754300003,33.99055281000015],[133.34096681500014,33.98993913600019],[133.35994768400022,33.98270960000009],[133.41480553500006,33.98574453300013],[133.43824303500006,33.98187897300012],[133.48633873800011,33.96674225500011],[133.51099694100017,33.96523672100007],[133.53207441500004,33.970933335000055],[133.54859459700018,33.98094310100005],[133.56169681100008,33.99339427300008],[133.57252037900005,34.00617096600011],[133.58725019600016,34.02033112200003],[133.59188392169082,34.02380922087188],[133.59213545138996,34.0237633328115],[133.62510501488455,34.0179238962708],[133.64665408681665,34.01213613477485],[133.66060672392106,33.99787344020707],[133.66887495321643,33.92780019812069],[133.66680789566786,33.90129018789183],[133.65673099214158,33.873462428947974],[133.6478943220653,33.85565989848557],[133.5602510926137,33.85312775294342],[133.51539594866418,33.83700470640211],[133.49410525915036,33.82457652448694],[133.4685254249085,33.81927969030555],[133.42708092744286,33.81837535274026],[133.38393110583596,33.81323354729041],[133.33504520137492,33.81302684171534],[133.30228234255608,33.8051720244694],[133.28574588396546,33.80610220045621],[133.26838260307468,33.804810289263415],[133.2568587587248,33.79819570636671],[133.2363948906117,33.77943716149586],[133.22290734329934,33.77364939999974],[133.20905805898238,33.77282257680052],[133.1895243668561,33.775819811235365],[133.17882734570546,33.77155650492871],[133.1712309099785,33.763443305264374],[133.16533979659428,33.753288886472845],[133.14792483886018,33.729724432936294],[133.11676395139526,33.67228607833981],[133.10756554611308,33.659186102856395],[133.09692020090657,33.64709381772549],[133.07531945213114,33.63071238876576],[133.0661727236923,33.61797414848816],[133.0595064639521,33.602419541828496],[133.05578576090412,33.588802802407415],[133.0450370629102,33.56474742335497],[133.043693474874,33.55371450542016],[133.04524376758573,33.534594225343156],[133.0425565942114,33.5246723505485],[133.03542524557864,33.51167572695333],[133.00255903487155,33.475295518773194],[132.98581587070586,33.46131704414633],[132.97026126494555,33.45441824040951],[132.95026248572506,33.44968984610951],[132.82024458192197,33.45015493410288],[132.80903079593443,33.444005439199614],[132.80391482980556,33.435427151541816],[132.8104260599147,33.412792873991904],[132.81228641188832,33.400442206442776],[132.81585208620484,33.38904755330201],[132.8243786970194,33.37940989844809],[132.83388715976454,33.37077993394685],[132.84132856675987,33.362640895860594],[132.84799482560075,33.35284821227522],[132.85714155493886,33.3443732774049],[132.8692338400696,33.33540741611942],[132.8781221860901,33.32636404136743],[132.88225630118748,33.31631297536349],[132.87667524616577,33.30272207346492],[132.85962202363757,33.290423081859686],[132.8018994491002,33.261380926988224],[132.78438113767933,33.24970205300734],[132.77363243968537,33.239005031856706],[132.76825809113794,33.22758454029439],[132.76464074087747,33.21523387274509],[132.76340050742735,33.20420095481019],[132.76123009709139,33.195441799099754],[132.75859459876168,33.18823293700051],[132.75037804630975,33.18229014677293],[132.72433312407438,33.16766571699925],[132.71296430935544,33.156710313430224],[132.6957560571963,33.13069123051595],[132.6855241231399,33.12363739714816],[132.67327680927738,33.12288808921387],[132.66097781767215,33.129373480901464],[132.63260745726828,33.151981920029684],[132.61865482016393,33.153377184009756],[132.61384891239734,33.145005601927],[132.6141589698606,33.13585887348826],[132.61772464417712,33.125291043546824],[132.63565636584863,33.090822862385195],[132.6434078312066,33.08022919402204],[132.6482654158162,33.06904124645642],[132.64749026856114,33.05702647569127],[132.6484721213914,33.045812689703936],[132.65312300042618,33.03395294946908],[132.67172651566628,33.001112576284314],[132.67157148693454,32.98064870907065],[132.67534386592658,32.96279450086563],[132.67327680927738,32.95227834686814],[132.6694010756992,32.94233063455114],[132.64314944878802,32.909076850216465],[132.6430443746983,32.908943764019185],[132.63990319100017,32.90892161700013],[132.62720787900005,32.90631745000003],[132.61841881600006,32.90688711100002],[132.57545006600012,32.93183014500012],[132.55892988400004,32.93675364799999],[132.57203209700018,32.92308177300005],[132.5529077480002,32.92487213700004],[132.53638756600006,32.93121979400017],[132.52418053500017,32.93024323100009],[132.51734459700006,32.909409898000106],[132.52344811300023,32.90688711100002],[132.53223717500012,32.89940013200014],[132.5378524100001,32.89581940300015],[132.52076256600006,32.889308986000074],[132.5041610040001,32.89166901200004],[132.49048912900017,32.90119049700003],[132.47227232600002,32.93367231200013],[132.49403946600003,32.94893138500014],[132.4829185580002,32.97050124400012],[132.49612784400003,32.98533214000004],[132.5014754570001,32.99323151200012],[132.481408436,33.023527538000124],[132.47149541200017,33.04068590400006],[132.4411372870001,33.04365934800013],[132.41970413100003,33.05192155800013],[132.39670036500016,33.016593804000095],[132.38240215600015,33.019779079000116],[132.4004464870002,33.04391394800017],[132.39688478500014,33.05800530900008],[132.40792239700025,33.0693293260001],[132.4518335300002,33.052883205000015],[132.47152754000015,33.05560944200009],[132.48316491000006,33.06769440300009],[132.4627384770001,33.06769440300009],[132.46876061300011,33.08234284100011],[132.46900475400005,33.09577057500009],[132.4627384770001,33.10545482000005],[132.44906660200016,33.10871002800009],[132.44906660200016,33.11489492400007],[132.47144616000017,33.113959052],[132.47584069100006,33.11489492400007],[132.48015384200008,33.118312893000066],[132.48755944100006,33.12547435100011],[132.49008222700016,33.13275788000014],[132.47950280000012,33.13597239799999],[132.45020592500006,33.13666413000011],[132.44068444100017,33.14227936400012],[132.43539472700004,33.155829169000086],[132.43804361300025,33.16821834500006],[132.45860651700016,33.173705878000035],[132.4492466170001,33.18507532299999],[132.4381082460001,33.191397889000186],[132.42366068900012,33.199176094000094],[132.41538655700012,33.18927756600006],[132.39864748200014,33.187183802],[132.39467584800005,33.20389482100016],[132.420123834,33.20982423900013],[132.445493724,33.204965422],[132.4596588650002,33.204012318000096],[132.46120103900014,33.19140330900008],[132.47782146500018,33.181408297000175],[132.48570176400008,33.169153220000126],[132.50507728100015,33.18123508500004],[132.5026698830001,33.19873474700016],[132.51376684500016,33.21334291800012],[132.5361722930002,33.21756625000016],[132.54836358700018,33.22690294400006],[132.53682887000005,33.24258428900008],[132.5244922420002,33.24998236300014],[132.54139370700003,33.26255771700015],[132.52421284500005,33.263023330000024],[132.50770168700015,33.25790311900012],[132.502579812,33.26660913300016],[132.49182335100014,33.2707164940001],[132.4845705700001,33.276525918000075],[132.48473546100016,33.29084085900003],[132.50478834200024,33.30381085099999],[132.52228044300014,33.30762090800012],[132.52560976800012,33.31466423100015],[132.486803525,33.316068149000145],[132.42012139200008,33.30435563900012],[132.40122137500012,33.30938686700013],[132.3902743800002,33.31618808100002],[132.37867272200006,33.31948476800012],[132.38412519600016,33.33087799700009],[132.3913680350001,33.334865627000156],[132.40788821700008,33.33624909100014],[132.4155379570001,33.341457424000126],[132.41732832099999,33.34739817900005],[132.421153191,33.37555573100006],[132.40235436300023,33.36261627800003],[132.39063561300006,33.37498607],[132.39112389400023,33.397894598000065],[132.40805097700004,33.41657135600015],[132.40805097700004,33.42340729400017],[132.394379102,33.42340729400017],[132.398203972,33.43134186400012],[132.40414472700004,33.43764883000007],[132.41187584700006,33.441961981000176],[132.421153191,33.444484768000095],[132.38111412900017,33.466050523000106],[132.36296634200008,33.46808502800003],[132.34459623000023,33.46715465400014],[132.3337515950001,33.46244430800006],[132.32223273500003,33.45755532700012],[132.3078038900001,33.46428988300009],[132.27858602400013,33.44730071900004],[132.25360695600014,33.44070882600012],[132.2144021830002,33.42294673200017],[132.17973878400008,33.40698609900004],[132.14998490600018,33.389167102000144],[132.13943055100017,33.37397803600008],[132.13066048300007,33.36356636600014],[132.11413651800015,33.36415118300012],[132.10156774800024,33.37013383500006],[132.11029556700012,33.386727643000185],[132.07350789600017,33.36763167000005],[132.0254873910002,33.34490369600017],[132.01053892000007,33.348988639000126],[132.02963653000003,33.36524659100017],[132.05155469999997,33.37604022700016],[132.09431999299997,33.40848712800015],[132.13548759700004,33.42002259800016],[132.15324827599997,33.41542941400017],[132.16657605400005,33.42020372400013],[132.15708555000006,33.42884152800012],[132.15528002600016,33.43704614700012],[132.17133126100023,33.4456344340001],[132.199766627,33.4550101440001],[132.2218807500001,33.4540257770001],[132.24068462600022,33.46457605500014],[132.2646316510001,33.46407350200003],[132.29374587800018,33.48538023100009],[132.41236412900005,33.53497955900015],[132.42847741,33.54759349200013],[132.43539472700004,33.563666083000115],[132.44166100400017,33.572943427000055],[132.47046959700018,33.60211823100012],[132.47950280000012,33.60834381700006],[132.5006123410001,33.62499820900014],[132.6017358730002,33.66038646000011],[132.61848949800006,33.67428922700016],[132.645474593,33.68958766600004],[132.67660566499998,33.71564362200006],[132.69711347700004,33.75674062700013],[132.695567254,33.78644440300015],[132.69008267200016,33.81390538000015],[132.69898165800006,33.850384146000025],[132.70628330500008,33.877051785],[132.71237037200004,33.90454878000004],[132.75493687700012,33.910320249],[132.75748129400003,33.93494834400009],[132.77247155000012,33.955877997000144],[132.76986156700016,33.996270044000156],[132.79873386700004,34.01310423299999],[132.8471860450002,34.03996357900003],[132.86235909600006,34.055893542000135],[132.9191104300002,34.06840607300016],[132.92252062900016,34.08483910800011],[132.93033802800002,34.09437597000006],[132.92615829000025,34.11166809600006],[132.90620625300008,34.11316541800012],[132.8953637230002,34.11321435000018],[132.89749994100012,34.12271401800014],[132.91551131900022,34.120258787000026],[132.928774824,34.119874497000026],[132.94238361200004,34.14126203700012],[132.95403348500022,34.12539330900013],[132.9613228950001,34.12113403200006]]],[[[133.32715905000023,34.17377350500011],[133.31511478000002,34.17141347900015],[133.30640709700006,34.18231842700014],[133.3125919930002,34.183254299000126],[133.32097415500007,34.18138255400005],[133.32715905000023,34.17377350500011]]],[[[133.08301842500023,34.175034898000135],[133.09351647200012,34.17430247599999],[133.0991317070001,34.1751976580001],[133.1017358730002,34.17096588700015],[133.0944116550002,34.16038646000011],[133.0451766290001,34.118394273000135],[133.02784264400012,34.11155833500011],[133.0171004570001,34.11884186400012],[133.01685631600006,34.136297919000086],[133.02003014400012,34.149644273000106],[133.025645379,34.1544457050001],[133.03174889400012,34.15412018400015],[133.03679446700002,34.15326569200006],[133.03394616000017,34.16136302299999],[133.0262150400001,34.17617422100007],[133.033050977,34.189398505],[133.055430535,34.19354889500015],[133.07154381600017,34.18805573100012],[133.07667076900012,34.18065013200011],[133.08301842500023,34.175034898000135]]],[[[133.27385501400025,34.184719143000095],[133.27149498800011,34.183254299000126],[133.26343834700018,34.1920433610001],[133.26343834700018,34.19586823100009],[133.26653079499997,34.19879791900003],[133.26970462300002,34.19981517100008],[133.27263431100008,34.19725169499999],[133.2733667330002,34.19261302300005],[133.2764591810001,34.18870677300008],[133.27385501400025,34.184719143000095]]],[[[133.10767662900005,34.236558335],[133.10930423300024,34.22825755400011],[133.11329186300023,34.22219472900012],[133.1187443370001,34.21954987200003],[133.12338300899998,34.21861399900014],[133.13038170700005,34.218369859000106],[133.13738040500007,34.21950918200004],[133.13428795700005,34.21600983300014],[133.12663821700002,34.2105980490001],[133.1246037120002,34.20917389500012],[133.11532636800004,34.193711656000104],[133.10645592500012,34.19379303600009],[133.10108483200023,34.20209381700006],[133.08082116000006,34.19818756700006],[133.06560306100008,34.208929755000085],[133.05901126400008,34.209011135000154],[133.05884850400005,34.20909251500014],[133.05388431100008,34.211330471000124],[133.06185957100004,34.22097402600009],[133.06096438900013,34.22825755400011],[133.06316165500002,34.234890041000156],[133.06836998800023,34.23570384300008],[133.077972852,34.23371002800015],[133.10238691500015,34.23936595300013],[133.10767662900005,34.236558335]]],[[[133.1674910820001,34.235581773000106],[133.15129642000014,34.23371002800015],[133.1500757170002,34.24367910400004],[133.15202884200008,34.244981187000135],[133.16049238400004,34.24770742400001],[133.16667728000007,34.24664948100015],[133.1674910820001,34.235581773000106]]],[[[133.05176842500018,34.2223167990001],[133.0348413420002,34.20734284100014],[132.99947548700018,34.20837728800002],[132.96387780000012,34.191880601000136],[132.95484459700018,34.19818756700006],[132.96290123800023,34.21845123900009],[132.969493035,34.22304922100001],[132.98585045700023,34.22695547100001],[132.99089603000007,34.23212311400012],[132.99170983200005,34.242254950000174],[132.98731530000006,34.248846747000144],[132.97934004000004,34.25218333500008],[132.96973717500023,34.252630927000084],[132.98878014400023,34.27301666900014],[133.01002037900005,34.29124583500014],[133.0300399100001,34.295314846000096],[133.04493248800023,34.273098049000126],[133.05567467500023,34.24237702000015],[133.05176842500018,34.2223167990001]]]]}},{"type":"Feature","properties":{"iso_3166_2":"JP-37","name":"Kagawa","name_alt":null,"name_local":"香川県","type":"Ken","type_en":"Prefecture","region":"Shikoku","postal":"KG","region_code":"JPN-SHK"},"geometry":{"type":"MultiPolygon","coordinates":[[[[133.63005618600002,34.28571198100012],[133.63575280000012,34.273586330000015],[133.6440535820001,34.27761465100018],[133.65674889400023,34.28107330900018],[133.65674889400023,34.27871328300013],[133.65430748800023,34.2762718770001],[133.65333092500023,34.2754173850001],[133.65471438900013,34.27045319200015],[133.64079837300008,34.271104234000106],[133.63892662900017,34.26862213700015],[133.63005618600002,34.26394277600015],[133.62403405000023,34.25849030200011],[133.62151126400013,34.25551992400001],[133.61963951900023,34.257839260000154],[133.61841881600006,34.265488999000084],[133.62151126400013,34.271104234000106],[133.62614993600002,34.27480703300013],[133.623301629,34.27891673400008],[133.6237085300002,34.28636302300008],[133.63005618600002,34.28571198100012]]],[[[133.68246504000004,34.314764716000084],[133.675629102,34.30414459800015],[133.67147871200004,34.30646393400012],[133.6657007170002,34.31464264500012],[133.66187584700018,34.32530345300013],[133.67009524800008,34.323431708000086],[133.68246504000004,34.314764716000084]]],[[[134.1616317070001,34.36249420800014],[134.1616317070001,34.33490631700012],[134.16627037900005,34.32485586100016],[134.18262780000023,34.32094961100016],[134.19044030000023,34.325384833000115],[134.212168816,34.34723541900017],[134.21680748800023,34.35504791900017],[134.2378035820001,34.34080638200005],[134.26042728000007,34.334418036000145],[134.27125084700006,34.32306549700017],[134.25782311300023,34.29417552300005],[134.29688561300011,34.27529531500012],[134.30958092500006,34.273098049000126],[134.32178795700023,34.2689476580001],[134.343516472,34.25063711100013],[134.35767662900005,34.24640534100011],[134.38412519600004,34.250067450000145],[134.39665774800014,34.249457098],[134.40170332100016,34.24274323100015],[134.4057723320001,34.234442450000174],[134.41570071700014,34.22418854400014],[134.4397670110001,34.20834943300012],[134.4424456734757,34.208266882619554],[134.44205773297804,34.205380153771145],[134.41973351468997,34.16148102512922],[134.4082613471834,34.157036852568766],[134.3958590027908,34.154194647764726],[134.3601505881791,34.16401316977199],[134.21974572158788,34.16261790579172],[134.17210005057692,34.15765696929368],[134.14941409708283,34.15181753185361],[134.13670169522712,34.143704332189245],[134.12336917484768,34.1228270529261],[134.1080212746621,34.1122333854624],[134.09122643365313,34.106445623966366],[134.04776655458286,34.09946930586371],[134.03412397674018,34.095593574084106],[133.99970747332125,34.07905711549357],[133.98399783703067,34.074406236458586],[133.96539432179046,34.071977443704114],[133.95221683194117,34.07368276604684],[133.94131310431632,34.07823029229415],[133.93046105443412,34.08763540315137],[133.91836876840395,34.09536103008752],[133.89992028189542,34.10065786426908],[133.82824507115313,34.09288056138881],[133.81827151861566,34.087221992001346],[133.80369876478605,34.072003282125834],[133.7911413916619,34.06520783117644],[133.75713830029238,34.05885162979884],[133.74514936704978,34.05239207653314],[133.73496910983656,34.04417552318192],[133.71559044824053,34.032031562106866],[133.70391157425982,34.02148956968786],[133.66060672392106,33.99787344020707],[133.64665408681665,34.01213613477485],[133.62510501488455,34.0179238962708],[133.59213545138996,34.0237633328115],[133.59188392169082,34.02380922087188],[133.62086022200018,34.0455589860001],[133.63396243600002,34.06077708500008],[133.64128665500002,34.07916901200012],[133.64812259200008,34.1246605490001],[133.64600670700023,34.1673851580001],[133.64112389400006,34.184637762000094],[133.63298587300008,34.19830963700004],[133.62037194100017,34.21165599200005],[133.60401451900017,34.22337474200005],[133.58765709700006,34.23191966400016],[133.57227623800011,34.24217357],[133.55836022200006,34.25946686400009],[133.57935631600017,34.249416408000016],[133.60922285200016,34.23895905200014],[133.63754316500004,34.233587958000086],[133.6544702480002,34.23895905200014],[133.67261803500017,34.22313060099999],[133.70142662900005,34.231268622000115],[133.73194420700017,34.25096263200005],[133.754649285,34.27000560100005],[133.78199303500017,34.288275458000115],[133.84359785200004,34.31224192900008],[133.87419681100002,34.32831452000015],[133.88282311300023,34.33844635600012],[133.89063561300023,34.352199611000046],[133.89966881600006,34.364162502000156],[133.91211998800017,34.36933014500006],[133.92090905000012,34.37042877800012],[133.9370223320001,34.37506745000003],[133.94654381600017,34.376166083000086],[133.95622806100008,34.37396881700009],[133.97087649800008,34.36465078300013],[133.98902428500017,34.36078522300012],[134.00123131600006,34.35224030200011],[134.01197350400005,34.34882233300003],[134.02125084700012,34.34918854400003],[134.03687584700018,34.35468170800006],[134.04615319100006,34.35504791900017],[134.081309441,34.347723700000145],[134.08838951900017,34.35480377800003],[134.1007593110002,34.376166083000086],[134.11687259200008,34.360500393],[134.12281334700012,34.3666039080001],[134.1245223320001,34.38084544500002],[134.12745201900023,34.38979726800012],[134.14356530000012,34.39179108300006],[134.15300540500013,34.38572825700008],[134.15821373800011,34.37494538000006],[134.1616317070001,34.36249420800014]]],[[[133.70630944100017,34.354641018000066],[133.70313561300023,34.35175202000012],[133.69581139400012,34.35480377800003],[133.68848717500012,34.366156317],[133.69190514400012,34.37840403900016],[133.705332879,34.39179108300006],[133.70826256600006,34.39728424700009],[133.71566816500004,34.396144924000154],[133.724457227,34.38446686400006],[133.72584069100017,34.371405341000084],[133.720469597,34.363836981000034],[133.71290123800017,34.359442450000145],[133.70630944100017,34.354641018000066]]],[[[133.78907311300023,34.395656643000066],[133.79371178500017,34.38947174700009],[133.79281660200016,34.38633860900002],[133.78557376400025,34.383856512000094],[133.78378339900004,34.38149648600013],[133.77784264400023,34.38011302300008],[133.77076256600017,34.37323639500006],[133.76351972700016,34.36827220300002],[133.75847415500013,34.36855703300013],[133.75717207100004,34.37474192900011],[133.75798587300002,34.38011302300008],[133.75530032600014,34.38743724200016],[133.7530216810001,34.398179429],[133.757578972,34.39472077000009],[133.75993899800008,34.39191315300003],[133.76482181100008,34.39191315300003],[133.76693769600016,34.39305247600008],[133.77255293100004,34.39622630400014],[133.77572675900004,34.39972565300003],[133.77654056100002,34.40066152600012],[133.78158613400015,34.39805735900002],[133.784434441,34.39659251500014],[133.78907311300023,34.395656643000066]]],[[[134.0489201180001,34.38947174700009],[134.0394800140002,34.3782005880001],[134.043711785,34.395656643000066],[134.04826907600014,34.40269603100013],[134.05168704500008,34.409084377000156],[134.05705813900013,34.40656159100014],[134.05567467500023,34.39752838700004],[134.05420983200005,34.39069245000012],[134.0489201180001,34.38947174700009]]],[[[133.66887454500014,34.41030508000007],[133.67546634200002,34.407456773000135],[133.67432701900012,34.399766343000024],[133.67790774800008,34.400336005],[133.67839603000007,34.39708079600014],[133.67538496200004,34.39256419499999],[133.67278079500014,34.39004140800007],[133.66700280000006,34.38194407800013],[133.66325931100008,34.38853587400003],[133.6608992850001,34.390366929],[133.65951582100004,34.39826080900015],[133.65324954499997,34.40940989799999],[133.66032962300002,34.40749746300013],[133.66887454500014,34.41030508000007]]],[[[134.066254102,34.4252790390001],[134.05705813900013,34.416205145000035],[134.0554305350001,34.41628652600009],[134.05518639400023,34.42711009300008],[134.06169681100008,34.43414948100015],[134.066254102,34.4252790390001]]],[[[133.96729576900012,34.477728583000086],[133.97592207099999,34.474432684000035],[133.98088626400025,34.47589752800009],[134.00131269600004,34.4555931660001],[134.00733483200023,34.45266347900018],[134.01238040500007,34.451808986000074],[134.0122990240001,34.44977448100006],[134.002207879,34.44318268400015],[133.99838300899998,34.44395579600008],[133.98821048300024,34.44395579600008],[133.97934004000004,34.44717031500015],[133.96566816500015,34.472113348000065],[133.96729576900012,34.477728583000086]]],[[[134.10287519600004,34.480943101000136],[134.08399498800006,34.45982493700002],[134.07618248800011,34.46076080900009],[134.0678817070001,34.46670156500012],[134.0670679050002,34.467027085000055],[134.04900149800008,34.47435130400005],[134.0394800140002,34.478298244000044],[134.03663170700023,34.48078034100017],[134.03834069100006,34.4833031270001],[134.0459904310001,34.48765696800008],[134.05486087300014,34.48883698100009],[134.07203209700006,34.49848053600009],[134.08342532600003,34.50071849200005],[134.0874129570001,34.49782949400013],[134.09538821700008,34.49197011900016],[134.10181725400017,34.491441148000106],[134.10450280000023,34.490261135000154],[134.10287519600004,34.480943101000136]]],[[[134.02149498800023,34.491441148000106],[134.0190535820001,34.47728099200016],[134.01026451900023,34.49237702000009],[134.00871829500002,34.500026760000125],[134.01954186300011,34.507798570000105],[134.0230412120001,34.50185781500009],[134.02149498800023,34.491441148000106]]],[[[134.374278191,34.513332424000126],[134.36890709700006,34.48436107000005],[134.34693444100006,34.43081289300012],[134.34213300900015,34.43968333500008],[134.332774285,34.444769598],[134.32016035200004,34.44647858300003],[134.30591881600006,34.445013739000146],[134.30591881600006,34.45123932500012],[134.324961785,34.453680731000034],[134.32960045700023,34.46238841400013],[134.32064863400004,34.46893952],[134.299082879,34.46491120000006],[134.28492272200018,34.452297268000066],[134.27418053500017,34.435003973000065],[134.2623804050002,34.42088450700014],[134.24439537900017,34.41771067900008],[134.24870853000007,34.453192450000145],[134.24317467500023,34.463853257],[134.22339928500006,34.47235748900012],[134.204844597,34.4715843770001],[134.18588300900004,34.46605052299999],[134.17017662900005,34.46548086100002],[134.16138756600017,34.47919342700014],[134.1717228520001,34.485907294000086],[134.1725366550002,34.49664948100009],[134.17107181100002,34.50893789300015],[134.175059441,34.520086981000176],[134.20378665500007,34.51243724200005],[134.22828209700018,34.51837799700017],[134.27125084700006,34.54067617400001],[134.28321373800006,34.54364655200011],[134.3190210300002,34.54682038],[134.35368899800008,34.55438873900012],[134.3673608730002,34.55426666900014],[134.36329186300023,34.545355536000116],[134.36573326900006,34.53628164300012],[134.37061608200023,34.525864976000136],[134.374278191,34.513332424000126]]]]}},{"type":"Feature","properties":{"iso_3166_2":"JP-39","name":"Kochi","name_alt":"Koti","name_local":"高知県","type":"Ken","type_en":"Prefecture","region":"Shikoku","postal":"KC","region_code":"JPN-SHK"},"geometry":{"type":"MultiPolygon","coordinates":[[[[132.56324303500006,32.709947007],[132.54965254000015,32.704291083],[132.54322350400017,32.70844147300012],[132.54053795700005,32.721502997000115],[132.53988691500004,32.73379140800016],[132.54379316500004,32.74559153900013],[132.548594597,32.75079987200003],[132.55494225400005,32.74750397300009],[132.55795332100016,32.745306708],[132.5620223320001,32.74213288000014],[132.56861412900017,32.73436107000013],[132.57154381600012,32.7254906270001],[132.57081139400006,32.71727122599999],[132.56324303500006,32.709947007]]],[[[133.74334069191949,33.82661774271473],[133.7841650735593,33.823103746141],[133.79501712524004,33.82382721655277],[133.81315555158736,33.823362128559396],[133.83206912698856,33.81651500076664],[133.88498579286014,33.790056668280656],[133.9063798360605,33.78496653877475],[133.92208947235136,33.786361802755025],[133.9335616398579,33.7953276640405],[133.9427600442407,33.805301214779305],[133.95469729974062,33.81240672499045],[133.97345584461166,33.81604991277318],[134.01753584220538,33.81077891701351],[134.02776777626187,33.80325999655152],[134.03691450380134,33.78248607007613],[134.04342573480974,33.77101390256958],[134.04838667220716,33.76018769020966],[134.05231408083026,33.74843130096373],[134.0601688989756,33.679339910808224],[134.06735192265316,33.675309150297],[134.10130333897806,33.67639435501546],[134.1323091977113,33.67220856397411],[134.14863895072713,33.66549062828993],[134.15871585515268,33.65624054616423],[134.16166141184468,33.645026760176805],[134.16310835176895,33.63427806218293],[134.16104129422038,33.62479543695984],[134.15484012337296,33.60921499277772],[134.18031660392822,33.563894761733835],[134.19008344909187,33.551518255762815],[134.21721357604562,33.54327586488917],[134.2350936217732,33.54038198504061],[134.24904625887783,33.54356008572928],[134.29566479708004,33.5303229879283],[134.27320508500011,33.50800352400013],[134.24463360500025,33.46075022600006],[134.21452884200008,33.37661367400001],[134.20777428500006,33.33909739799999],[134.19849694100017,33.31028880400005],[134.19629967500012,33.296779690000065],[134.1911996260001,33.2712576250001],[134.1902551310001,33.24832929400016],[134.17652712200007,33.236127821000096],[134.15796959700018,33.26972077000012],[134.1417641420002,33.29179326500015],[134.12750724600008,33.289525482],[134.10622434500013,33.294332361],[134.10796042300015,33.314923482000026],[134.07997292100018,33.339048073000086],[134.04004967500023,33.38410065300015],[134.02553646100014,33.41540034500015],[133.99662190200004,33.42456538000006],[133.96876061300023,33.43569570500013],[133.94214849600021,33.45887910400013],[133.92520516600015,33.49369326100013],[133.85490166900016,33.50009453000014],[133.7630521980001,33.5197844070001],[133.73939679000003,33.53750687899999],[133.6721478200001,33.528902337000105],[133.60773318400018,33.51582468000014],[133.58930516600017,33.50193355100008],[133.54686167900016,33.48611134800002],[133.46590938600016,33.4543240980001],[133.45036868600013,33.43085358300014],[133.45508873800023,33.414699611000074],[133.43970787900017,33.40167877800009],[133.41480553500006,33.39305247599999],[133.39161217500012,33.38983795800014],[133.37549889400023,33.38939036700005],[133.36500084700018,33.387600002000156],[133.35661868600013,33.38328685100005],[133.34669030000012,33.37555573100006],[133.32813561300011,33.35346100500006],[133.3230900400001,33.35130442900005],[133.326019727,33.36880117400001],[133.3191024100001,33.37152741100009],[133.31234785200016,33.37555573100006],[133.292246941,33.364691473000065],[133.269379102,33.346869208000086],[133.25456790500002,33.326239325000145],[133.25847415500002,33.306708075000174],[133.25196373800023,33.294745184000064],[133.254649285,33.28652578300013],[133.26075280000012,33.27977122600011],[133.26465905000012,33.27252838700018],[133.265879754,33.26764557500012],[133.26970462300002,33.26422760600012],[133.27084394600016,33.259507554000024],[133.269379102,33.25234609600015],[133.2651473320001,33.24843984600007],[133.26050866000017,33.2457542990001],[133.25847415500002,33.24213288000011],[133.25326582100004,33.21906159100014],[133.24097741000017,33.20579661700013],[133.22689863400015,33.19440338700015],[133.2153396250002,33.18750351900009],[133.2179468110002,33.16583893400018],[133.2254337900001,33.15908437700013],[133.20976104100023,33.15104182500012],[133.20383583600008,33.16262210700002],[133.19014923300008,33.163316435000084],[133.16503341100022,33.137199555],[133.13238695400017,33.089029456],[133.10743612900004,33.06106870400005],[133.09711613400023,33.048111006000155],[133.09886699200015,33.032648240000086],[133.0977641770002,33.02346692000016],[133.08985436300023,33.019273179],[133.0746170880001,33.02873789200011],[133.05284768100003,33.03949864300013],[133.01825880900012,33.02402326700009],[133.00170220600003,32.98695675099999],[132.99441272100015,32.94899317700002],[133.0092879570001,32.903469143],[133.00245201900006,32.869330145],[132.9899053080001,32.86257609500011],[132.9610590350002,32.86410052600003],[132.9550992650002,32.85262854200012],[132.95789947100016,32.835425557000136],[132.95547713300002,32.81461873300013],[132.96973717500023,32.807074286],[132.97673587300002,32.795152085000055],[132.98487389400023,32.78709544500013],[133.0040796230002,32.772284247000144],[133.01734459700006,32.75787995000009],[133.02759850400017,32.739650783000016],[133.02800540500007,32.72064850500003],[133.00220787900005,32.71165599200019],[132.98438561300017,32.71963125200013],[132.97657311300006,32.724514065],[132.97136478000007,32.73167552300005],[132.96176191499998,32.75112539300015],[132.95679772200006,32.75861237200003],[132.93913821700002,32.77045319200009],[132.91504967500012,32.77798086100013],[132.89283287900005,32.774237372000115],[132.88111412900017,32.75238678600006],[132.87208092500023,32.768744208000086],[132.85840905000012,32.769598700000174],[132.8432723320001,32.760931708000086],[132.82960045700005,32.74872467700011],[132.8121850920002,32.740301825000145],[132.79151451900012,32.74066803600009],[132.77198326900012,32.746079820000105],[132.75757897200006,32.75238678600006],[132.72934003999998,32.77415599200013],[132.711400796,32.789525389000104],[132.6646431760001,32.77886830400011],[132.6276607680002,32.752093098],[132.61990336400007,32.772990306000125],[132.62337688200014,32.799495693000026],[132.64600159500017,32.825692004000175],[132.66300726000011,32.85680765600013],[132.69278518700006,32.88433009100005],[132.70516686400018,32.89716469000008],[132.70915774800008,32.909409898000106],[132.6430443746983,32.908943764019185],[132.64314944878802,32.909076850216465],[132.6694010756992,32.94233063455114],[132.67327680927738,32.95227834686814],[132.67534386592658,32.96279450086563],[132.67157148693454,32.98064870907065],[132.67172651566628,33.001112576284314],[132.65312300042618,33.03395294946908],[132.6484721213914,33.045812689703936],[132.64749026856114,33.05702647569127],[132.6482654158162,33.06904124645642],[132.6434078312066,33.08022919402204],[132.63565636584863,33.090822862385195],[132.61772464417712,33.125291043546824],[132.6141589698606,33.13585887348826],[132.61384891239734,33.145005601927],[132.61865482016393,33.153377184009756],[132.63260745726828,33.151981920029684],[132.66097781767215,33.129373480901464],[132.67327680927738,33.12288808921387],[132.6855241231399,33.12363739714816],[132.6957560571963,33.13069123051595],[132.71296430935544,33.156710313430224],[132.72433312407438,33.16766571699925],[132.75037804630975,33.18229014677293],[132.75859459876168,33.18823293700051],[132.76123009709139,33.195441799099754],[132.76340050742735,33.20420095481019],[132.76464074087747,33.21523387274509],[132.76825809113794,33.22758454029439],[132.77363243968537,33.239005031856706],[132.78438113767933,33.24970205300734],[132.8018994491002,33.261380926988224],[132.85962202363757,33.290423081859686],[132.87667524616577,33.30272207346492],[132.88225630118748,33.31631297536349],[132.8781221860901,33.32636404136743],[132.8692338400696,33.33540741611942],[132.85714155493886,33.3443732774049],[132.84799482560075,33.35284821227522],[132.84132856675987,33.362640895860594],[132.83388715976454,33.37077993394685],[132.8243786970194,33.37940989844809],[132.81585208620484,33.38904755330201],[132.81228641188832,33.400442206442776],[132.8104260599147,33.412792873991904],[132.80391482980556,33.435427151541816],[132.80903079593443,33.444005439199614],[132.82024458192197,33.45015493410288],[132.95026248572506,33.44968984610951],[132.97026126494555,33.45441824040951],[132.98581587070586,33.46131704414633],[133.00255903487155,33.475295518773194],[133.03542524557864,33.51167572695333],[133.0425565942114,33.5246723505485],[133.04524376758573,33.534594225343156],[133.043693474874,33.55371450542016],[133.0450370629102,33.56474742335497],[133.05578576090412,33.588802802407415],[133.0595064639521,33.602419541828496],[133.0661727236923,33.61797414848816],[133.07531945213114,33.63071238876576],[133.09692020090657,33.64709381772549],[133.10756554611308,33.659186102856395],[133.11676395139526,33.67228607833981],[133.14792483886018,33.729724432936294],[133.16533979659428,33.753288886472845],[133.1712309099785,33.763443305264374],[133.17882734570546,33.77155650492871],[133.1895243668561,33.775819811235365],[133.20905805898238,33.77282257680052],[133.22290734329934,33.77364939999974],[133.2363948906117,33.77943716149586],[133.2568587587248,33.79819570636671],[133.26838260307468,33.804810289263415],[133.28574588396546,33.80610220045621],[133.30228234255608,33.8051720244694],[133.33504520137492,33.81302684171534],[133.38393110583596,33.81323354729041],[133.42708092744286,33.81837535274026],[133.4685254249085,33.81927969030555],[133.49410525915036,33.82457652448694],[133.51539594866418,33.83700470640211],[133.5602510926137,33.85312775294342],[133.6478943220653,33.85565989848557],[133.74334069191949,33.82661774271473]]]]}},{"type":"Feature","properties":{"iso_3166_2":"JP-44","name":"Oita","name_alt":null,"name_local":"大分県","type":"Ken","type_en":"Prefecture","region":"Kyushu","postal":"OT","region_code":"JPN-SHK"},"geometry":{"type":"MultiPolygon","coordinates":[[[[131.9298608730002,32.71560293200015],[131.92839603000007,32.71385325700008],[131.9222111340001,32.71735260600015],[131.92286217500012,32.72398509300005],[131.92318769600016,32.73073965100015],[131.9256291020001,32.72850169499999],[131.92953535200016,32.72667064000002],[131.93213951900006,32.720282294000086],[131.9298608730002,32.71560293200015]]],[[[131.92530358200017,32.77155182500003],[131.9191186860002,32.768052476000136],[131.91114342500023,32.76988353100002],[131.91195722700016,32.77794017100014],[131.91879316500015,32.77720774900003],[131.92530358200017,32.77155182500003]]],[[[132.07805423300013,32.95742422100001],[132.07186933700015,32.95115794500008],[132.06674238400004,32.95929596600017],[132.06332441500004,32.960923570000105],[132.06959069100017,32.966294664000074],[132.07919355600004,32.973171291000156],[132.08008873800023,32.96714915600016],[132.08000735800024,32.96324290600016],[132.08057701900012,32.96116771000014],[132.07805423300013,32.95742422100001]]],[[[131.93148847700004,32.988592841000084],[131.9234318370001,32.980495510000154],[131.91976972700004,32.98143138200005],[131.91537519600016,32.98110586100013],[131.91301517000002,32.98419830900012],[131.9141544930002,32.99347565300015],[131.9180607430002,32.9955101580001],[131.9220483730002,32.997341213000155],[131.921153191,33.00096263200014],[131.92318769600016,33.00600820500007],[131.9256291020001,33.010972398000106],[131.92807050900004,33.01426829600014],[131.9317326180001,33.01691315300006],[131.93881269600004,33.01683177300008],[131.94410241,33.01548899900017],[131.94166100400017,33.01178620000003],[131.93596438900008,33.00576406500012],[131.93336022200018,33.00039297100007],[131.93197675900004,32.99876536700005],[131.93954511800004,32.99848053600003],[131.94719485800007,32.99420807500009],[131.93148847700004,32.988592841000084]]],[[[132.01474043100004,33.10504791900014],[132.0038354830002,33.09756094000009],[132.00294030000006,33.098496812000164],[132.00277754000004,33.1065534530001],[132.00831139400023,33.11127350500003],[132.01474043100004,33.10504791900014]]],[[[131.99024498800023,33.16982656500015],[131.98316491000017,33.16299062700013],[131.98194420700023,33.16856517100014],[131.98943118600013,33.173081773000106],[131.99024498800023,33.16982656500015]]],[[[131.95744876400013,33.276027736000074],[131.94906660200016,33.27195872600011],[131.94174238400015,33.278347072000045],[131.93832441500015,33.280707098],[131.9410913420002,33.28213125200007],[131.9483341810002,33.28204987200009],[131.95834394600004,33.28078847900018],[131.95744876400013,33.276027736000074]]],[[[131.60718834700018,33.67719147300012],[131.62745201900006,33.667669989000146],[131.64722741,33.66982656500015],[131.6673662740001,33.667192003000125],[131.68955031300018,33.641342245000104],[131.71311515500022,33.60543866400003],[131.72953798100005,33.58023616300012],[131.73707116,33.56037018400018],[131.73991946700008,33.53969961100016],[131.729109,33.51254769600014],[131.73729484100008,33.48460779900013],[131.72734758300007,33.46353913000014],[131.7092823690002,33.432637870000164],[131.7062434980002,33.409582667],[131.69743643400014,33.406392597000135],[131.67457116000017,33.41616445500013],[131.65870201900023,33.422837632000025],[131.6403100920002,33.41657135600015],[131.63542728000007,33.40232982000005],[131.63843834700006,33.386664130000085],[131.63461347700004,33.37396881700003],[131.609629754,33.36880117400001],[131.6010848320001,33.364935614],[131.59623445500003,33.349400219000145],[131.57628894100017,33.346355202],[131.5561629570001,33.346380927],[131.54737389400012,33.35228099200013],[131.53298094200002,33.366113306000116],[131.50602854600018,33.36307383900008],[131.49838511400006,33.340666269000124],[131.51037964000014,33.273403693000134],[131.5284936860002,33.2612165390001],[131.54786217500012,33.25495026200015],[131.61221917500015,33.252936484000074],[131.65453516400007,33.27162523500006],[131.70004316499998,33.25409577000015],[131.7108623820001,33.27017583800013],[131.76209241900003,33.253543499],[131.8221740970001,33.24403243800016],[131.85085719000014,33.25221895900002],[131.8844485440002,33.26830565600001],[131.90262453300014,33.2660418330001],[131.88219531500008,33.23653248400011],[131.87155536400022,33.21541862600019],[131.87224368600002,33.200344143000095],[131.86466184000002,33.19306970900011],[131.84874354000013,33.187999178000084],[131.83097601300003,33.16971306700016],[131.82666062900014,33.152561727000105],[131.80957368900025,33.12764888700009],[131.84262128999998,33.11326732000005],[131.86883062000018,33.12876699900015],[131.90040123800011,33.12913646000008],[131.91145721600017,33.124815134000116],[131.88435011500022,33.10935456000014],[131.86893776100024,33.094340211000045],[131.86321733100024,33.08253329200015],[131.88051074700016,33.07504043000013],[131.89085922300004,33.07951064400005],[131.90579752700003,33.077295736000124],[131.91583134900023,33.06916163000007],[131.92921694500004,33.068270865],[131.93261830800006,33.079469604000124],[131.93446936200021,33.092017862000105],[131.94238354500007,33.092556686000094],[131.950938347,33.07615794500013],[131.95801842500006,33.067206122000115],[131.9671330090001,33.061672268000095],[131.9760848320001,33.06024811400012],[131.98519941499998,33.06317780200014],[131.99146569100006,33.0689964860001],[131.99611291500017,33.091711249000056],[132.01343834700006,33.06386953300007],[132.0094507170002,33.05117422100001],[131.9840088880001,33.04554450900015],[131.94535031300003,33.04749881500011],[131.92955026400008,33.0470896020001],[131.92282875300012,33.02865454100014],[131.90677350700005,33.01184695400009],[131.9031681650001,32.983058986000074],[131.91459563600014,32.97649247000005],[131.93470534100018,32.959506862000026],[131.94970144800018,32.95927494200011],[131.959239129,32.944525458],[131.96989993600002,32.94830963700012],[131.9791772800002,32.95038483300014],[131.98560631600012,32.947333075000145],[131.99097741000017,32.94171784100014],[131.99822024800008,32.938910223],[132.01026451900012,32.94415924700017],[132.00977623800011,32.93903229400017],[132.01387909400003,32.93439292900017],[132.02183065700015,32.93691682100008],[132.03478980000003,32.95129061700011],[132.06074383000012,32.946884996],[132.08118890900002,32.943229703],[132.08411475400007,32.933233985000115],[132.06444569699997,32.936215320000045],[132.0437144790001,32.92727560900015],[132.0254749860001,32.923595910000145],[131.99480228000007,32.90355052299999],[131.98218834700018,32.88890208500008],[131.98666425900015,32.882269598],[131.99586022200006,32.878363348],[132.00017337300002,32.87128327000015],[131.98975670700023,32.85480377800015],[131.98096764400006,32.848334052000055],[131.97234134200008,32.84446849200005],[131.96371504000015,32.839016018],[131.95557701900023,32.82754140800007],[131.96851647200006,32.826117255],[131.99781334700018,32.82965729400017],[132.00342858200005,32.824123440000065],[131.99659264400023,32.810532945000105],[131.98072350400005,32.799261786000116],[131.96241295700005,32.792669989000146],[131.94809003999998,32.79340241100006],[131.92920983200023,32.77826569200006],[131.88249759200008,32.78343333500008],[131.87305748800023,32.76235586100016],[131.87305748800023,32.73468659100014],[131.87233051605838,32.731657540330914],[131.8392191918123,32.73410045057541],[131.83456831277752,32.740017402381184],[131.83022749210502,32.75239390745283],[131.82785037709326,32.76833608684099],[131.8191687357485,32.79836009454279],[131.80924686095395,32.80897960132749],[131.7952942238493,32.81432811145321],[131.7802047060823,32.816421007423614],[131.76118777879296,32.82218292869926],[131.7468734073818,32.823035590320316],[131.73493615098252,32.8204259304123],[131.7268746281616,32.81368215630651],[131.72082848514648,32.805749823795296],[131.70651411283595,32.779808255246806],[131.7002095892012,32.770971585170614],[131.69566206295397,32.76582977972056],[131.68325971856123,32.76332347349951],[131.5903454942492,32.75978363670551],[131.57076012617884,32.75409922889635],[131.55897789941062,32.747562161264696],[131.5397025897029,32.743040473439024],[131.5268868350595,32.74298879749496],[131.51562137312786,32.74593435328775],[131.50776655498262,32.75164459951863],[131.5018754415983,32.75916351998053],[131.4998600608932,32.767018338125766],[131.5012553239741,32.77515737621202],[131.50342573520945,32.783218899032974],[131.50311567594773,32.7927532010993],[131.49768965055696,32.800401312770376],[131.4900932148299,32.80848867401305],[131.47831098806174,32.81499990502154],[131.46415164628152,32.817893784870265],[131.45004398044537,32.81649852088999],[131.42146691266797,32.80479381028614],[131.4016231630786,32.802158311057255],[131.3823995302142,32.80192576795976],[131.35661299039717,32.80463877975596],[131.34281538292353,32.81073659871505],[131.32390180932114,32.822286282386116],[131.26214847157465,32.86628876381532],[131.2461804546642,32.89385814124033],[131.24380333875305,32.90651886715206],[131.24008263570502,32.95450043404783],[131.2382222837314,32.96387970648327],[131.23465661031426,32.97519684525817],[131.22039391484728,33.000492459559425],[131.20907677607224,33.030206407099925],[131.20142866440145,33.04201447229009],[131.1812748564495,33.06289175155315],[131.17228315584296,33.07413137506292],[131.14076053317214,33.12596283621595],[131.12494754409389,33.14244761796324],[131.0906343925631,33.1650043811472],[131.05942182825473,33.18061066285175],[131.0449007512686,33.18115326611034],[131.02893273255958,33.177019151013056],[131.00795210230777,33.16668386506838],[130.97756636029916,33.1607152373184],[130.97291548126438,33.1542040063098],[130.97301883405206,33.14461802829932],[130.9797367697361,33.119942532521904],[130.9859379423822,33.10955556883452],[131.00361128073595,33.08911754004238],[131.009657423751,33.0795315620319],[131.0085722190327,33.07121165589321],[130.99523969865314,33.044985867403895],[130.99089887888024,33.03310028694868],[130.9769462417756,33.028862819963095],[130.95121137880213,33.03227346374943],[130.8708028498717,33.07082408316499],[130.83473270095342,33.0809268251128],[130.8560233913665,33.14299022122184],[130.85214765778815,33.159733385387526],[130.83075361458756,33.21471710880748],[130.8262577660831,33.23298472816272],[130.84114057827506,33.27721975448809],[130.8430009302488,33.294402167326226],[130.83695478723374,33.32251414621079],[130.83633466960944,33.331454169074576],[130.83710981686457,33.33974823679175],[130.83850507994546,33.34551015896669],[130.84129560790595,33.3520213890758],[130.86491173738685,33.38468089420796],[130.8748336121814,33.4078319356952],[130.88584069169448,33.425401923060306],[130.9108004092116,33.44875967102199],[130.92557986861598,33.46612295191274],[130.93798221210935,33.47733673790019],[130.95053958523377,33.48519155514613],[130.9806669457229,33.49578522440858],[130.99508466992168,33.498937485776324],[131.0042313992598,33.500126044181556],[131.06427941286475,33.49811066347628],[131.1244824569998,33.49015249344275],[131.13972700439766,33.491547756523815],[131.14949384956165,33.495656033199296],[131.15709028528843,33.50361420323283],[131.16298139867266,33.51304515251188],[131.1750736838034,33.52549917194928],[131.18111982591913,33.535937812479986],[131.18313520662448,33.545446275225444],[131.17517703659084,33.56844228798123],[131.17517703659084,33.58332510017321],[131.17951785726328,33.59273021103043],[131.18220503063768,33.5970968692251],[131.1951241398672,33.607302964859954],[131.20089214658574,33.61270976599219],[131.21986918300004,33.60754487000004],[131.25646381200008,33.60495535200003],[131.28383445500018,33.58236918000013],[131.32309335200014,33.58122055200015],[131.36762048200015,33.574801779],[131.4177031080002,33.581681679],[131.42317582400008,33.58905352200004],[131.45931405600018,33.616143772],[131.4756370470001,33.631565882000174],[131.4840322870002,33.65303836400001],[131.4985572140001,33.66698519000015],[131.5210451170001,33.6763707920001],[131.55147501700017,33.68044424600005],[131.57380154600006,33.68089552700009],[131.59001712300008,33.6830101580001],[131.60718834700018,33.67719147300012]]],[[[131.66928144600004,33.718491929],[131.65105228000002,33.71637604400017],[131.63314863400015,33.71898021000008],[131.63461347700004,33.723334052000055],[131.64429772200018,33.729763088000155],[131.65569095100014,33.73240794500008],[131.66529381600006,33.73973216400016],[131.66993248800023,33.73977285400015],[131.6748966810002,33.738267320000105],[131.68059329500002,33.736476955000015],[131.68474368600002,33.73151276200015],[131.6818139980002,33.72671133000007],[131.66928144600004,33.718491929]]]]}},{"type":"Feature","properties":{"iso_3166_2":"JP-36","name":"Tokushima","name_alt":"Tokusima","name_local":"徳島県","type":"Ken","type_en":"Prefecture","region":"Shikoku","postal":"TS","region_code":"JPN-SHK"},"geometry":{"type":"MultiPolygon","coordinates":[[[[134.82016035200004,33.856675523000106],[134.81934655000012,33.84821198100015],[134.81682376400008,33.84406159100003],[134.81234785200004,33.84015534100003],[134.80689537900017,33.83816152600018],[134.80534915500007,33.84658437700013],[134.80624433700015,33.85187409100011],[134.80998782599997,33.850653387000094],[134.81495201900012,33.85626862200009],[134.82016035200004,33.856675523000106]]],[[[134.60048233600017,34.22819423200012],[134.59404424800002,34.21381249700015],[134.61034936899998,34.216027454000184],[134.6278955280002,34.23308190400003],[134.64687145600018,34.23925245900007],[134.64070070400012,34.225355862000086],[134.6271762800002,34.20967378800019],[134.62574786500008,34.2010141440001],[134.6254044140001,34.193466909],[134.62720787900017,34.187933661000145],[134.6077580090001,34.18431224200016],[134.61915123800023,34.182074286],[134.62826582100004,34.17792389500006],[134.64208874500005,34.179263295000126],[134.63430226299997,34.165932268000134],[134.62369552699997,34.15077192300005],[134.62046262100003,34.14025293000013],[134.6227319670002,34.13446686400012],[134.6051873790001,34.110776919000116],[134.60458482500005,34.084834391000086],[134.6077580090001,34.06761302299999],[134.60181725400005,34.06370677299999],[134.59522545700005,34.045965887000094],[134.59424889400012,34.03974030200014],[134.59457441500004,34.02977122600005],[134.5997827480002,34.009466864000146],[134.60496636400003,34.001024089000126],[134.61163713300007,33.997020270000135],[134.6242507530001,33.997581129000096],[134.62659146500008,34.008139616],[134.63701600000016,34.01066622400016],[134.65092896999997,33.985940781000025],[134.66291603100015,33.968868609000126],[134.6959625000001,33.95189325700012],[134.690231657,33.94239734900013],[134.70257054000015,33.93726674100016],[134.7022308100002,33.92096530500008],[134.70289147200006,33.90623607000013],[134.69071417600006,33.895733504000034],[134.68677819100017,33.88621653900016],[134.67351321700008,33.88165924700003],[134.66236412900005,33.875881252000156],[134.64625084700018,33.85309479400003],[134.6608179050002,33.846380927],[134.71705162900017,33.84796784100003],[134.71705162900017,33.841701565000065],[134.708262566,33.84056224200013],[134.69825280000023,33.83624909100003],[134.68978925899998,33.83490631700015],[134.68978925899998,33.82807038000011],[134.72203124899997,33.83407324800014],[134.74004555000013,33.840282578000156],[134.75123131600017,33.83490631700015],[134.73230385400015,33.825951916000164],[134.70204863100005,33.813676891000156],[134.66465403400016,33.79848707600003],[134.65186608200005,33.78644440300015],[134.61679986200002,33.7826019970001],[134.6077580090001,33.766017971000096],[134.5793773950002,33.76417006200013],[134.57066101500013,33.73644897800001],[134.54637791100006,33.732502102000026],[134.5384402570002,33.71685772500014],[134.45730039200023,33.67092600800008],[134.4040223980002,33.65447756000016],[134.37617453800024,33.63565700800011],[134.388621681,33.62363408100008],[134.36376953800007,33.60075538900007],[134.360524174,33.58870858700003],[134.35296691800008,33.581630858000054],[134.33945285300015,33.57706668000016],[134.3262604810001,33.58012784400013],[134.31234801500014,33.57250647400015],[134.315460495,33.55513788700013],[134.31370106699998,33.543079177],[134.29671179400012,33.53136344700009],[134.29566479708004,33.5303229879283],[134.24904625887783,33.54356008572928],[134.2350936217732,33.54038198504061],[134.21721357604562,33.54327586488917],[134.19008344909187,33.551518255762815],[134.18031660392822,33.563894761733835],[134.15484012337296,33.60921499277772],[134.16104129422038,33.62479543695984],[134.16310835176895,33.63427806218293],[134.16166141184468,33.645026760176805],[134.15871585515268,33.65624054616423],[134.14863895072713,33.66549062828993],[134.1323091977113,33.67220856397411],[134.10130333897806,33.67639435501546],[134.06735192265316,33.675309150297],[134.0601688989756,33.679339910808224],[134.05231408083026,33.74843130096373],[134.04838667220716,33.76018769020966],[134.04342573480974,33.77101390256958],[134.03691450380134,33.78248607007613],[134.02776777626187,33.80325999655152],[134.01753584220538,33.81077891701351],[133.97345584461166,33.81604991277318],[133.95469729974062,33.81240672499045],[133.9427600442407,33.805301214779305],[133.9335616398579,33.7953276640405],[133.92208947235136,33.786361802755025],[133.9063798360605,33.78496653877475],[133.88498579286014,33.790056668280656],[133.83206912698856,33.81651500076664],[133.81315555158736,33.823362128559396],[133.79501712524004,33.82382721655277],[133.7841650735593,33.823103746141],[133.74334069191949,33.82661774271473],[133.6478943220653,33.85565989848557],[133.65673099214158,33.873462428947974],[133.66680789566786,33.90129018789183],[133.66887495321643,33.92780019812069],[133.66060672392106,33.99787344020707],[133.70391157425982,34.02148956968786],[133.71559044824053,34.032031562106866],[133.73496910983656,34.04417552318192],[133.74514936704978,34.05239207653314],[133.75713830029238,34.05885162979884],[133.7911413916619,34.06520783117644],[133.80369876478605,34.072003282125834],[133.81827151861566,34.087221992001346],[133.82824507115313,34.09288056138881],[133.89992028189542,34.10065786426908],[133.91836876840395,34.09536103008752],[133.93046105443412,34.08763540315137],[133.94131310431632,34.07823029229415],[133.95221683194117,34.07368276604684],[133.96539432179046,34.071977443704114],[133.98399783703067,34.074406236458586],[133.99970747332125,34.07905711549357],[134.03412397674018,34.095593574084106],[134.04776655458286,34.09946930586371],[134.09122643365313,34.106445623966366],[134.1080212746621,34.1122333854624],[134.12336917484768,34.1228270529261],[134.13670169522712,34.143704332189245],[134.14941409708283,34.15181753185361],[134.17210005057692,34.15765696929368],[134.21974572158788,34.16261790579172],[134.3601505881791,34.16401316977199],[134.3958590027908,34.154194647764726],[134.4082613471834,34.157036852568766],[134.41973351468997,34.16148102512922],[134.44205773297804,34.205380153771145],[134.4424456734757,34.208266882619554],[134.46862330400003,34.20746014400008],[134.49524256800012,34.224235342000114],[134.56088300900004,34.22142161700019],[134.5817163420002,34.229641018000095],[134.59424889400012,34.23212311400012],[134.60714479300023,34.25084548800014],[134.6110936680001,34.23941424300013],[134.60048233600017,34.22819423200012]]]]}},{"type":"Feature","properties":{"iso_3166_2":"JP-23","name":"Aichi","name_alt":"Aiti","name_local":"愛知県","type":"Ken","type_en":"Prefecture","region":"Chubu","postal":"AI","region_code":"JPN-CHB"},"geometry":{"type":"MultiPolygon","coordinates":[[[[136.9868831370002,34.54277496700003],[136.97980000400017,34.53798551800007],[136.97545270000003,34.54414496800014],[136.98361067300007,34.55046243300016],[136.9893261010001,34.54977737100013],[136.9868831370002,34.54277496700003]]],[[[137.00705755200013,34.674538660000096],[137.0020163610001,34.66826491900004],[136.99800820300013,34.675788546000106],[137.01023977100024,34.681697509000074],[137.00705755200013,34.674538660000096]]],[[[136.8150024280001,34.83991708900011],[136.80773059200024,34.83919645500008],[136.79805969000014,34.876400640000114],[136.81096899900004,34.876305527000156],[136.82350283300005,34.86203744100008],[136.82595147000004,34.84907610000012],[136.8147008650001,34.84630678400005],[136.8150024280001,34.83991708900011]]],[[[137.02071170478135,35.34766185221271],[137.0261894061163,35.33903188681218],[137.03218387318728,35.32603526501548],[137.036111280911,35.32135854845835],[137.04122724793925,35.317327786148454],[137.05068403474033,35.31148834870838],[137.05890058809163,35.3041502962992],[137.07083784359153,35.2849266634348],[137.07889936731206,35.279862372350536],[137.08665083177053,35.27769196201446],[137.10251549679268,35.27614166930256],[137.11460778192364,35.27236929031052],[137.12747521430973,35.266684882501366],[137.15930789624238,35.24573008887255],[137.168609654312,35.24219025297772],[137.18039188018108,35.24038157784763],[137.19961551304542,35.24123423946857],[137.2639009954345,35.266219794507904],[137.27955895398244,35.26916535120007],[137.2932015318252,35.2677700872198],[137.33542117744534,35.24875315993039],[137.35557498629655,35.24301707617714],[137.36983768086415,35.23715180121464],[137.39174848890164,35.22066701946734],[137.40694136035543,35.215240994076666],[137.42203087812246,35.21599030201084],[137.46652428596698,35.232320055026506],[137.49029544507871,35.24596263286922],[137.50006229114175,35.252938950971796],[137.54786298998513,35.2703539087059],[137.53871626244566,35.23717763873698],[137.55561445534298,35.20193431211884],[137.5652262717749,35.19312348136354],[137.57514814656966,35.18816254306684],[137.5882222836316,35.18847260232876],[137.61674767456557,35.192658393370166],[137.62966678289573,35.19759349234586],[137.64341271442518,35.204802354445135],[137.66237796397192,35.20901398390818],[137.68206668482955,35.20870392554572],[137.75131310371668,35.19622406678731],[137.80557335762447,35.19451874444444],[137.79797692279672,35.16232432730591],[137.7961165708231,35.13646027312309],[137.78696984328363,35.113360908479095],[137.77022667911794,35.08116649044122],[137.75348351495225,35.06318309192609],[137.69777632112041,35.01809540487908],[137.68485721189072,35.00251495979758],[137.67617557234482,34.96148387348198],[137.67043948769222,34.947221178015],[137.63333580910026,34.911719468978376],[137.62511925664833,34.89657827436791],[137.61798790891484,34.879266669421284],[137.6091512388385,34.86908641220823],[137.57917890798026,34.845031033155706],[137.57189253061577,34.840974433323495],[137.5636759790631,34.83777049421293],[137.51194786979826,34.82622081144133],[137.4975818224432,34.819787095697976],[137.48843509310498,34.80976186811576],[137.47153690020778,34.770901191236945],[137.46667931469872,34.75245270382926],[137.4632686709124,34.72521922498727],[137.4646639339933,34.70682241532221],[137.4679195499472,34.69333486621112],[137.46874637314662,34.686926987990105],[137.46790343229296,34.67096924919885],[137.42755727900018,34.66774579100017],[137.33970287999998,34.647447513000046],[137.1407268090002,34.589289111000156],[137.0958211670002,34.59323397800016],[137.04482177000014,34.580630235000044],[137.03150475400017,34.57941315300006],[137.01609532100017,34.57878471000002],[137.02359643000014,34.590778815000036],[137.02964210200005,34.59801495600014],[137.04248611100016,34.61757853200014],[137.052219903,34.64680316900002],[137.07283016600005,34.664599003000134],[137.10108483200017,34.63914622600011],[137.10450280000018,34.63202545800006],[137.1108504570001,34.625433661],[137.11869901800006,34.63370833900014],[137.12102007100006,34.63766082400004],[137.1370310010001,34.645578300000025],[137.15316816500004,34.651312567],[137.16765384200008,34.65668366100006],[137.19743544000002,34.673934111000065],[137.24111128400014,34.696677994000126],[137.25971580000012,34.7041445950001],[137.28225457700015,34.731178516000014],[137.298225934,34.72821530000006],[137.29967102300023,34.706846644],[137.29567769400003,34.6912040990001],[137.30345201200024,34.689428676000105],[137.30996040900007,34.70659849200008],[137.30925623700014,34.725664278000025],[137.33259033900012,34.720338258000154],[137.34081945300002,34.72654295100007],[137.31233949200006,34.73667473100012],[137.32081458400003,34.75525177400003],[137.3243163120002,34.76684465600006],[137.32154381600006,34.77338288000006],[137.29792810200016,34.797191095000144],[137.27995853000007,34.80809153900013],[137.2665052230001,34.80313888900004],[137.24580957200013,34.809640624000124],[137.22282679300022,34.816263291000084],[137.2077152950001,34.802580234000104],[137.19443232100016,34.80699872100003],[137.19084265200016,34.788680684000056],[137.1887391160001,34.77011170000013],[137.1708392290001,34.763864997],[137.17147080700013,34.784049803000144],[137.157473835,34.781164918000016],[137.1405333820001,34.78781337000005],[137.12154888900014,34.788343361000116],[137.10144007600016,34.784596454000095],[137.08744671100024,34.776028248],[137.07270864900008,34.78496379100001],[137.05016559100014,34.77760612499999],[137.02881708599998,34.780157144000114],[137.0182478530002,34.783289035000095],[137.00228925900004,34.802394924000126],[136.99561608200005,34.80809153900013],[136.97662599200012,34.82550679500018],[136.95823137300007,34.83235218500009],[136.96240352800018,34.85799564600016],[136.98259524800008,34.89826080900015],[136.97885175900015,34.92422109600015],[136.969493035,34.91160716400016],[136.95679772200006,34.884833075000145],[136.93848717500006,34.86098867400007],[136.93100019600004,34.84642161700005],[136.9257463930002,34.828270956],[136.91556403600012,34.77596001200014],[136.92660566500004,34.76361725500011],[136.93726647200018,34.746039130000085],[136.96264998500013,34.73496420500008],[136.971856878,34.713403750000154],[136.97149659400023,34.696411325],[136.9453916490002,34.698470690000036],[136.91320428500003,34.710874247000035],[136.8781098200001,34.72852009700016],[136.85596764400006,34.73981354400003],[136.8445937930002,34.752548136000044],[136.84288610100023,34.76907728900015],[136.85301440900017,34.78759522100013],[136.85697530900003,34.804757693000155],[136.86473401200013,34.82154509000013],[136.86426376300014,34.83652562000016],[136.85628619900015,34.856495216000084],[136.84341791300008,34.871163119000116],[136.82772581000003,34.87194149700012],[136.82293819700024,34.895623239000045],[136.82176567300021,34.91949379300014],[136.82224729599997,34.938299802000174],[136.823464778,34.954855423000154],[136.83329350600005,34.97209207400009],[136.84381381500017,34.989480583000145],[136.85690642700004,35.008037181000034],[136.86588050100013,35.02569016400004],[136.8798593170001,35.043836857000045],[136.88279637300016,35.07104784800005],[136.88572989700006,35.08919548600012],[136.87182146899997,35.09339527300007],[136.85706008100024,35.061786607],[136.8488647400001,35.039469415000084],[136.84412592100014,35.06076675100017],[136.84315173399997,35.07504335100005],[136.83011829400002,35.078831393000044],[136.8393272550002,35.03251957900015],[136.81302073200007,35.027385537000086],[136.808959273,35.048830543000136],[136.79946622900016,35.04855935200008],[136.79790005000004,35.024069190000134],[136.77846910600013,35.020401545000155],[136.75180097706672,35.02614980693416],[136.7359745629757,35.04168569593814],[136.7245023945699,35.05915233051569],[136.71008467037117,35.0913984244978],[136.69825076675957,35.10692719183639],[136.68414310092342,35.12126740256859],[136.6734460797728,35.13881154971334],[136.67654666609573,35.21562856680488],[136.6800606626695,35.236376654858745],[136.72558760018754,35.29128286391311],[136.7530277846046,35.338670152505514],[136.76098595643666,35.34750682258171],[136.77059777196948,35.35210602477325],[136.77648888625302,35.34740346889494],[136.78982140483387,35.3408405619423],[136.7973661637175,35.34053050447922],[136.8059444522747,35.342054958769396],[136.82863040576856,35.35295868639419],[136.84873253777644,35.36009003412788],[136.9097624051109,35.370709540013266],[136.93244835770568,35.38001129808303],[136.93957970633838,35.38189748847837],[136.95291222491917,35.38414541318021],[136.96500451094934,35.38104482685732],[136.99249637310922,35.36383657469817],[137.0131152690545,35.35443146384104],[137.02071170478135,35.34766185221271]]]]}},{"type":"Feature","properties":{"iso_3166_2":"JP-21","name":"Gifu","name_alt":"Gihu","name_local":"岐阜県","type":"Ken","type_en":"Prefecture","region":"Chubu","postal":"GF","region_code":"JPN-CHB"},"geometry":{"type":"Polygon","coordinates":[[[137.29490685416795,36.42113638043955],[137.30761925692315,36.423513495451516],[137.31867801327968,36.42919790326059],[137.3285998880744,36.43625173572903],[137.34131229082948,36.43968821883618],[137.35759036700182,36.43679433898754],[137.38818281458526,36.422996731513905],[137.41422773682052,36.41472850221854],[137.47753136637937,36.40604686087397],[137.52626224210877,36.387805080839826],[137.56538130140592,36.377004706002396],[137.60822106285173,36.34705821446502],[137.61829796817665,36.33059927024007],[137.62449913992333,36.31499298853555],[137.62279381668122,36.300161852287715],[137.61194176679913,36.27106802057273],[137.60630903493393,36.26039683694444],[137.5979891296945,36.25086253487808],[137.57220258987758,36.226574611828795],[137.56290083180784,36.21055491807505],[137.56181562708946,36.19825592736916],[137.56243574381455,36.18957428602451],[137.56486453656913,36.176190089700896],[137.561350539096,36.16559642223703],[137.54646772690404,36.13851797122737],[137.53943973195805,36.11789907528208],[137.5447624045613,36.10012238234202],[137.5577848647796,36.08482615810064],[137.5723576186092,36.07257884423831],[137.58212446467223,36.056817532003464],[137.58212446467223,36.0438984245726],[137.57731855690588,36.03123769776158],[137.55840498330332,36.00118785343662],[137.5199060407312,35.95276703517047],[137.48455936132547,35.91667104783056],[137.47350060406967,35.90049632444581],[137.46280358291892,35.889385891245865],[137.4490059754454,35.88406321954196],[137.42802534429416,35.88638865771037],[137.41112715139684,35.8865953641847],[137.39278201677655,35.880575060490656],[137.37593549982347,35.86850861288218],[137.33836673413742,35.82453196897521],[137.3232255386277,35.8016393090069],[137.3259643897448,35.78988292155964],[137.33325076710918,35.78381094012278],[137.35712527900847,35.78143382421163],[137.36890750487737,35.77745473874518],[137.37764082216626,35.76980662707419],[137.3844621124365,35.76156423620054],[137.3957792503121,35.755595608450534],[137.42368452362183,35.74872264313544],[137.43474327997836,35.74223725054867],[137.444045038048,35.73337474205064],[137.47195031135777,35.68164663278583],[137.4805285990156,35.669270127714185],[137.50331790619634,35.6466875270078],[137.51075931229246,35.63456940435455],[137.5118445170108,35.62245127990266],[137.50998416593643,35.59002431876729],[137.52817427002657,35.53922638638855],[137.5315849138127,35.53354197857939],[137.53416873619818,35.53049306909983],[137.53974979121983,35.5270565859926],[137.56042036400856,35.517625636713746],[137.5852250509953,35.49509471285069],[137.59473351463998,35.46956655545213],[137.59473351463998,35.453288479279905],[137.59070275322938,35.43631277111743],[137.59349328029055,35.42409129477741],[137.6057405950524,35.39398977270986],[137.60444868385957,35.38450714838612],[137.59767907133198,35.38029551892308],[137.57623335218744,35.3818974884783],[137.5684818868296,35.3787193868902],[137.5644511254191,35.37112295206262],[137.5756132345631,35.34512970577134],[137.57840376162426,35.32843821934836],[137.57261600192697,35.3132970238386],[137.56367597906308,35.301411445182055],[137.54786298998505,35.27035390870586],[137.50006229114172,35.25293895097175],[137.4902954450787,35.24596263286918],[137.466524285967,35.23232005502646],[137.42203087812243,35.215990302010795],[137.4069413603554,35.215240994076595],[137.3917484889016,35.220667019467385],[137.36983768086418,35.23715180121468],[137.35557498629657,35.2430170761771],[137.33542117744537,35.24875315993032],[137.29320153182516,35.26777008721976],[137.27955895398247,35.26916535120003],[137.26390099543448,35.26621979450786],[137.1996155130454,35.241234239468525],[137.1803918801811,35.240381577847586],[137.16860965431204,35.242190252977764],[137.15930789624235,35.24573008887248],[137.12747521430964,35.26668488250132],[137.11460778192355,35.27236929031048],[137.10251549679265,35.2761416693026],[137.08665083177044,35.277691962014416],[137.07889936731198,35.27986237235058],[137.07083784359156,35.28492666343476],[137.05890058809166,35.304150296299156],[137.05068403474036,35.31148834870834],[137.04122724793916,35.31732778614841],[137.03611128091092,35.32135854845828],[137.0321838731872,35.326035265015406],[137.0261894061162,35.33903188681214],[137.02071170478132,35.34766185221275],[137.01311526905448,35.354431463840996],[136.9924963731092,35.36383657469813],[136.96500451094937,35.38104482685728],[136.95291222491915,35.38414541318025],[136.93957970633835,35.3818974884783],[136.9324483577056,35.38001129808296],[136.90976240511088,35.37070954001322],[136.84873253777636,35.36009003412781],[136.82863040576854,35.35295868639423],[136.80594445227467,35.34205495876935],[136.79736616371747,35.34053050447926],[136.7898214048339,35.34084056194234],[136.776488886253,35.347403468894896],[136.7705977719695,35.35210602477321],[136.76098595643668,35.34750682258175],[136.75302778460457,35.33867015250553],[136.7255876001875,35.29128286391307],[136.6800606626694,35.236376654858674],[136.67654666609576,35.215628566804924],[136.67344607977276,35.138811549713296],[136.61804894430333,35.158009345055234],[136.58466596875945,35.17439077401497],[136.55815595942988,35.19402781802938],[136.54900923099115,35.204208075242434],[136.5387772969347,35.22275991543779],[136.52833865820247,35.22942617427853],[136.5151611683532,35.23190664297715],[136.3987858423926,35.20260610568721],[136.37615156484276,35.231493231827216],[136.37537641758752,35.266323147295424],[136.39397993372688,35.31861969734118],[136.39816572476832,35.343579413059445],[136.40245486859732,35.35714447743567],[136.40762251156963,35.393395494406576],[136.3973905784125,35.45277171534238],[136.37909712063566,35.50106334150004],[136.3684001003843,35.52082957582422],[136.35935672383374,35.53385203694194],[136.34757449796467,35.53622915285305],[136.33806603431998,35.5320175242893],[136.3260254251333,35.53294770027611],[136.31238284729056,35.54168101756491],[136.29796512309196,35.56397939743121],[136.29264244958938,35.57989573839757],[136.28923180580324,35.60015290003628],[136.25729577018365,35.64562815981171],[136.28985192342753,35.6952633731062],[136.30426964672677,35.744226792832194],[136.31315799364648,35.75461375651969],[136.32416507405895,35.76169342740974],[136.3370325046464,35.76639598238867],[136.35026167223833,35.76792043757814],[136.36452436680605,35.76608592402613],[136.39909590075513,35.75590566681308],[136.41465050741493,35.75378693332027],[136.42999840670115,35.75456207877687],[136.44271080855697,35.754045314839374],[136.45537153536804,35.75190074292493],[136.4760937850001,35.73993764900331],[136.48415530782125,35.73911082580398],[136.48927127484944,35.74818003987696],[136.4951623882336,35.756060696443996],[136.50802981972043,35.761796780197216],[136.61200280218748,35.779263413875384],[136.634378697319,35.779289252297104],[136.6685884951629,35.77386322690643],[136.6870886576154,35.77448334453078],[136.7100846703712,35.780839545009],[136.72682783363757,35.78316498497608],[136.75773034138206,35.78401764569776],[136.76858239216364,35.79099396380042],[136.7826900579998,35.81305980146868],[136.79555748858724,35.82437693934423],[136.80305057242595,35.83605581332509],[136.80212039643914,35.85037018473622],[136.7924569031635,35.86938711202566],[136.77896935405244,35.88698293691303],[136.76594689293472,35.8982742381655],[136.75385460780387,35.90442373306885],[136.72791303925533,35.91021149276622],[136.71659590137978,35.915172431062814],[136.70775923130338,35.92266551400229],[136.70124800029498,35.931605535966696],[136.6985608260212,35.943542792365974],[136.6991809427463,35.95576426870596],[136.7027982930067,35.97271413844672],[136.7071391136791,36.013874416870806],[136.71582075412448,36.038808295066815],[136.722331985133,36.051236476981785],[136.72429568899474,36.05991811832655],[136.72088504520866,36.07480093051851],[136.74527632104537,36.10616852535716],[136.7542680198532,36.147664700565514],[136.76253624914858,36.16156565992725],[136.81188724160296,36.22006338082039],[136.81679650305614,36.23520457633012],[136.81312747595223,36.2470126415202],[136.7916817568077,36.26502187845688],[136.7842403498122,36.27300588601284],[136.7732332702991,36.291996974880476],[136.79726281093002,36.28770783105156],[136.80584109858773,36.28899974224433],[136.8145227399325,36.294477444478446],[136.8193286476989,36.303159084923834],[136.8227392932837,36.31499298853555],[136.82863040576854,36.32858388953491],[136.83746707584487,36.33757558924202],[136.85048953696258,36.34279490815845],[136.88139204290837,36.33783397076115],[136.89891035432936,36.33742055871184],[136.9219063661858,36.332821357419675],[136.93570397365949,36.32656850793029],[136.94485070209817,36.31889455783758],[136.94872643387782,36.31111725495728],[136.9485714051462,36.30305573213636],[136.94283532139286,36.284038804846915],[136.9462459660785,36.27608063391409],[136.95797651600333,36.273315945274646],[136.97709679608027,36.2833670112785],[136.99849083928075,36.303520820129705],[137.0052087749649,36.30819753668692],[137.01683597210246,36.31346853334617],[137.02680952374044,36.31948883704021],[137.03528445861087,36.330495917452595],[137.03900516165885,36.340391953825616],[137.04153730720088,36.35080475503534],[137.04649824369892,36.35700592678202],[137.05409468032525,36.36266449616957],[137.06680708218113,36.36914988875634],[137.08127648322306,36.37896841076352],[137.13259118133794,36.42521881779422],[137.14576867118723,36.43271189983432],[137.1611682482161,36.43684601493166],[137.17589603077715,36.43201426874356],[137.18767825664622,36.42966299125405],[137.2001322778823,36.42891368331985],[137.26421105379706,36.450023504780944],[137.27630333892785,36.45224559196052],[137.28482994974235,36.45079865203621],[137.28824059532712,36.444649156233595],[137.2860185081476,36.4373627788691],[137.2850883321608,36.431109931178355],[137.28669030171602,36.42503794974161],[137.29490685416795,36.42113638043955]]]}},{"type":"Feature","properties":{"iso_3166_2":"JP-17","name":"Ishikawa","name_alt":"Isikawa","name_local":"石川県","type":"Ken","type_en":"Prefecture","region":"Chubu","postal":"IS","region_code":"JPN-CHB"},"geometry":{"type":"MultiPolygon","coordinates":[[[[137.0452580090001,37.145086981000176],[137.04444420700005,37.13670482000013],[137.04590905000012,37.128119208000115],[137.0387475920002,37.12010325700008],[137.02222741,37.114447333000086],[137.0037541020001,37.11347077],[136.98585045700023,37.1083031270001],[136.97266686300006,37.10162995000006],[136.96322675900015,37.10154857000008],[136.94727623800023,37.09699127800012],[136.94369550899998,37.09735748900012],[136.93482506600006,37.10814036700013],[136.9155379570001,37.12775299700009],[136.90528405000018,37.14362213700012],[136.91146894600004,37.150946356000034],[136.91960696700008,37.14744700700014],[136.92351321700008,37.14008209800015],[136.92839603000002,37.13776276200018],[136.93433678500006,37.14179108300014],[136.94125410200016,37.14443594000012],[136.95020592500006,37.144761460000055],[136.95932050900015,37.147365627000156],[136.96664472700016,37.15180084800012],[136.97364342500023,37.153265692],[136.9812117850001,37.15131256700015],[136.98902428500017,37.14533112200003],[136.99903405000006,37.13947174700009],[137.00855553500017,37.140611070000105],[137.0162866550002,37.14484284100014],[137.02719160200016,37.15521881700015],[137.04175866000017,37.159735419000086],[137.048106316,37.15228913000011],[137.0452580090001,37.145086981000176]]],[[[137.35120513000012,37.44567560400013],[137.32513608100007,37.439111553000046],[137.30783313499998,37.439808897000106],[137.28725280900008,37.442975305000076],[137.26812894400004,37.43649042400007],[137.25360123900006,37.42910590200013],[137.2459830050001,37.41355557100012],[137.23736360900014,37.37988162000012],[137.248878415,37.35726027800008],[137.26748553400003,37.355085776000024],[137.2653492120002,37.339807303000114],[137.26254497500017,37.32604948699999],[137.25582138300004,37.315260486000014],[137.23766775000016,37.30170764600014],[137.23023522200018,37.29214101800015],[137.20918093000003,37.293031904000046],[137.16560551600006,37.30083373900014],[137.10872138900007,37.28344965100008],[137.09287312299998,37.26136598400005],[137.07130008,37.238111731000046],[137.07066671599998,37.21864397800006],[137.0543695370001,37.21018374600011],[137.03289212600012,37.20466420300015],[137.02695161400018,37.19136096500013],[137.01417076900006,37.184881903000175],[136.980235222,37.196478583],[136.96022288300006,37.20733866900018],[136.94588300800015,37.21718561900009],[136.95634768100004,37.22806693100007],[136.95995418700002,37.234720022000076],[136.95106995500024,37.23448289400007],[136.94180612000017,37.224720176000105],[136.93043053500006,37.22162506700006],[136.92652428500006,37.21352773600013],[136.91656779300004,37.198207266000125],[136.89259776400016,37.17332110000011],[136.88021545300015,37.144152871000145],[136.89566763700023,37.13890407800001],[136.89323421900022,37.11753438400014],[136.88775294,37.11031842000013],[136.86867050100014,37.11091236500006],[136.86811660400022,37.08910758899999],[136.8609261840002,37.07677545000014],[136.87468509200008,37.06964752800006],[136.89332116000006,37.073065497000144],[136.9142358730002,37.082424221000096],[136.93360436300011,37.079820054],[136.96322675900015,37.051743882],[136.98012596200024,37.04685964],[137.00399162800002,37.055457543000145],[137.02429826600022,37.0954088860001],[137.0386867560002,37.10282104000002],[137.04712975400005,37.098822333],[137.05396569100017,37.079820054],[137.04884394200022,37.02292600100019],[137.054446199,36.966749864000164],[137.0444249916471,36.95640420176632],[137.04262251191952,36.95627167409846],[137.0086194196506,36.95288686783475],[136.99141116839067,36.95340363177225],[136.97926720641632,36.95149160385439],[136.95074181458298,36.93965770114205],[136.9381844423581,36.93759064449266],[136.92686730358312,36.938107408430156],[136.91487837123978,36.93730642275328],[136.90464643808278,36.933094794189415],[136.89410444566377,36.92570506403753],[136.87157352090125,36.902424832240186],[136.85979129503224,36.88702525521133],[136.83281619681,36.82948354782742],[136.8273384945758,36.81310211796843],[136.82444461472724,36.79054535658294],[136.811732211972,36.75264069321345],[136.80429080587604,36.742615464731855],[136.78408532108077,36.72742259417744],[136.7771090029781,36.718947659307034],[136.77834923732738,36.705873521345964],[136.7812947940196,36.69543488171435],[136.7861007017859,36.6848928901948],[136.78765099539712,36.67510020570997],[136.78703087777276,36.66466156697773],[136.76920250888858,36.62153758379243],[136.76997765524462,36.60339915654585],[136.77276818320505,36.588593857820385],[136.78284508673133,36.55665782310008],[136.7836202330873,36.54340281798558],[136.77907270684003,36.52479930274565],[136.77380171108004,36.51286204724575],[136.7684273616335,36.49663564701747],[136.75835045810723,36.440360012404724],[136.75757531085188,36.418991808525064],[136.7620711611552,36.402791245819415],[136.7690474792577,36.39100901995023],[136.77323327029913,36.376591294852446],[136.7736983582926,36.35979645384323],[136.7664119809281,36.33450084134081],[136.7643966002229,36.321555895488146],[136.77323327029913,36.29199697488052],[136.78424034981222,36.27300588601288],[136.79168175680772,36.26502187845692],[136.81312747595226,36.24701264152016],[136.81679650305617,36.23520457633016],[136.81188724160305,36.220063380820434],[136.76253624914867,36.16156565992729],[136.7542680198533,36.14766470056556],[136.7452763210454,36.106168525357205],[136.7208850452087,36.07480093051849],[136.65623782761364,36.06343211490024],[136.63716922438013,36.06617096601734],[136.62300988170082,36.07446503373423],[136.58683637909562,36.108028876431476],[136.56621748315033,36.1235318062479],[136.53298953723734,36.1399132352076],[136.49485232987118,36.14580434769256],[136.46270958867663,36.1467862005227],[136.448911981203,36.14464162950763],[136.43573449135366,36.14022329446952],[136.41692426963928,36.14045583846611],[136.37832197517903,36.15539032570304],[136.35873660710868,36.15949860327798],[136.33563724156548,36.16192739513316],[136.32292483881022,36.16631989174955],[136.31191775929713,36.17376129784567],[136.30519982271355,36.18414826153305],[136.30106570941493,36.196292223507285],[136.29403771356957,36.22517934784857],[136.29000695215908,36.23592804584264],[136.286596308373,36.24236176248537],[136.2800850773643,36.24838206617933],[136.27605431505472,36.251275946927436],[136.24318810434752,36.269776109380004],[136.2412243995864,36.27179149008525],[136.2267192623897,36.28560274627942],[136.278667388,36.322405775000064],[136.29841744100005,36.34727817000011],[136.34677884800007,36.36580091000003],[136.38229344500022,36.391071368000084],[136.43018639400012,36.4325218770001],[136.63996143100022,36.662600574000024],[136.6896847930001,36.730826931000095],[136.76055452600022,36.87059936100003],[136.76563379700022,36.88952789300008],[136.765448029,36.913397111000066],[136.75823829400005,36.91931265700005],[136.75038571000007,36.92572910200009],[136.75195861900025,36.935416431000036],[136.76093284200007,36.95239759500005],[136.76761331400022,36.98099874800006],[136.7599096760001,37.000087101000176],[136.74228837100011,37.01338806100016],[136.7315599890001,37.047648676000094],[136.72044825800006,37.05499833000006],[136.71841293800006,37.07626148900009],[136.7267358730002,37.126613674000154],[136.720960846,37.142047501000135],[136.70856414900007,37.14987732700014],[136.69842979700016,37.14759712700011],[136.69626613100004,37.13636152400015],[136.6764437830001,37.13740149600012],[136.67025890300025,37.149957088000164],[136.67447257100017,37.17547192100007],[136.68200941000006,37.19905012400015],[136.69042389300014,37.21500773200002],[136.70557701900006,37.22825755400014],[136.69783547500012,37.239542596000106],[136.71277116100006,37.25106551400016],[136.72614534199997,37.26963998000012],[136.73321719800018,37.285014846000095],[136.7244348510002,37.297491111000156],[136.72153094200021,37.325329539],[136.74909419400004,37.35791740000012],[136.78376714400005,37.37389233900008],[136.84217066699998,37.399532772],[136.88079850700015,37.407986994000154],[136.9034835250002,37.398323368000106],[136.93476613600015,37.399457018000035],[137.04487433600005,37.44791639099999],[137.07153452100013,37.45300312900004],[137.09133864200012,37.47263502],[137.11384056300002,37.487746918000184],[137.25549087500022,37.52459398900005],[137.295709888,37.53149016499999],[137.34096555900013,37.517094138000104],[137.35087377100015,37.50610344200014],[137.34369685500005,37.48666688600015],[137.34529929800013,37.475020106],[137.35897927200014,37.46663506600005],[137.35613040500002,37.453192450000174],[137.35120513000012,37.44567560400013]]]]}},{"type":"Feature","properties":{"iso_3166_2":"JP-24","name":"Mie","name_alt":"Miye","name_local":"三重県","type":"Ken","type_en":"Prefecture","region":"Kinki","postal":"ME","region_code":"JPN-CHB"},"geometry":{"type":"MultiPolygon","coordinates":[[[[136.89120225700006,34.47970794400008],[136.88320429000007,34.475366090000094],[136.87753635300024,34.48317624300016],[136.87259894600012,34.49113933299999],[136.89196844200004,34.49669208000016],[136.89899152000018,34.50405336600012],[136.9089525420002,34.50236246700011],[136.90690636200011,34.49414952200003],[136.90247110600004,34.48606033400013],[136.89120225700006,34.47970794400008]]],[[[136.87398509000005,34.51341308800015],[136.8562159960002,34.51013930400008],[136.84912737600004,34.51503705200004],[136.86591662000004,34.521326624000054],[136.89017871600018,34.531200943000115],[136.89647361500013,34.53841118900003],[136.91005235100025,34.54010947400012],[136.90248620500014,34.53197415700005],[136.90317474600025,34.525015299000174],[136.88906349200008,34.52255264700007],[136.87398509000005,34.51341308800015]]],[[[136.7359745629757,35.04168569593814],[136.75180097706672,35.02614980693416],[136.7448022800002,35.02342357],[136.72559655000023,35.02724844],[136.68116295700023,35.000921942],[136.65919030000012,34.98395416900003],[136.64991295700005,34.968898830000015],[136.64869225400005,34.96259186400006],[136.64356530000023,34.95319245000006],[136.642425977,34.94806549700003],[136.64478600400017,34.94236888200005],[136.66166683600014,34.94050457500008],[136.645550992,34.929787448000084],[136.64825961300008,34.911600243000024],[136.6393159400001,34.88904870099999],[136.6161145450001,34.85350057100011],[136.56501226500004,34.80011926500005],[136.5349399390001,34.76569509900018],[136.52735436300023,34.72125885600012],[136.52165774800008,34.701727606000034],[136.51954186300023,34.68085358300006],[136.52165774800008,34.67609284100017],[136.53223717500012,34.66014232000008],[136.53630618600008,34.65668366100006],[136.54639733200023,34.651597398000135],[136.5456649100001,34.63987864800005],[136.54118899800002,34.626206773000106],[136.54004967500012,34.61570872600005],[136.55103600400005,34.601996161000116],[136.56812584700018,34.59638092700011],[136.61207116000006,34.59589264500012],[136.6329858730002,34.59113190300003],[136.64877363400004,34.57973867400007],[136.66260826900023,34.56598541900014],[136.6770939460001,34.55426666900014],[136.7522892590001,34.513332424000126],[136.80355879000004,34.49526601800004],[136.81446373800011,34.48602936400006],[136.82496178500017,34.48944733300006],[136.83887780000023,34.48916250200013],[136.85230553500006,34.48554108300006],[136.86215254000015,34.47919342700014],[136.86890709700018,34.467352606000176],[136.87077884200008,34.45685455900009],[136.87354576900012,34.44708893400015],[136.88331139400023,34.437567450000174],[136.89633222700004,34.433417059000035],[136.90699303500017,34.434637762000065],[136.91602623800006,34.43398672100001],[136.92432701900017,34.423976955000015],[136.92579186300023,34.41290924700017],[136.91675866,34.376166083000086],[136.90463300900004,34.38117096600003],[136.89307701900012,34.38239166900006],[136.88314863399998,34.37885163000006],[136.87525475400005,34.36933014500006],[136.87989342500023,34.36273834800009],[136.88721764400023,34.3570824240001],[136.89722741000006,34.353949286000116],[136.90992272200018,34.35504791900017],[136.894379102,34.34271881700012],[136.88868248800011,34.33616771000014],[136.88331139400023,34.32831452000015],[136.8912866550002,34.31769440300012],[136.89779707099999,34.30097077000009],[136.90023847700004,34.28253815300015],[136.8956811860002,34.26691315300015],[136.88599694100006,34.260443427000055],[136.85084069100017,34.24925364800005],[136.83545983200023,34.24640534100011],[136.81853274800002,34.24762604400003],[136.79420006600017,34.25311920800006],[136.77515709700018,34.26186758000013],[136.77344811300006,34.273098049000126],[136.78793379000004,34.27741120000003],[136.8092554050002,34.27387116100006],[136.8296004570001,34.26654694200015],[136.841644727,34.25946686400009],[136.83961022200018,34.26605866100006],[136.83806399800014,34.27533600500011],[136.83545983200023,34.280503648000106],[136.84848066500004,34.273098049000126],[136.85621178500006,34.29417552300005],[136.84644616000017,34.30756256700006],[136.82740319100017,34.31240469000012],[136.80746504000004,34.30784739799999],[136.80982506600017,34.30109284100014],[136.8097436860002,34.29791901200018],[136.80836022200012,34.294623114000146],[136.80746504000004,34.28733958500014],[136.77344811300006,34.30784739799999],[136.75660241000017,34.296087958000115],[136.72584069100012,34.29100169499999],[136.70264733200005,34.29515208500011],[136.70826256600017,34.31098053600006],[136.72339928500017,34.33128489800008],[136.70679772200012,34.33429596600017],[136.67628014400017,34.326402085],[136.64991295700005,34.314113674000126],[136.66814212300008,34.309556382],[136.66700280000012,34.29791901200018],[136.65479576900023,34.28603750200013],[136.62289472700004,34.274603583000086],[136.60808353000007,34.264593817],[136.59253991000006,34.26264069200015],[136.57406660200004,34.280503648000106],[136.56820722700016,34.274318752000156],[136.56397545700017,34.271714585000055],[136.56153405000012,34.26837799700003],[136.56055748800023,34.25946686400009],[136.53288821700008,34.27167389500006],[136.52295983200023,34.273098049000126],[136.51775149800008,34.26121653900016],[136.51221764400023,34.25218333500008],[136.50586998800011,34.24640534100011],[136.51482181100002,34.22980377800015],[136.50294030000006,34.22907135600012],[136.47169030000012,34.23895905200014],[136.4272567070001,34.213771877000156],[136.41651451900006,34.204250393000066],[136.38428795700023,34.204250393000066],[136.33668053500017,34.184027411000145],[136.29900149800008,34.15428294500013],[136.29704837300002,34.125677802000055],[136.308360222,34.11782461100016],[136.31641686300023,34.11432526200018],[136.31902103000007,34.10883209800015],[136.31348717500012,34.09495677300005],[136.308441602,34.09003327],[136.30030358200005,34.08567942900011],[136.2911889980002,34.082505601000136],[136.28345787900017,34.081284898000106],[136.27312259200008,34.085842190000065],[136.26075280000023,34.10512929900001],[136.2526961600001,34.108587958],[136.24634850400017,34.103583075000145],[136.23023522200018,34.08209870000003],[136.21851647200012,34.07514069200015],[136.21851647200012,34.06761302299999],[136.23308353000002,34.06777578300013],[136.24382571700008,34.06415436400009],[136.25049889400012,34.056341864],[136.2526961600001,34.04344310099999],[136.270762566,34.02814362200003],[136.27979576900012,34.01732005400011],[136.27662194100006,34.012396552000055],[136.27458743600002,34.00674062700007],[136.27540123800023,33.97996653900016],[136.27320397200006,33.97142161700005],[136.25863691500004,33.96588776200004],[136.24732506600006,33.97150299700003],[136.23861738400015,33.98248932500009],[136.23218834700006,33.99315013200011],[136.2190047540001,33.981146552],[136.20484459700018,33.97142161700005],[136.20484459700018,33.96523672100007],[136.22754967500012,33.96173737200009],[136.23471113400015,33.94843170800006],[136.22852623800011,33.9383812520001],[136.2111108730002,33.944769598000036],[136.20630944100006,33.92694733300014],[136.19890384200002,33.92088450700014],[136.16480553500006,33.91616445500013],[136.16049238400004,33.913397528000175],[136.15267988400015,33.90623607000013],[136.14258873800006,33.89362213700015],[136.13697350400017,33.89057038000006],[136.12574303500017,33.8895531270001],[136.1047442250002,33.89141140000011],[136.0693171280001,33.84704388300004],[136.01707507400025,33.73389913600009],[135.9937443370002,33.68626536700005],[135.99373956985735,33.68625974353479],[135.96713260298728,33.698563544571996],[135.9508028499716,33.70393789311926],[135.93824547684724,33.71429901838492],[135.92878869004593,33.72357493713368],[135.91995201996977,33.735589707898626],[135.90243371034754,33.74750112587621],[135.86315962141933,33.78708527316685],[135.8516874530135,33.80266571734897],[135.84682986930304,33.81741933923111],[135.8465198100412,33.82496409811462],[135.84765669160296,33.83814158796399],[135.87540693618124,33.85080231387572],[135.88331343027053,33.86294627495069],[135.89137495309174,33.882686671752495],[135.90036665279874,33.88852610919268],[135.91514611220342,33.88873281476755],[135.92072716722512,33.89343536974657],[135.92553307499136,33.90108348231685],[135.95752078655508,33.91795583769182],[135.97410892108977,33.93697276498118],[135.98480594313978,33.95314748836584],[135.9906970556245,33.970329902103245],[136.0038228704291,33.99311920838481],[136.0175688010593,34.00484975830973],[136.03539716994342,34.010740871693784],[136.08722863199583,34.00944896140048],[136.09777062441484,34.01164520925907],[136.10149132656343,34.01846649773064],[136.09079430631223,34.03590729388647],[136.0857816920715,34.04996328377858],[136.10939782065284,34.126237698511076],[136.1101729679082,34.13858836516091],[136.1072274112162,34.18938629843892],[136.1180794619975,34.22840200494856],[136.11869957872258,34.24114024522608],[136.1128084662378,34.25496369112149],[136.10438520731142,34.26899384169242],[136.10087120983852,34.283437405212126],[136.10645226486022,34.29204153129156],[136.1076924992095,34.30069733331523],[136.08195763623584,34.35087514896905],[136.07389611161628,34.36353587488081],[136.0692452325815,34.37699758646944],[136.07120893824188,34.39381826410154],[136.0807174009873,34.408804429980464],[136.0956002140786,34.420018215068595],[136.11389367095617,34.42518585894017],[136.15730187408226,34.431154486690176],[136.17750735887753,34.43862173120793],[136.20267378107022,34.45882721600317],[136.21042524642806,34.472469793845974],[136.21120039278387,34.48639659342798],[136.2079447777293,34.495414129758345],[136.20251875233848,34.50151194871755],[136.18127973876895,34.50396657989374],[136.17146121586248,34.50936676686287],[136.16164269385516,34.52781525337129],[136.15363284697835,34.53383555796462],[136.14247073783443,34.53556671782978],[136.1289831887232,34.53494660110478],[136.1142037293187,34.5363935410292],[136.09699547715948,34.54249135998829],[136.07585981727667,34.552490750047994],[136.05989179856758,34.56285187441448],[136.05245039337095,34.5745824243394],[136.05353559808927,34.58900014943738],[136.0592716818426,34.60553660712874],[136.0583415058558,34.61912750902739],[136.05338056935776,34.62643972391423],[136.04097822496513,34.63375193880087],[136.0381876970046,34.63716258438576],[136.03989302024675,34.64124502174043],[136.06330244415258,34.64680023923968],[136.07234581890455,34.65630870198494],[136.0648527368643,34.677315172457284],[136.06252729689723,34.69178457349922],[136.05911665311115,34.702533271493294],[136.05508589080128,34.70845022239986],[136.0496598654104,34.71167999903277],[136.0364823746618,34.71534902613668],[136.00309940001736,34.773691718298195],[136.08195763623584,34.800925198039565],[136.10118126820086,34.81911530212956],[136.1128084662378,34.83311961517815],[136.10040612184517,34.85420360001616],[136.10211144418767,34.86505564989828],[136.11265343570741,34.87105011696927],[136.1245906921068,34.87234202726275],[136.18045291556953,34.862523505255595],[136.2405009300738,34.863117784458254],[136.31160770093456,34.87929250694363],[136.34261355966808,34.89270254168902],[136.3624573101567,34.90582835469486],[136.37010542182773,34.91616364243818],[136.38157759023366,34.92639557469609],[136.39165449375994,34.93735097916441],[136.39987104711125,34.94946910271683],[136.4072091004197,34.966884060450965],[136.41165327387952,34.98236115184575],[136.41837120956362,35.02189362229281],[136.4323238466683,35.062097887207656],[136.44317589744966,35.13183523251003],[136.4419356631005,35.14147288736386],[136.43573449135366,35.15098135010929],[136.40700239484457,35.183434150565645],[136.39878584239258,35.20260610568725],[136.51516116835322,35.23190664297711],[136.52833865820256,35.2294261742786],[136.5387772969348,35.222759915437834],[136.54900923099117,35.20420807524239],[136.5581559594299,35.19402781802934],[136.58466596875954,35.174390774014924],[136.6180489443034,35.15800934505522],[136.6734460797728,35.13881154971334],[136.68414310092342,35.12126740256859],[136.69825076675957,35.10692719183639],[136.71008467037117,35.0913984244978],[136.7245023945699,35.05915233051569],[136.7359745629757,35.04168569593814]]]]}},{"type":"Feature","properties":{"iso_3166_2":"JP-20","name":"Nagano","name_alt":null,"name_local":"長野県","type":"Ken","type_en":"Prefecture","region":"Chubu","postal":"NN","region_code":"JPN-CHB"},"geometry":{"type":"Polygon","coordinates":[[[138.67952518074247,36.73065237081019],[138.6609216664017,36.72416697822342],[138.6295540706638,36.71822418889522],[138.61358605375335,36.71264313387354],[138.60345747338363,36.70654531491434],[138.57973799021602,36.701584378416385],[138.54185916616763,36.69812205688734],[138.51829471173153,36.69251516434332],[138.50744266184927,36.68887197476184],[138.4992261093974,36.68205068629007],[138.49674563979943,36.671069444299405],[138.4988643741915,36.6561091168422],[138.49390343589482,36.645773830897525],[138.4842916203619,36.63848745443241],[138.44692955935164,36.63091685622791],[138.43654259656353,36.62543915489309],[138.4306514831793,36.61812693910696],[138.4278609561182,36.60794668189382],[138.42408857622678,36.59929087987015],[138.41912763882942,36.59084178342155],[138.41132449842684,36.58076487899589],[138.40470991373155,36.57037791620789],[138.39897382997822,36.54552155237775],[138.38378095942375,36.502733465976604],[138.37897505075796,36.48314809790642],[138.37680464132114,36.46782603614264],[138.38062869715662,36.44847321206913],[138.38889692555267,36.43452057496461],[138.40858564730974,36.4186817492633],[138.43840294763788,36.400284938698945],[138.450650263299,36.397571926003565],[138.46413781061142,36.39811452926213],[138.48170779797653,36.403359687499574],[138.4992261093974,36.40230032030357],[138.5141089206901,36.40434153943053],[138.54051557813142,36.41410838549365],[138.55415815597405,36.41757070612323],[138.56904096906544,36.41839752932245],[138.5837687516265,36.416898912554814],[138.60097700378566,36.411679591839714],[138.61482628810273,36.400284938698945],[138.6236629581789,36.38395518748192],[138.6283138372138,36.33744639713345],[138.6295540706638,36.332252915739446],[138.63265465698686,36.32390717207832],[138.6298641299257,36.31065216696393],[138.62211266456785,36.30011017544419],[138.6115189962046,36.290446682168664],[138.59281212817717,36.27941376423385],[138.58702436668113,36.270215358951674],[138.58857466029224,36.254970812453024],[138.5950858913008,36.226988022978816],[138.60469770683375,36.20497386305334],[138.60469770683375,36.18637034781332],[138.60025353427318,36.17621592902191],[138.59260542170284,36.16978221327855],[138.57555219917458,36.169549669281764],[138.56811079307863,36.16549306944955],[138.57028120341482,36.15334910747529],[138.57539717044307,36.14347890952408],[138.58950483627922,36.13249766753333],[138.6021138862468,36.12534048137812],[138.61327599539084,36.116400458514335],[138.61389611211592,36.10497996695187],[138.61265587776654,36.084257717319815],[138.61560143355933,36.06255361575671],[138.61467125937116,36.051882433027856],[138.61188073141057,36.042089749442425],[138.61451622884078,36.031030992186516],[138.62784874922033,36.01702667913793],[138.700919223943,35.96953603775788],[138.6995239608621,35.94982147937779],[138.7156986842469,35.89646556213603],[138.66278201657684,35.8594393988092],[138.64552208937295,35.85419424147105],[138.63446333211704,35.85326406548424],[138.62299116371122,35.85398753499672],[138.612965936129,35.85817332603813],[138.60428429568373,35.866803290539366],[138.5999434750113,35.87796540058275],[138.59467247925153,35.88623362897883],[138.58526736929366,35.89196971273205],[138.57286502490092,35.894579373539244],[138.55679365520302,35.89563873983596],[138.53193729137286,35.89954031003728],[138.51891483025526,35.89954031003728],[138.466308221847,35.88819733284066],[138.45276899589237,35.890316067232675],[138.44429406102205,35.89775747332871],[138.4416585626925,35.907653509701646],[138.44150353396088,35.9181179877549],[138.44067671076152,35.92514598180162],[138.4368526549261,35.932742418427836],[138.4281710153801,35.939150295749585],[138.3986637716157,35.950906684096225],[138.3715336446619,35.95728872299617],[138.36026818273035,35.95780548783296],[138.34962283662458,35.95098419936127],[138.33825402190558,35.93884023738704],[138.28719770710848,35.86266917634137],[138.27887780186904,35.854891873461185],[138.2697310734302,35.849310818439506],[138.257122024362,35.84809642251187],[138.2354179218995,35.85853506124411],[138.22549604710485,35.85796662046317],[138.216504348297,35.85039602315794],[138.18017581606108,35.786730659292516],[138.17971072806762,35.777609768376095],[138.18637698780765,35.76556915918934],[138.19769412658263,35.75670665069134],[138.20265506398,35.74709483515849],[138.19753909695174,35.73668203394868],[138.17381961468345,35.713220934098814],[138.16854861892352,35.69880320900083],[138.17211429324004,35.67472199242596],[138.1820361680347,35.64782440946894],[138.19614383387085,35.627851466871704],[138.1868420758011,35.607387600557246],[138.18188113840387,35.58697540928773],[138.17707522973797,35.57855215126074],[138.16896203007354,35.57074900995883],[138.1543892762441,35.56682160133579],[138.1432271671,35.56095632637337],[138.13594078973563,35.547081204533896],[138.1387313167968,35.535040595347226],[138.1396614927836,35.52271576621965],[138.1380595241277,35.51002920188617],[138.13361534976855,35.492252508946194],[138.1367159360915,35.480418606233684],[138.14043664003884,35.46987661381468],[138.1387313167968,35.4600580918075],[138.13051476524413,35.447836616366686],[138.11325483624165,35.434013170471445],[138.10943078040611,35.423574530839915],[138.11067101475544,35.41401439125113],[138.11826744958313,35.40414419240054],[138.1236934749739,35.39442902318086],[138.12679406129695,35.38453298590855],[138.1230733582488,35.37086457054352],[138.1125313658298,35.35737702143243],[138.0855045916635,35.33696483016274],[138.06767622277937,35.32973013054104],[138.03946089110724,35.324355781094425],[138.02778201712636,35.3190331084912],[138.01460452727707,35.30763845535043],[138.00530276920733,35.297173977297206],[137.9961560407686,35.29128286391307],[137.98468387326204,35.28652863209069],[137.95936242143853,35.28195526832096],[137.9398287293124,35.27309275982296],[137.8959037622488,35.24332713543893],[137.87543989503513,35.23567902286857],[137.83802615808065,35.20526744243844],[137.80557335762438,35.19451874444445],[137.7513131037167,35.196224066787266],[137.68206668482958,35.20870392554568],[137.6623779639719,35.20901398390822],[137.64341271442515,35.20480235444509],[137.6296667828957,35.19759349234582],[137.6167476745655,35.19265839337021],[137.58822228363152,35.18847260232869],[137.57514814656963,35.18816254306688],[137.56522627177492,35.19312348136356],[137.5556144553429,35.201934312118794],[137.53871626244558,35.23717763873702],[137.54786298998505,35.27035390870586],[137.56367597906308,35.301411445182055],[137.57261600192697,35.3132970238386],[137.57840376162426,35.32843821934836],[137.5756132345631,35.34512970577134],[137.5644511254191,35.37112295206262],[137.5684818868296,35.3787193868902],[137.57623335218744,35.3818974884783],[137.59767907133198,35.38029551892308],[137.60444868385957,35.38450714838612],[137.6057405950524,35.39398977270986],[137.59349328029055,35.42409129477741],[137.59070275322938,35.43631277111743],[137.59473351463998,35.453288479279905],[137.59473351463998,35.46956655545213],[137.5852250509953,35.49509471285069],[137.56042036400856,35.517625636713746],[137.53974979121983,35.5270565859926],[137.53416873619818,35.53049306909983],[137.5315849138127,35.53354197857939],[137.52817427002657,35.53922638638855],[137.50998416593643,35.59002431876729],[137.5118445170108,35.62245127990266],[137.51075931229246,35.63456940435455],[137.50331790619634,35.6466875270078],[137.4805285990156,35.669270127714185],[137.47195031135777,35.68164663278583],[137.444045038048,35.73337474205064],[137.43474327997836,35.74223725054867],[137.42368452362183,35.74872264313544],[137.3957792503121,35.755595608450534],[137.3844621124365,35.76156423620054],[137.37764082216626,35.76980662707419],[137.36890750487737,35.77745473874518],[137.35712527900847,35.78143382421163],[137.33325076710918,35.78381094012278],[137.3259643897448,35.78988292155964],[137.3232255386277,35.8016393090069],[137.33836673413742,35.82453196897521],[137.37593549982347,35.86850861288218],[137.39278201677655,35.880575060490656],[137.41112715139684,35.8865953641847],[137.42802534429416,35.88638865771037],[137.4490059754454,35.88406321954196],[137.46280358291892,35.889385891245865],[137.47350060406967,35.90049632444581],[137.48455936132547,35.91667104783056],[137.5199060407312,35.95276703517047],[137.55840498330332,36.00118785343662],[137.57731855690588,36.03123769776158],[137.58212446467223,36.0438984245726],[137.58212446467223,36.056817532003464],[137.5723576186092,36.07257884423831],[137.5577848647796,36.08482615810064],[137.5447624045613,36.10012238234202],[137.53943973195805,36.11789907528208],[137.54646772690404,36.13851797122737],[137.561350539096,36.16559642223703],[137.56486453656913,36.176190089700896],[137.56243574381455,36.18957428602451],[137.56181562708946,36.19825592736916],[137.56290083180784,36.21055491807505],[137.57220258987758,36.226574611828795],[137.5979891296945,36.25086253487808],[137.60630903493393,36.26039683694444],[137.61194176679913,36.27106802057273],[137.62279381668122,36.300161852287715],[137.62449913992333,36.31499298853555],[137.61829796817665,36.33059927024007],[137.60822106285173,36.34705821446502],[137.56538130140592,36.377004706002396],[137.5805741719604,36.395143134148356],[137.6105465028188,36.41385000307517],[137.6207784359761,36.423642687559976],[137.62821984297136,36.43452057496461],[137.64310265516337,36.468446152867614],[137.6567969098495,36.4919589304603],[137.67090457568554,36.50671255144306],[137.67648562980787,36.518856513417404],[137.6749353370961,36.52836497706204],[137.67152469331,36.53911367415674],[137.67571048435127,36.54877716743235],[137.68578738787755,36.559344998273076],[137.70180708163156,36.57172150334472],[137.719480421784,36.58983409306896],[137.72537153516822,36.604794420526076],[137.72831709186028,36.62140839348257],[137.72971235584055,36.64463694933576],[137.7340531756136,36.66804637324148],[137.73265791163334,36.77480988187051],[137.7753426452469,36.78736725499485],[137.78790001837115,36.794240221209236],[137.80107750911975,36.80338694874871],[137.8371993348814,36.84803538712336],[137.8453125354452,36.86136790570424],[137.84996341358072,36.87371857415283],[137.84794803287537,36.89242544218044],[137.84887820886217,36.900952052994825],[137.85321902863524,36.90916860634613],[137.86050540599973,36.91534394057038],[137.86872195935086,36.91924550987241],[137.8752331885608,36.92092499379342],[137.8847416531047,36.92213939151969],[137.89900434767242,36.92110586184603],[137.9124918967836,36.9182119819973],[137.92959679615512,36.91087392778957],[137.94261925727295,36.906998196009965],[137.9587423038143,36.90599050655666],[137.9733150576438,36.90363922816786],[137.989334752297,36.89697296842775],[137.99848147983647,36.89041006147508],[138.00545779793907,36.88291697853572],[138.00835167868695,36.874338690877835],[138.0092818537745,36.863589992883846],[138.00561282756985,36.838785304997856],[138.00742150270014,36.831602281320215],[138.01196902894748,36.82576284388014],[138.04421512292947,36.80718516706182],[138.05806440634717,36.81044078211633],[138.0735673361636,36.82664134392289],[138.08534956293192,36.83317841245383],[138.100439080699,36.83547801399919],[138.14601769416117,36.83713165949848],[138.16405276862037,36.839741319406386],[138.17847049371824,36.84436636001945],[138.2081327662142,36.857698880399],[138.2154191426793,36.859765937048394],[138.22270552004363,36.8587065698523],[138.234281041237,36.856045234000334],[138.2521610860653,36.84865550384845],[138.26394331283365,36.85082591418461],[138.27066124941712,36.85837067306804],[138.2737618348408,36.884053860097595],[138.27763756662034,36.89531932202908],[138.28626753112167,36.90766999047767],[138.29717125874657,36.91495636694279],[138.3235779161878,36.92560171214927],[138.35303348220947,36.9660126817399],[138.36574588406535,36.97740733488058],[138.3820756370809,36.986166489691726],[138.42424360585767,37.00166942040735],[138.481397739614,37.01417511668828],[138.49969119739086,37.0153895135152],[138.5193799182486,37.01355499906401],[138.53586469909663,37.01004100249028],[138.55307295125567,37.002082831557374],[138.55524336159186,37.000635890733776],[138.55942915263324,36.98926707601473],[138.57446699355688,36.92296621381965],[138.58154666624557,36.90854848872178],[138.60459435404624,36.886482651952775],[138.64800255807154,36.85806061470558],[138.65761437360436,36.84997325346285],[138.66681277888654,36.835839749205064],[138.6696033059477,36.822584744090676],[138.66681277888654,36.763234361576565],[138.67952518074247,36.73065237081019]]]}},{"type":"Feature","properties":{"iso_3166_2":"JP-22","name":"Shizuoka","name_alt":"Sizuoka","name_local":"静岡県","type":"Ken","type_en":"Prefecture","region":"Chubu","postal":"SZ","region_code":"JPN-CHB"},"geometry":{"type":"Polygon","coordinates":[[[138.2622896673343,35.29376333351104],[138.2839937679979,35.29895681400578],[138.30461266484258,35.30190237069783],[138.32822879522274,35.29988698999259],[138.3429565777838,35.29205801026896],[138.352568394216,35.27836375648221],[138.36745120730734,35.21867747718383],[138.37494428934752,35.2037946640925],[138.38347090106117,35.19030711498132],[138.39830203730918,35.181418768961066],[138.4189726100979,35.16511485436703],[138.43044477760435,35.15930125624794],[138.44336388593462,35.15697581628086],[138.4579366397641,35.15728587554267],[138.47235436396272,35.16167837215917],[138.48739220578562,35.17216868683536],[138.49783084541724,35.18152212174854],[138.50341190043883,35.188446763906995],[138.5071326025875,35.19428620044778],[138.50899295456117,35.19940216747602],[138.51054324817233,35.20746369119641],[138.51007816017886,35.21919424112136],[138.50728763221844,35.231260687830456],[138.5040320171638,35.25676300680729],[138.5056856626632,35.2942284215045],[138.51627933192566,35.32973013054104],[138.5232556500282,35.38135488521982],[138.52769982258877,35.39685781503616],[138.53395267117878,35.4096735705788],[138.5434094588794,35.41703746230897],[138.5564835959412,35.41747671188071],[138.5932255393272,35.39210358321378],[138.61265587776654,35.383628648343375],[138.634670037692,35.38112234122303],[138.6483126164341,35.373913479123786],[138.65730431524184,35.365025133103416],[138.67239383390825,35.3561367861837],[138.69719852089497,35.350762436737085],[138.82969689339694,35.36466339789746],[138.90033857626418,35.3809414740698],[138.96457238181,35.38840871768815],[138.97490766775456,35.38670339624474],[138.98658654173556,35.38114818054413],[138.98751671772237,35.37381012633631],[138.98679324820978,35.35618846302714],[138.98834354092162,35.34848867451271],[138.99020389199603,35.342390855553504],[138.9936145366815,35.33370921510823],[138.99867882686635,35.312961127054365],[139.00028079642152,35.301411445182055],[139.00028079642152,35.29055939440059],[138.99805871014138,35.284771632904466],[138.99340783110642,35.27686513881508],[138.9771297549342,35.261672268260554],[138.97061852392574,35.24976085118237],[138.96860314322043,35.23025299747778],[138.97356408061773,35.20495738407598],[138.98389936656253,35.18299490009457],[139.0026062363886,35.15780263948028],[139.01237308155243,35.146795559067726],[139.01934939965497,35.14116282810207],[139.0287545114116,35.13555593555796],[139.05190555199954,35.12870880776529],[139.0728861840501,35.124833075086315],[139.09443084024332,35.11747362336345],[139.0884726750001,35.110057770000054],[139.07673175500014,35.075094009000026],[139.07587403600013,35.05317728600002],[139.1059676440001,35.049383856000134],[139.10175644700007,35.03054164000014],[139.09709101300007,35.011495013000086],[139.0865480910001,34.99730546900014],[139.100602546,34.974755422000044],[139.13070722700007,34.96515534100013],[139.1425887380001,34.94228750200011],[139.14828535200007,34.9050967470001],[139.14087975400003,34.87055084800002],[139.119297985,34.8673894880001],[139.099072944,34.85611941800002],[139.08838951900015,34.842271226000065],[139.08399498800014,34.82835521000007],[139.07481770100003,34.80896906900011],[139.0590859360001,34.79257003200013],[139.05171284900013,34.77778765100004],[139.04298346700006,34.76756908400009],[139.0263272690001,34.76424660000009],[139.0189891720001,34.75428978500014],[139.0109716230001,34.746621126000036],[138.99875872200005,34.73328434200002],[139.0026147800001,34.721828518000024],[138.9970809250001,34.715033270000106],[138.9887801440001,34.70140208500007],[138.98560631600003,34.683294989000046],[138.9875594410001,34.66478099200012],[138.99366295700008,34.64984772300008],[138.9824324880001,34.64447663000004],[138.97266686300014,34.645819403000104],[138.96485436300014,34.65253327000008],[138.9408259810001,34.661107187000084],[138.89597911200008,34.62904577600003],[138.86094893900008,34.61349798100014],[138.835297071,34.59589264500008],[138.81999759200005,34.60236237200007],[138.806000196,34.61367422100005],[138.79468834700003,34.62628815300005],[138.7713901310001,34.647313953000065],[138.7778426440001,34.663316148000064],[138.7739363940001,34.67096588700011],[138.76685631600003,34.67621491100007],[138.7590438160001,34.67845286700006],[138.7519637380001,34.682074286000045],[138.74659264400015,34.691473700000046],[138.74594160200002,34.70917389500005],[138.74400124200014,34.72889189500003],[138.7562422850001,34.73747022500007],[138.76182943900005,34.74828171400014],[138.77426191500007,34.751288153000104],[138.75876118800005,34.78270405300012],[138.74812686400008,34.81320925300011],[138.75789301600008,34.829702497000085],[138.76221764400015,34.84642161700009],[138.7602645190001,34.84906647300008],[138.76050866000003,34.8693708350001],[138.753838793,34.87946727500014],[138.7629955810001,34.89398688000006],[138.7767874000001,34.904828377000115],[138.78980553500003,34.906805731000105],[138.77849368600005,34.922023830000086],[138.7739363940001,34.93162669500009],[138.76369264600015,34.95605640500008],[138.76189355900016,34.979902605000035],[138.77680217,35.003160568000084],[138.78608990100008,35.026438762000026],[138.8265951470001,35.023625219000024],[138.85541578700014,35.019026928000045],[138.8751275990001,35.02009448400011],[138.8938094410001,35.02000560100004],[138.907562696,35.03066640800006],[138.85343549600015,35.07822164400008],[138.83853700300006,35.099525698],[138.8033316850001,35.12190930800011],[138.74422004400003,35.13484289300007],[138.69618557600006,35.13897567500007],[138.66363181200012,35.12714398500006],[138.6372695660001,35.11598535200005],[138.58678602100008,35.11436020000005],[138.55408217500008,35.09606937900011],[138.52765127300006,35.050808017000094],[138.49788298200008,35.03256950200006],[138.49488309400016,35.00073149500011],[138.50701000400005,34.991072252000066],[138.50702289100008,35.01189308800008],[138.52098226200008,35.01937347200004],[138.53161744200014,35.016923751000036],[138.51429303400005,34.98017780400008],[138.4683627440001,34.959069567000085],[138.429755054,34.94473446500007],[138.40050460700002,34.93249572800005],[138.36710789500006,34.91730943900012],[138.35335261200015,34.90411501600008],[138.34686565000004,34.88818873000011],[138.33643639400015,34.87409088700008],[138.32829837300005,34.85529205900005],[138.33008873800014,34.845404364000046],[138.34083092500015,34.8264834660001],[138.32588911900012,34.807908231000084],[138.31487266100015,34.798368680000095],[138.29322798300007,34.765774415000124],[138.24950579000006,34.73902319000004],[138.21598919100012,34.712282661000074],[138.20167076900015,34.660101630000014],[138.19361412900003,34.64150625200003],[138.20093834700003,34.62156810100004],[138.22505168600009,34.61630119900008],[138.24032772700002,34.60256107900008],[138.2332897610001,34.594588770000115],[138.19017637400015,34.601227717000086],[138.04723701,34.65463981500011],[137.96758503500013,34.666540387000026],[137.8927975680001,34.667696567000036],[137.79216556100005,34.63939036700012],[137.68350648400013,34.670754599000105],[137.595062696,34.67719147300005],[137.54699814000008,34.67728852500011],[137.46790343229287,34.67096924919889],[137.4687463731466,34.68692698799015],[137.46791954994717,34.693334866211075],[137.46466393399328,34.706822415322165],[137.46326867091238,34.72521922498723],[137.46667931469864,34.75245270382922],[137.47153690020775,34.77090119123699],[137.48843509310495,34.809761868115714],[137.49758182244312,34.81978709569793],[137.5119478697983,34.82622081144129],[137.56367597906308,34.83777049421289],[137.57189253061574,34.84097443332345],[137.57917890798018,34.845031033155664],[137.60915123883854,34.86908641220819],[137.6179879089148,34.87926666942124],[137.6251192566483,34.89657827436787],[137.63333580910023,34.911719468978305],[137.6704394876922,34.947221178014956],[137.6761755723448,34.96148387348194],[137.68485721189074,35.00251495979754],[137.69777632112033,35.018095404879006],[137.75348351495222,35.063183091926135],[137.7702266791179,35.08116649044118],[137.7869698432836,35.11336090847914],[137.79611657082307,35.13646027312305],[137.7979769227967,35.16232432730587],[137.80557335762438,35.19451874444445],[137.83802615808065,35.20526744243844],[137.87543989503513,35.23567902286857],[137.8959037622488,35.24332713543893],[137.9398287293124,35.27309275982296],[137.95936242143853,35.28195526832096],[137.98468387326204,35.28652863209069],[137.9961560407686,35.29128286391307],[138.00530276920733,35.297173977297206],[138.01460452727707,35.30763845535043],[138.02778201712636,35.3190331084912],[138.03946089110724,35.324355781094425],[138.06767622277937,35.32973013054104],[138.0855045916635,35.33696483016274],[138.1125313658298,35.35737702143243],[138.1230733582488,35.37086457054352],[138.12679406129695,35.38453298590855],[138.1236934749739,35.39442902318086],[138.11826744958313,35.40414419240054],[138.11067101475544,35.41401439125113],[138.10943078040611,35.423574530839915],[138.11325483624165,35.434013170471445],[138.13051476524413,35.447836616366686],[138.1387313167968,35.4600580918075],[138.14043664003884,35.46987661381468],[138.1367159360915,35.480418606233684],[138.13361534976855,35.492252508946194],[138.1380595241277,35.51002920188617],[138.1396614927836,35.52271576621965],[138.1387313167968,35.535040595347226],[138.13594078973563,35.547081204533896],[138.1432271671,35.56095632637337],[138.1543892762441,35.56682160133579],[138.16896203007354,35.57074900995883],[138.17707522973797,35.57855215126074],[138.18188113840387,35.58697540928773],[138.1868420758011,35.607387600557246],[138.19614383387085,35.627851466871704],[138.21371382123584,35.61178009717372],[138.216504348297,35.602064927954046],[138.22177534405688,35.57276439156337],[138.2369682146114,35.53516978655634],[138.24130903528373,35.51778066724404],[138.24332441598892,35.47478587526794],[138.24130903528373,35.46408885321793],[138.23479780517454,35.444141750841055],[138.23417768844962,35.43411652325892],[138.23789839059822,35.40843333622945],[138.2354179218995,35.393137111988096],[138.2265812518233,35.3675572777461],[138.22642622309178,35.355981757452156],[138.23045698540147,35.344225369105516],[138.23200727811337,35.33350250953316],[138.23138715958964,35.32368398752598],[138.23185224758316,35.313917141462895],[138.23588300989297,35.303685208305694],[138.2465800310436,35.29712230135314],[138.2622896673343,35.29376333351104]]]}},{"type":"Feature","properties":{"iso_3166_2":"JP-16","name":"Toyama","name_alt":null,"name_local":"富山県","type":"Ken","type_en":"Prefecture","region":"Chubu","postal":"TY","region_code":"JPN-CHB"},"geometry":{"type":"Polygon","coordinates":[[[137.73265791163334,36.77480988187051],[137.7340531756136,36.66804637324148],[137.72971235584055,36.64463694933576],[137.72831709186028,36.62140839348257],[137.72537153516822,36.604794420526076],[137.719480421784,36.58983409306896],[137.70180708163156,36.57172150334472],[137.68578738787755,36.559344998273076],[137.67571048435127,36.54877716743235],[137.67152469331,36.53911367415674],[137.6749353370961,36.52836497706204],[137.67648562980787,36.518856513417404],[137.67090457568554,36.50671255144306],[137.6567969098495,36.4919589304603],[137.64310265516337,36.468446152867614],[137.62821984297136,36.43452057496461],[137.6207784359761,36.423642687559976],[137.6105465028188,36.41385000307517],[137.5805741719604,36.395143134148356],[137.56538130140592,36.377004706002396],[137.52626224210877,36.387805080839826],[137.47753136637937,36.40604686087397],[137.41422773682052,36.41472850221854],[137.38818281458526,36.422996731513905],[137.35759036700182,36.43679433898754],[137.34131229082948,36.43968821883618],[137.3285998880744,36.43625173572903],[137.31867801327968,36.42919790326059],[137.30761925692315,36.423513495451516],[137.29490685416795,36.42113638043955],[137.28669030171602,36.42503794974161],[137.2850883321608,36.431109931178355],[137.2860185081476,36.4373627788691],[137.28824059532712,36.444649156233595],[137.28482994974235,36.45079865203621],[137.27630333892785,36.45224559196052],[137.26421105379706,36.450023504780944],[137.2001322778823,36.42891368331985],[137.18767825664622,36.42966299125405],[137.17589603077715,36.43201426874356],[137.1611682482161,36.43684601493166],[137.14576867118723,36.43271189983432],[137.13259118133794,36.42521881779422],[137.08127648322306,36.37896841076352],[137.06680708218113,36.36914988875634],[137.05409468032525,36.36266449616957],[137.04649824369892,36.35700592678202],[137.04153730720088,36.35080475503534],[137.03900516165885,36.340391953825616],[137.03528445861087,36.330495917452595],[137.02680952374044,36.31948883704021],[137.01683597210246,36.31346853334617],[137.0052087749649,36.30819753668692],[136.99849083928075,36.303520820129705],[136.97709679608027,36.2833670112785],[136.95797651600333,36.273315945274646],[136.9462459660785,36.27608063391409],[136.94283532139286,36.284038804846915],[136.9485714051462,36.30305573213636],[136.94872643387782,36.31111725495728],[136.94485070209817,36.31889455783758],[136.93570397365949,36.32656850793029],[136.9219063661858,36.332821357419675],[136.89891035432936,36.33742055871184],[136.88139204290837,36.33783397076115],[136.85048953696258,36.34279490815845],[136.83746707584487,36.33757558924202],[136.82863040576854,36.32858388953491],[136.8227392932837,36.31499298853555],[136.8193286476989,36.303159084923834],[136.8145227399325,36.294477444478446],[136.80584109858773,36.28899974224433],[136.79726281093002,36.28770783105156],[136.7732332702991,36.291996974880476],[136.76439660022288,36.32155589548819],[136.76641198092807,36.33450084134077],[136.77369835829256,36.35979645384327],[136.7732332702991,36.376591294852375],[136.76904747925767,36.391009019950275],[136.76207116115512,36.40279124581937],[136.75757531085185,36.41899180852511],[136.75835045810715,36.44036001240468],[136.76842736163343,36.49663564701751],[136.77380171108007,36.512862047245704],[136.77907270683994,36.524799302745606],[136.78362023308728,36.54340281798562],[136.7828450867313,36.55665782310004],[136.77276818320502,36.588593857820314],[136.7699776552446,36.603399156545805],[136.7692025088886,36.62153758379239],[136.78703087777274,36.66466156697777],[136.7876509953971,36.675100205709924],[136.78610070178593,36.68489289019476],[136.78129479401952,36.69543488171439],[136.77834923732735,36.70587352134592],[136.77710900297808,36.71894765930696],[136.78408532108068,36.7274225941774],[136.80429080587595,36.7426154647319],[136.81173221197196,36.75264069321341],[136.82444461472716,36.79054535658298],[136.82733849457577,36.813102117968384],[136.83281619680997,36.829483547827465],[136.8597912950322,36.887025255211285],[136.87157352090122,36.90242483224023],[136.8941044456637,36.92570506403749],[136.9046464380827,36.93309479418946],[136.91487837123975,36.93730642275321],[136.9268673035831,36.93810740843011],[136.93818444235808,36.937590644492616],[136.950741814583,36.93965770114201],[136.97926720641635,36.951491603854436],[136.99141116839064,36.953403631772204],[137.00861941965053,36.95288686783471],[137.04262251191943,36.9562716740985],[137.04442499164713,36.95640420176636],[137.02741452300012,36.93884298800009],[137.025040116,36.91394722700005],[136.987741561,36.871021637000126],[137.00554446700005,36.83592357000009],[137.05291460800004,36.811043985000055],[137.0806963020001,36.79008655300004],[137.12802035700008,36.77683954300008],[137.15699303500003,36.76080963700005],[137.19728775100015,36.758124588000044],[137.24144195900016,36.76506775100003],[137.29867296700007,36.75700875800007],[137.33334435900014,36.7627260670001],[137.35053007200014,36.7823090980001],[137.38360579600015,36.80014545500009],[137.3949054680001,36.827222804000144],[137.40835627700005,36.8452037480001],[137.41297129300006,36.86201101800012],[137.4195314380001,36.8773354570001],[137.413764539,36.896892108000145],[137.42710766900007,36.92201115800006],[137.44760175900007,36.9335391300001],[137.4993469650001,36.955741617000115],[137.5867332050001,36.969893864000085],[137.6145638948774,36.9751081741656],[137.6167476745655,36.969216619951084],[137.63736657141015,36.950664781554394],[137.67167972204157,36.93495514616299],[137.68454715442766,36.92591177051182],[137.69477908668546,36.911959133407294],[137.73265791163334,36.77480988187051]]]}},{"type":"Feature","properties":{"iso_3166_2":"JP-01","name":"Hokkaido","name_alt":"Ezo|Yeso|Yezo","name_local":"北海道","type":"Do","type_en":"Circuit","region":"Hokkaido","postal":"HK","region_code":"JPN-HKK"},"geometry":{"type":"MultiPolygon","coordinates":[[[[139.8029077480002,41.366359768000095],[139.81153405000012,41.364488023000106],[139.81487063900013,41.36461009300008],[139.81373131600017,41.3585065780001],[139.80616295700023,41.353379624000084],[139.79932701900012,41.352118231000176],[139.79672285200004,41.353867906000076],[139.7930607430001,41.358669338000155],[139.79582767000014,41.36318594000004],[139.8029077480002,41.366359768000095]]],[[[139.34815514400023,41.524237372000144],[139.35572350400017,41.52216217700011],[139.372894727,41.52216217700011],[139.37826582100016,41.519232489],[139.38184655000023,41.513576565],[139.37427819100017,41.504339911000145],[139.34555097700004,41.493353583],[139.34083092500012,41.49750397300012],[139.33643639400023,41.51113515800007],[139.33643639400023,41.51850006700006],[139.34034264400023,41.523830471000124],[139.34815514400023,41.524237372000144]]],[[[139.49390709700012,42.07884349200002],[139.45533287900005,42.051581122000115],[139.44564863400015,42.05483633000016],[139.43539472700004,42.06293366100009],[139.429453972,42.07379791900014],[139.43238366000006,42.08510976800015],[139.42725670700023,42.09393952],[139.42505944100006,42.102687893000066],[139.42505944100006,42.122992255000085],[139.4226994150001,42.13149648600002],[139.41285241000017,42.14398834800012],[139.41081790500002,42.153998114],[139.41431725400005,42.17251211100002],[139.42383873800011,42.19159577],[139.43702233200005,42.20722077000009],[139.45215905000023,42.21531810100011],[139.46371503999998,42.216253973],[139.48552493600002,42.22113678600006],[139.497325066,42.222235419000114],[139.5091251960001,42.225775458],[139.538340691,42.240668036000145],[139.54851321700008,42.243353583000115],[139.56421959700006,42.23175690300012],[139.55396569100012,42.211574611000074],[139.5206811860002,42.174505927000055],[139.51368248800023,42.14817942900005],[139.51270592500023,42.12372467700011],[139.50896243600013,42.100816148000106],[139.49390709700012,42.07884349200002]]],[[[145.29737389400023,43.52265045800006],[145.28353925900015,43.51788971600017],[145.27320397200006,43.52236562700013],[145.2768660820001,43.53815338700018],[145.28785241000006,43.54751211100002],[145.31869550900004,43.55776601800012],[145.33204186300011,43.56541575700008],[145.202403191,43.61383698100015],[145.28695722700016,43.60101959800012],[145.31153405000018,43.593329169000114],[145.34441165500007,43.57591380400014],[145.36036217500018,43.56476471600003],[145.3628035820001,43.55487702],[145.35010826900023,43.54962799700003],[145.31202233200023,43.54218170800014],[145.30420983200017,43.53473541900017],[145.29737389400023,43.52265045800006]]],[[[144.45508873800006,43.94220612200017],[144.44898522200018,43.94204336100002],[144.44825280000023,43.94220612200017],[144.45508873800006,43.94220612200017]]],[[[143.97584069100017,44.14826080900018],[143.94044030000018,44.13914622599999],[143.89649498800023,44.14590078300013],[143.81373131600017,44.168402411000116],[143.81763756600017,44.17560455900015],[143.8362736340001,44.17593008000007],[143.8595483730002,44.17275625200001],[143.8815210300002,44.16669342700011],[143.89649498800023,44.158148505],[143.9117944670002,44.15228913000006],[143.9572046230002,44.15200429900001],[143.97584069100017,44.14826080900018]]],[[[141.3048608730002,44.41299062700001],[141.29395592500012,44.41299062700001],[141.29550214900004,44.42169830900009],[141.3048608730002,44.42670319200015],[141.3096623060001,44.42995840100009],[141.3121850920002,44.434190171000026],[141.3278100920002,44.44464752800009],[141.32805423300013,44.43976471600003],[141.33611087300008,44.43272532800013],[141.32349694100017,44.417629299000126],[141.3048608730002,44.41299062700001]]],[[[141.42912845100014,44.43882884300014],[141.41578209700006,44.42670319200015],[141.39747155000006,44.429348049000126],[141.39201907600014,44.439032294000086],[141.4039005870001,44.44102610900005],[141.40992272200018,44.444159247000115],[141.4195255870001,44.44537995000003],[141.42912845100014,44.43882884300014]]],[[[141.26840254000015,45.101019598],[141.251231316,45.09918854400003],[141.23536217500006,45.10248444200006],[141.18181399800008,45.12661367400007],[141.15007571700002,45.14712148600002],[141.131114129,45.170152085],[141.14551842500006,45.18976471600014],[141.14087975400005,45.196030992000104],[141.1355086600001,45.20612213700015],[141.13184655000023,45.21027252800012],[141.16716556100008,45.23997630400014],[141.17969811300006,45.24437083500011],[141.20264733200017,45.24909088700004],[141.23519941500004,45.24127838700004],[141.26832116000017,45.22553131700009],[141.29297936300023,45.20652903900016],[141.32715905000023,45.17234935099999],[141.3356225920002,45.15778229400014],[141.32846113400015,45.147650458],[141.31641686300023,45.13792552300005],[141.3100692070001,45.12457916900006],[141.30445397200012,45.12018463700015],[141.26840254000015,45.101019598]]],[[[141.00660241000006,45.44041575700005],[141.02003014400012,45.43984609600007],[141.03532962300008,45.446234442],[141.05274498800023,45.450425523000135],[141.0690210300002,45.44269440300003],[141.07357832100004,45.42470937700007],[141.05909264400006,45.32196686400006],[141.04957116000017,45.29291413],[141.03565514400012,45.26487864800008],[141.02906334700006,45.278509833000115],[141.02995853000002,45.283921617000075],[141.03565514400012,45.29218170800006],[141.01050866000006,45.32778554900001],[140.99887129000004,45.35000234600007],[140.99415123800011,45.37103913],[141.00098717500012,45.419134833000086],[140.996348504,45.43024323100009],[140.96680748800023,45.46344635600012],[140.97413170700023,45.46771881700012],[140.98064212300002,45.46893952000015],[140.98609459700018,45.4674339860001],[140.99048912900017,45.463364976000136],[140.99317467500023,45.45880768400009],[141.00660241000006,45.44041575700005]]],[[[142.01775149800014,45.45571523600002],[142.05665123800011,45.40204498900012],[142.09652753999998,45.372300523000106],[142.18311608200017,45.325995184000035],[142.22120201900023,45.29962799700003],[142.53931725400005,45.01845937700001],[142.61426842500006,44.90387604400003],[142.63070722700016,44.88373444200009],[142.66570071700008,44.86664459800012],[142.7140405610002,44.80621979400003],[142.907481316,44.64740631700006],[142.93978925900015,44.63471100500003],[142.98145592500012,44.58649323100015],[143.042735222,44.55491771000008],[143.118418816,44.49689362200009],[143.20443769599999,44.44725169499999],[143.22486412900017,44.442450262000094],[143.24073326900012,44.436346747000115],[143.27857506600006,44.40615469],[143.29688561300011,44.39468008000016],[143.340098504,44.386542059000035],[143.3514103520001,44.381048895],[143.36850019600004,44.35138580900018],[143.36915123800006,44.34625885600015],[143.39649498800023,44.322943427000055],[143.40528405000012,44.31745026200004],[143.55241946700008,44.25250885600015],[143.77662194100017,44.18927643400009],[143.77662194100017,44.18235911699999],[143.69532311300011,44.18984609600007],[143.68043053500006,44.18235911699999],[143.68506920700005,44.17593008000007],[143.70899498800023,44.15786367400007],[143.71461022200006,44.15135325700008],[143.72828209700018,44.11347077000012],[143.7384546230002,44.11798737200009],[143.7424422540001,44.12091705900012],[143.75709069100012,44.11017487200009],[143.76970462300008,44.103745835],[143.78321373800023,44.100653387000094],[143.92969811300023,44.09894440300009],[143.9377547540001,44.09642161699999],[143.96607506600006,44.120062567],[143.98324629000015,44.12995026200012],[143.99919681100008,44.133978583],[144.11931399800008,44.12905508000013],[144.15308678500006,44.117254950000145],[144.17172285200004,44.10602448100015],[144.17156009200008,44.102728583000115],[144.15870201900023,44.100653387000094],[144.14039147200018,44.09300364800008],[144.12680097700004,44.080145575000145],[144.10547936300006,44.031561591000084],[144.13835696700008,44.020697333],[144.15284264400012,44.01984284100011],[144.16700280000023,44.025376695000105],[144.177582227,44.03522370000006],[144.188731316,44.050279039000074],[144.19760175900015,44.06720612200006],[144.20118248800023,44.08246491100003],[144.215098504,44.1114769550001],[144.24293053500017,44.11920807500012],[144.263438347,44.107814846000124],[144.25586998800006,44.07941315300012],[144.26832116000017,44.04938385600015],[144.27833092500006,44.0367699240001],[144.293711785,44.031561591000084],[144.30225670700023,44.02411530200011],[144.31861412900005,43.99119700700014],[144.32781009200014,43.98379140800013],[144.3365991550002,43.98029205900015],[144.37940514400006,43.956488348000065],[144.39535566499998,43.95087311400006],[144.43043053500017,43.942572333],[144.57032311300011,43.924790757],[144.740489129,43.91461823100015],[144.78809655000012,43.92177969],[144.83122806100013,43.94220612200017],[144.94760175899998,44.03408437700001],[145.03728274800002,44.11041901200004],[145.04851321700002,44.12213776200004],[145.11931399800002,44.15448639500015],[145.1666772800002,44.190497137000094],[145.18490644600016,44.19546133000016],[145.20167076900006,44.205796617000075],[145.25025475400005,44.271795966000084],[145.28972415500013,44.29889557500003],[145.30974368600008,44.31635163],[145.31836998800006,44.33633047100007],[145.32276451900017,44.34178294500002],[145.33204186300011,44.346136786],[145.34148196700002,44.345526434000035],[145.349457227,44.32599518400015],[145.36719811300006,44.302883205000015],[145.37305748800023,44.29222239800008],[145.371836785,44.24876536700013],[145.3498641290001,44.21161530200011],[145.29053795700023,44.15448639500015],[145.27914472700016,44.133937893],[145.26921634200008,44.085150458],[145.2604272800002,44.06940338700004],[145.1696069670002,43.985296942],[145.14429772200018,43.95294830900018],[145.12232506600006,43.917059637000094],[145.1061304050002,43.88076406500009],[145.11597741,43.86245351800012],[145.10987389400023,43.84194570500007],[145.09848066500015,43.82282135600009],[145.08920332100004,43.80072663000011],[145.07471764400006,43.78603750200001],[145.07146243600002,43.77460358300006],[145.07227623800023,43.76154205900018],[145.07471764400006,43.75372955900009],[145.11597741,43.68683502800015],[145.13013756600006,43.671576239],[145.19483483200005,43.620672919000086],[145.20753014400023,43.606878973000065],[145.21851647200018,43.58966705900015],[145.2262475920002,43.569769598000065],[145.22901451900017,43.548041083],[145.232269727,43.53994375200007],[145.24683678500006,43.53046295800006],[145.2521264980002,43.5143089860001],[145.26441491000017,43.489691473],[145.29078209700018,43.40534088700012],[145.31169681100002,43.36676666900006],[145.34571373800023,43.33270905200011],[145.39356530000006,43.305365302000055],[145.36166425900015,43.301459052000055],[145.29916425900004,43.34125397300015],[145.27003014400006,43.346380927000055],[145.26050866000017,43.338568427000055],[145.25831139400006,43.32709381700012],[145.26449629000015,43.31671784100003],[145.28028405000012,43.31220123900006],[145.29810631600017,43.309271552000055],[145.31511478000002,43.302923895000035],[145.32081139400012,43.29596588700004],[145.30420983200017,43.29169342700011],[145.32162519600004,43.27627187700007],[145.3510848320001,43.26544830900009],[145.3836369150001,43.25901927299999],[145.46843509200008,43.25299713700015],[145.491953972,43.244574286000116],[145.5171004570001,43.22898997600011],[145.52198326900017,43.241197007],[145.51335696700008,43.24884674700003],[145.50131269600016,43.25698476800015],[145.49659264400023,43.270575262000094],[145.50310306100002,43.27753327],[145.540863477,43.30166250200001],[145.582286004,43.33576080900012],[145.5948999360002,43.34284088700018],[145.62086022200018,43.347967841000084],[145.63379967500006,43.3531761740001],[145.64031009200008,43.35976797100007],[145.6437280610002,43.36688873900003],[145.64918053500006,43.373765367000104],[145.66163170700023,43.37982819200012],[145.67595462300002,43.38198476800004],[145.72315514400012,43.37982819200012],[145.73161868600008,43.38202545800003],[145.7443953790001,43.39179108300006],[145.75033613400004,43.394110419000114],[145.75709069100006,43.393133856000034],[145.76148522200006,43.39081452000006],[145.76449629000015,43.388373114000146],[145.76742597700016,43.38727448100009],[145.78003991000006,43.386053778000175],[145.81324303500017,43.378607489],[145.82496178500006,43.37360260600015],[145.81853274800002,43.364447333000086],[145.81031334700006,43.36078522300012],[145.78785241000006,43.36058177300008],[145.77767988399998,43.35626862200017],[145.76010175900015,43.33698151200004],[145.74691816500004,43.33270905200011],[145.7085067070001,43.326320705000015],[145.69898522200012,43.32208893400018],[145.68409264400023,43.31024811400012],[145.67310631600017,43.30792877800015],[145.64389082100016,43.31220123900006],[145.62916100400017,43.309759833000115],[145.62134850400017,43.303412177],[145.61548912900005,43.29450104400014],[145.60645592500012,43.28424713700004],[145.57984459700018,43.26504140800007],[145.57227623800023,43.25698476800015],[145.56617272200006,43.24607982000008],[145.55738366000017,43.22142161699999],[145.55176842500018,43.20978424700017],[145.5455835300002,43.20197174700017],[145.5171004570001,43.174994208000115],[145.53060957100016,43.16885000200013],[145.5188908210001,43.166449286],[145.49878991000006,43.16791413000006],[145.47828209700018,43.17210521],[145.45240319100017,43.18390534100014],[145.435394727,43.18207428600009],[145.40406334700006,43.174994208000115],[145.30250084700006,43.17348867400007],[145.28028405000012,43.16502513200011],[145.25831139400006,43.14948151200004],[145.23113040500007,43.14109935100008],[145.154063347,43.132269598],[145.138438347,43.12815989800005],[145.12549889400012,43.12006256700012],[145.11931399800002,43.10610586100016],[145.12273196700008,43.08820221600011],[145.13542728000002,43.08429596600011],[145.15219160200004,43.08462148600013],[145.16822350400005,43.07941315300003],[145.15902754000015,43.07050202],[145.14918053500006,43.066310940000065],[145.11101321700008,43.063625393],[145.10792076900006,43.05939362200017],[145.10645592500012,43.05292389500006],[145.09929446700008,43.044623114],[145.07569420700023,43.034002997000144],[145.05128014400012,43.033107815000065],[145.00310306100002,43.044623114],[145.02222741,43.020331122000115],[145.0275171230002,43.00934479400014],[145.02369225400017,42.99628327000009],[145.01433353000007,42.98948802300005],[145.00017337300014,42.986151434000035],[144.9337671230002,42.97825755400005],[144.89975019600016,42.97947825700008],[144.86882571700014,42.98847077000009],[144.842051629,43.00714752800015],[144.84050540500007,43.01691315300009],[144.84310957100016,43.02936432500003],[144.84017988400015,43.04010651200004],[144.82154381600006,43.044623114],[144.8100692070001,43.045355536000116],[144.80372155000006,43.04645416900017],[144.79867597700016,43.04669830900012],[144.79086347700016,43.044623114],[144.7838647800002,43.03994375200007],[144.77312259200008,43.0268415390001],[144.76628665500007,43.02415599200013],[144.75757897200006,43.01878489800008],[144.74740644600004,43.006170966000084],[144.73910566500004,42.99135976800004],[144.73560631600006,42.97947825700008],[144.74146569100017,42.96523672100007],[144.75538170700005,42.95441315300015],[144.77125084700012,42.94489166900017],[144.78345787900017,42.934759833000115],[144.74195397200018,42.92422109600015],[144.59913170700023,42.94912344],[144.52173912900005,42.944077867000075],[144.49586022200006,42.93325429900007],[144.46485436300011,42.937079169000086],[144.39063561300006,42.9564476580001],[144.38217207100004,42.961493231000034],[144.37305748800023,42.969549872000144],[144.36850019599999,42.97817617400007],[144.36491946700002,42.98956940300003],[144.35808353000013,42.99945709800015],[144.3452254570001,43.00372955900015],[144.32300866000006,43.00263092700011],[144.1831160820001,42.97638580900018],[144.04200280000018,42.926581122000115],[143.88640384200008,42.84418366100009],[143.790293816,42.757269598],[143.63884524800008,42.66107819200006],[143.57520592500006,42.60333893400012],[143.44809004000004,42.45502350500014],[143.34896894600016,42.31915924700009],[143.33171634200002,42.27724844000009],[143.32488040500002,42.22972239799999],[143.33643639400023,42.173000393],[143.33790123800011,42.15021393400018],[143.33594811300017,42.12970612200003],[143.33106530000006,42.1069196640001],[143.30347741000017,42.02578359600007],[143.29232832100016,42.00519440300003],[143.26547285200016,41.98672109600001],[143.25294030000006,41.94188060099999],[143.24154707100004,41.928045966000084],[143.2260848320001,41.93227773600002],[143.20313561300011,41.94586823100015],[143.18238366,41.96157461100013],[143.1733504570001,41.972113348],[143.163340691,41.99038320500007],[143.140472852,42.010484117000104],[143.11524498800023,42.027980861000074],[142.95972741000006,42.105373440000065],[142.757660352,42.15839264500009],[142.54639733200005,42.25055573100015],[142.45997155000006,42.27130768400015],[142.28101647200012,42.36652252800003],[142.2221785820001,42.411769924000154],[142.16775167700004,42.45985850800015],[142.06258038500008,42.470728272000045],[141.98096764400023,42.51023997600005],[141.92595462300008,42.55857982],[141.9093530610002,42.56549713700015],[141.8881942070001,42.56976959800009],[141.81714928500006,42.59959544499999],[141.72608483200023,42.617173570000105],[141.63648522200006,42.615790106000034],[141.54957116000017,42.60114166900003],[141.42774498800006,42.56439850500011],[141.262461785,42.46824778900016],[141.23462975400017,42.458685614],[141.21509850400017,42.44452545800006],[141.2032983730002,42.44135163],[141.191172722,42.44033437700013],[141.17969811300006,42.43744538000003],[141.168711785,42.43329498900006],[141.09156334700018,42.391791083000086],[141.07325280000012,42.37714264500006],[141.01677493600008,42.316107489],[141.00098717500012,42.3048363300001],[140.98975670700023,42.301418361000074],[140.977305535,42.29962799700009],[140.96469160200004,42.300482489],[140.95240319100017,42.3048363300001],[140.94581139400012,42.310248114000146],[140.93702233200023,42.31976959800012],[140.93165123800006,42.32876211100016],[140.93604576900023,42.332709052000055],[140.97543379000015,42.32656484600007],[140.984141472,42.329046942],[140.98682701900012,42.33982982000002],[140.97461998800023,42.34662506700012],[140.94695071700002,42.353216864],[140.92652428500017,42.36517975500011],[140.91797936300023,42.37254466400013],[140.91211998800011,42.38056061400006],[140.90137780000006,42.42084381700015],[140.73365319100012,42.56415436400009],[140.68628991000006,42.579169012000094],[140.66293379000015,42.57982005400005],[140.597422722,42.57172272300012],[140.52564537900005,42.58063385600015],[140.50066165500013,42.579169012000094],[140.45753014400012,42.56427643400015],[140.41700280000006,42.538153387000094],[140.38086998800023,42.50507233300006],[140.32545006600017,42.432806708000086],[140.30396569100006,42.39297109600001],[140.2885848320001,42.35016510600009],[140.28150475400005,42.3048363300001],[140.29175866000017,42.25958893400015],[140.32162519600016,42.233954169000086],[140.42408287900005,42.19228750200013],[140.45639082100016,42.17308177299999],[140.53028405000023,42.11176178600009],[140.54883873800006,42.10553620000003],[140.57195071700014,42.10785553600009],[140.61011803500017,42.117621161000116],[140.67408287900017,42.122056382],[140.69320722700016,42.12616608300014],[140.71355228000007,42.133490302000055],[140.77361087300002,42.1021996110001],[140.789317254,42.074530341000084],[140.83708743600008,42.02362702000006],[140.8536889980002,42.011216539000046],[140.8917749360002,41.99152252800009],[140.90845787900005,41.978949286000116],[140.9742944670002,41.913763739],[140.99219811300017,41.90216705900018],[141.0115666020001,41.893744208000115],[141.03370201900023,41.88873932500009],[141.05958092500018,41.88711172100007],[141.08326256600017,41.88263580900009],[141.1069442070001,41.87177155200011],[141.18279056100008,41.818304755],[141.19996178500017,41.79946523600013],[141.18995201900012,41.79092031500012],[141.14356530000023,41.78579336100002],[141.12159264400012,41.77936432500009],[141.10401451900006,41.77041250200007],[141.04330488400004,41.72386302300005],[141.00635826900006,41.71214427300005],[140.95997155000012,41.721991278000175],[140.87427819100006,41.758246161],[140.82398522200018,41.77069733300003],[140.7750757170002,41.77041250200007],[140.72999108200023,41.749986070000105],[140.70801842500012,41.74555084800012],[140.69857832100004,41.75983307500003],[140.70671634200002,41.77411530200011],[140.72242272200018,41.78335195500007],[140.73340905000023,41.793646552],[140.7272241550002,41.81134674700009],[140.70899498800011,41.82440827000009],[140.68482506600012,41.82990143400009],[140.66041100400005,41.82713450700005],[140.64161217500012,41.81509023600013],[140.63135826900006,41.79730866100006],[140.61573326900006,41.754706122000115],[140.60425866000006,41.736273505000085],[140.544769727,41.71259186400006],[140.5348413420002,41.70526764500015],[140.52344811300023,41.698675848000065],[140.47006269599999,41.68720123900012],[140.45289147200018,41.68105703300016],[140.4332788420002,41.64468008000007],[140.44320722700004,41.563706773000106],[140.43238366,41.53082916900003],[140.40064537900017,41.51300690300006],[140.274668816,41.48236725500014],[140.259532097,41.472723700000145],[140.24122155000023,41.45722077000015],[140.225840691,41.437933661000116],[140.21949303500017,41.417181708000115],[140.20899498800011,41.40110911700005],[140.18506920700023,41.4037946640001],[140.13746178500017,41.42096588700004],[140.12680097700004,41.42047760600015],[140.10971113399998,41.414862372000144],[140.10035241000006,41.413519598000065],[140.08838951900012,41.416815497000115],[140.06299889400012,41.431341864000146],[140.05209394600004,41.43463776200018],[140.03825931100002,41.44257233300014],[140.02816816500015,41.46141185099999],[140.01400800900015,41.50287506700009],[139.98365319100017,41.56049225500006],[139.97982832100016,41.581732489000146],[139.98422285200004,41.60317617400007],[140.0034285820001,41.63467031500009],[140.01954186300017,41.69696686400006],[140.07113691500004,41.760199286000145],[140.08301842500018,41.80076732000005],[140.08741295700023,41.805121161000145],[140.10938561300006,41.80341217700014],[140.11768639400023,41.80451080900018],[140.12671959700006,41.814032294000086],[140.12973066500015,41.82322825700005],[140.13135826900006,41.84552643400009],[140.13062584700006,41.85150788000003],[140.12435957099999,41.86005280200011],[140.12387129000004,41.865952867000075],[140.12777754000004,41.870794989000146],[140.13493899800008,41.87514883000013],[140.14503014400012,41.87958405200011],[140.14714603000002,41.89134349199999],[140.14795983200023,41.90753815300003],[140.15170332100016,41.913763739],[140.1451929050002,41.92963288000011],[140.13965905000023,41.9487165390001],[140.13843834700006,41.967515367000075],[140.14503014400012,41.982652085000055],[140.11182701900012,42.01113515800007],[140.06104576900023,42.08002350500011],[140.0275985040001,42.10553620000003],[139.92750084700006,42.138902085],[139.90935306100008,42.15656159100011],[139.90821373800011,42.16083405200011],[139.903086785,42.16559479400003],[139.88363691500004,42.19497304900004],[139.87435957100016,42.199896552],[139.8434350920002,42.20856354400017],[139.79835045700023,42.23590729400014],[139.7874455090001,42.24677155200014],[139.77759850400005,42.2711449240001],[139.76758873800006,42.31098053600009],[139.7723087900001,42.33047109600007],[139.78443444100017,42.35081614800005],[139.82618248800011,42.402044989],[139.83676191500015,42.42389557500006],[139.84961998800006,42.469305731000034],[139.84929446700008,42.51414622600005],[139.83277428500017,42.58881256700009],[139.8434350920002,42.62693919500005],[139.87696373800023,42.66339752800012],[139.91724694100006,42.6772321640001],[140.01400800900015,42.68158600500003],[140.03785241,42.68602122599999],[140.0538843110002,42.69415924700009],[140.09546959700018,42.733791408000044],[140.10515384200002,42.73908112200009],[140.11548912900005,42.74209219],[140.12761478000007,42.74298737200009],[140.13591556100002,42.74713776200004],[140.14429772200018,42.756984768000066],[140.169769727,42.79584381700006],[140.18336022200006,42.810207424000126],[140.2003686860002,42.81427643400009],[140.2229110040001,42.80133698100009],[140.2457788420002,42.77293528900016],[140.26075280000023,42.760972398000135],[140.28150475400005,42.757269598],[140.30323326900012,42.76972077],[140.30990644600016,42.79319896000008],[140.31177819100006,42.815985419000114],[140.31910241000006,42.82623932500003],[140.3374129570001,42.834133205000015],[140.35206139400012,42.85297272300015],[140.3771264980002,42.89378489800002],[140.39307701900012,42.908514716000084],[140.46119225400005,42.95888906500012],[140.50318444100006,42.98004791900003],[140.52116946700008,42.99628327000009],[140.52711022200018,43.015448309000035],[140.51685631600017,43.029974677],[140.50196373800011,43.04572174700003],[140.49439537900017,43.06854889500006],[140.48731530000012,43.082709052000084],[140.43921959700006,43.134019273000106],[140.406097852,43.16022370000003],[140.36793053500006,43.183091539000046],[140.33806399800002,43.210516669000086],[140.32935631600006,43.25071849200002],[140.36011803500006,43.32518138200005],[140.40951582100004,43.32469310099999],[140.43392988400015,43.32843659100011],[140.45289147200018,43.338853257],[140.45818118600008,43.347967841000084],[140.46119225400005,43.358587958000115],[140.46509850400005,43.36806875200013],[140.47331790500007,43.37360260600015],[140.48715254000015,43.37238190300003],[140.49968509200002,43.36517975500003],[140.51026451900012,43.357001044000086],[140.51807701900006,43.3531761740001],[140.53516686300023,43.34788646000011],[140.6209416020001,43.30121491100003],[140.63884524800002,43.28888580900015],[140.66879316500004,43.260321356000176],[140.68921959700018,43.24835846600014],[140.76140384200008,43.223456122000115],[140.77125084700018,43.21552155200014],[140.7863061860002,43.20062897300009],[140.79615319100006,43.19550202000006],[140.80990644600016,43.19245026200018],[140.91260826900006,43.20416901200015],[140.98829186300006,43.226996161],[141.01124108200017,43.22898997600011],[141.02230878999998,43.22378164300012],[141.01221764400023,43.210516669000086],[141.00440514400023,43.193060614000146],[141.02198326900006,43.174994208000115],[141.03256269600004,43.172308661000145],[141.0698348320001,43.16885000200013],[141.1108504570001,43.156195380000085],[141.1355086600001,43.152411200000145],[141.15650475400005,43.143011786000116],[141.16911868600013,43.14085521000011],[141.187266472,43.14150625200007],[141.20085696700008,43.14362213700018],[141.22754967500012,43.15448639500006],[141.303965691,43.19725169500008],[141.37086022200006,43.25071849200002],[141.39747155000006,43.27973053600009],[141.42335045700005,43.317857164000074],[141.4401147800002,43.36172109600001],[141.439707879,43.40778229400014],[141.42701256600006,43.43455638200005],[141.37086022200006,43.49713776200015],[141.35987389400006,43.52358633000013],[141.36247806100008,43.54336172100007],[141.37452233200005,43.56053294500002],[141.39136803500017,43.579087632000025],[141.3727319670002,43.61823151200004],[141.364024285,43.62750885600009],[141.36695397200006,43.646307684000064],[141.34392337300008,43.69017161700002],[141.33741295700005,43.71283600500006],[141.34359785200004,43.73151276200004],[141.35816491000017,43.75580475500003],[141.38502037900005,43.791327216000084],[141.40211022200012,43.80361562700013],[141.42481530000023,43.814601955000015],[141.44800866000017,43.82249583500008],[141.49057050900004,43.82733795800006],[141.51002037900005,43.832586981000034],[141.52816816500004,43.84121328300013],[141.58472741000006,43.875433661000116],[141.61573326900017,43.902777411],[141.64063561300011,43.93793366100006],[141.65894616000017,43.98379140800013],[141.66716556100008,44.025091864],[141.67017662900017,44.06663646000008],[141.65544681100008,44.276922919000114],[141.6657007170002,44.31273021000011],[141.74724368600002,44.42422109600004],[141.79175866000006,44.59699127800003],[141.79607181100002,44.641750393000066],[141.78345787900005,44.76536692900008],[141.75359134200008,44.885443427],[141.7218530610002,44.955145575000145],[141.58643639400023,45.16437409100003],[141.57488040500013,45.20685455900009],[141.58375084700006,45.25116608300014],[141.589691602,45.25820547100001],[141.60987389400012,45.275864976000136],[141.61784915500007,45.28534577000012],[141.62256920700005,45.29596588700018],[141.6246850920002,45.30548737200017],[141.6276961600001,45.31439850500011],[141.649180535,45.34100983300006],[141.65015709700018,45.35736725500006],[141.6390080090001,45.38898346600014],[141.63705488400004,45.40444570500007],[141.63941491000017,45.421128648000106],[141.6479598320001,45.437201239],[141.6657007170002,45.450425523000135],[141.67725670700023,45.44432200700005],[141.68360436300023,45.436183986000046],[141.68628991000006,45.425523179],[141.686778191,45.41229889500006],[141.69214928500017,45.402289130000085],[141.70443769600004,45.40208567900011],[141.72771243600008,45.408880927000055],[141.77409915500013,45.412909247000115],[141.82325280000023,45.422552802],[141.8575952480002,45.44033437700007],[141.86841881600017,45.443019924000126],[141.87533613399998,45.44818756700015],[141.87720787900005,45.46019114800008],[141.87720787900005,45.473863023000106],[141.878672722,45.484035549000154],[141.89389082099999,45.500555731000034],[141.91944420700005,45.51585521],[141.94499759200008,45.52041250200013],[141.96045983200005,45.51023997599999],[141.97754967500012,45.48078034100011],[141.987559441,45.46849192900005],[142.00180097700004,45.46344635600012],[142.01775149800014,45.45571523600002]]]]}},{"type":"Feature","properties":{"iso_3166_2":"JP-18","name":"Fukui","name_alt":"Hukui","name_local":"福井県","type":"Ken","type_en":"Prefecture","region":"Chubu","postal":"FI","region_code":"JPN-KIN"},"geometry":{"type":"Polygon","coordinates":[[[136.43573449135363,36.14022329446948],[136.44891198120297,36.14464162950756],[136.46270958867655,36.14678620052274],[136.4948523298711,36.14580434769252],[136.5329895372373,36.13991323520764],[136.5662174831503,36.123531806247826],[136.5868363790956,36.10802887643149],[136.62300988170074,36.07446503373427],[136.63716922438016,36.06617096601727],[136.6562378276136,36.063432114900166],[136.72088504520866,36.07480093051851],[136.72429568899474,36.05991811832655],[136.722331985133,36.051236476981785],[136.71582075412448,36.038808295066815],[136.7071391136791,36.013874416870806],[136.7027982930067,35.97271413844672],[136.6991809427463,35.95576426870596],[136.6985608260212,35.943542792365974],[136.70124800029498,35.931605535966696],[136.70775923130338,35.92266551400229],[136.71659590137978,35.915172431062814],[136.72791303925533,35.91021149276622],[136.75385460780387,35.90442373306885],[136.76594689293472,35.8982742381655],[136.77896935405244,35.88698293691303],[136.7924569031635,35.86938711202566],[136.80212039643914,35.85037018473622],[136.80305057242595,35.83605581332509],[136.79555748858724,35.82437693934423],[136.7826900579998,35.81305980146868],[136.76858239216364,35.79099396380042],[136.75773034138206,35.78401764569776],[136.72682783363757,35.78316498497608],[136.7100846703712,35.780839545009],[136.6870886576154,35.77448334453078],[136.6685884951629,35.77386322690643],[136.634378697319,35.779289252297104],[136.61200280218748,35.779263413875384],[136.50802981972043,35.761796780197216],[136.4951623882336,35.756060696443996],[136.48927127484944,35.74818003987696],[136.48415530782125,35.73911082580398],[136.4760937850001,35.73993764900331],[136.45537153536804,35.75190074292493],[136.44271080855697,35.754045314839374],[136.42999840670115,35.75456207877687],[136.41465050741493,35.75378693332027],[136.39909590075513,35.75590566681308],[136.36452436680605,35.76608592402613],[136.35026167223833,35.76792043757814],[136.3370325046464,35.76639598238867],[136.32416507405895,35.76169342740974],[136.31315799364648,35.75461375651969],[136.30426964672677,35.744226792832194],[136.28985192342753,35.6952633731062],[136.25729577018365,35.64562815981171],[136.1672754248209,35.67500621236678],[136.14696658723813,35.671207994053674],[136.1277429552731,35.663534043960965],[136.1239705753817,35.65526581556489],[136.12443566337515,35.64934886285977],[136.13218712783362,35.63335500752754],[136.13332400939544,35.6270763214151],[136.1343575381698,35.610901598030324],[136.14324588419015,35.59250478836526],[136.14634646961383,35.582143663099515],[136.1452612648955,35.5709557155339],[136.1354944188323,35.55793325531545],[136.1222652530389,35.55596955055424],[136.10924279192125,35.55839834240953],[136.09575524281018,35.5584758567754],[136.09001915905685,35.5513445090418],[136.08893395433853,35.54274038296228],[136.08970909979507,35.53186249375901],[136.0886238950767,35.522638250954515],[136.08082075377473,35.51429250729336],[136.07089887898007,35.515145168914415],[136.05673953719992,35.51431834571508],[136.0439237807579,35.511992905748],[136.01570844908565,35.503311266201905],[135.99152387882384,35.4845785588534],[135.97953494737988,35.480418606233684],[135.9671326029872,35.481813870213955],[135.95514367064385,35.48749827712385],[135.94506676711757,35.496877550458635],[135.9380904481157,35.50093415029076],[135.9309591003821,35.5026394717342],[135.92568810372296,35.497497667183524],[135.9211922552184,35.48907440915664],[135.90098677042312,35.413781847254455],[135.89385542179025,35.40073354771502],[135.88625898696267,35.3907083201328],[135.8764921408996,35.381587429216495],[135.866880323568,35.379830430929644],[135.85540815606146,35.38181997321317],[135.8412488142814,35.386574205035544],[135.81752933201307,35.38468801553947],[135.79918419829215,35.37688487423756],[135.74285688683585,35.33758494688783],[135.6882865736664,35.330350247266125],[135.53930342031657,35.36427582516916],[135.51878787715873,35.373448391130324],[135.5104162941766,35.382026678788236],[135.50250980008724,35.392516995263094],[135.48499148956563,35.40613373558347],[135.45305545484536,35.43912913749966],[135.44742272387953,35.452074083352244],[135.44685428309867,35.46184092941536],[135.4533655132078,35.47519928641796],[135.45346886599538,35.480418606233684],[135.44959313421577,35.49015961387508],[135.44370201993218,35.49886709184281],[135.43930952421516,35.50889232032432],[135.44184166885793,35.517728990400514],[135.45243533722106,35.526901557261056],[135.46266727127755,35.53354197857939],[135.47641320190775,35.53953644475109],[135.4787607049713,35.543724789933606],[135.4804793630001,35.53388092700001],[135.4786889980001,35.52728913000004],[135.47901451900015,35.522528387000136],[135.4882918630001,35.520697333000044],[135.49561608200008,35.523911851],[135.50269616000008,35.531642971000025],[135.51221764400015,35.548041083000044],[135.51246178500003,35.529852606000134],[135.508636915,35.51190827000008],[135.51099694100003,35.49819570500006],[135.52955162900003,35.492743231000105],[135.5582788420001,35.49176666900004],[135.5673934250001,35.492743231000105],[135.5768335300001,35.49599844000008],[135.59644616000008,35.505113023000064],[135.60524856500007,35.51716843800011],[135.62479780900003,35.532343969000124],[135.64894517800013,35.54283352900009],[135.66976972700002,35.5343692080001],[135.6647662210001,35.52966431400009],[135.64192428600006,35.52171835000007],[135.63461347700002,35.49355703300003],[135.62208092500015,35.48655833500007],[135.64506572400006,35.48020001400005],[135.69668606000005,35.491842543000104],[135.72443120100002,35.490732086000065],[135.73803636400015,35.498738638000134],[135.74835148300008,35.51371915000007],[135.74819794300004,35.533525420000075],[135.72080139600007,35.52230481500001],[135.70860440900003,35.54055094000006],[135.69163589700008,35.54587719600005],[135.70609333200002,35.56209461800012],[135.73844643100006,35.57053137300005],[135.7480446890001,35.564204344000046],[135.75613707800005,35.5490724150001],[135.7772579810001,35.54985604900011],[135.79405025600016,35.5313818220001],[135.81049953600012,35.526862684],[135.834320509,35.5343692080001],[135.82349694100003,35.53839752800005],[135.81617272200003,35.54596588700011],[135.80150220300004,35.568003462000064],[135.804254904,35.575174764000025],[135.81543350100003,35.577591581000064],[135.825890457,35.56935555100003],[135.84012939600007,35.573414589000066],[135.8547469410001,35.57904694200005],[135.85157311300014,35.58641185100004],[135.84449303500008,35.591742255000014],[135.83757571700005,35.5991885440001],[135.834320509,35.61318594000005],[135.83025149800005,35.61713288000004],[135.81601831600005,35.63085602400005],[135.8116846050001,35.643405811000065],[135.82322255600008,35.644620961000044],[135.84086572400014,35.63365449200006],[135.85375711000006,35.62491969800004],[135.8678407810001,35.61775318300002],[135.90184741800016,35.62436015600011],[135.90976709600005,35.614962749000085],[135.91944111600003,35.60816038200008],[135.9395865890001,35.61843882000008],[135.95093848200014,35.628881685000124],[135.97105288200015,35.625981151000104],[135.98057361100007,35.630480591000065],[135.98166761900006,35.643637888000086],[135.9635403680001,35.65540930800006],[135.97315915800004,35.67621119000012],[135.97437115000008,35.69094901400007],[135.9700837540001,35.70299009100006],[135.95644806000007,35.70056518700008],[135.95600508100011,35.728324936],[135.98154353000012,35.73985437800005],[136.01970526600007,35.76534720100008],[136.03356317100014,35.74622550600006],[136.03132091400005,35.73807644700011],[136.03889018900009,35.722506116000034],[136.04684700500002,35.70372189800014],[136.041958142,35.69146931700004],[136.03195403100005,35.691626426000056],[136.02700644400005,35.68094741500005],[136.04329577700003,35.67016694600005],[136.04745939000009,35.65881225800007],[136.06911435400002,35.66187974300004],[136.07462120000002,35.679031535000064],[136.08138118700003,35.68419368000005],[136.083595424,35.69044927400009],[136.082647693,35.70439476100003],[136.09239818700007,35.71516472700003],[136.09263301800001,35.72463868000008],[136.0929581580001,35.7431151800001],[136.09986412900008,35.7598330750001],[136.09945722700007,35.77570221600004],[136.08821240900005,35.795294073000065],[136.07668286700005,35.81173807300004],[136.07049761300004,35.824749331000135],[136.0488078790001,35.83866838800009],[136.01226671000012,35.8709803050001],[135.9934540640001,35.88514211700007],[135.99535838000008,35.913108400000056],[135.99438018900008,35.93591278200003],[135.9707075560001,35.9600640730001],[135.95728600400008,35.973130601000065],[135.96321741100013,35.99992322200009],[135.9873431540001,36.011733285000076],[136.0001323890001,36.02418682700002],[136.017914259,36.057440497000044],[136.03109785200007,36.08071523600006],[136.04361081500014,36.110832538000096],[136.0928204120001,36.161363244000114],[136.1075493940001,36.18516511200002],[136.1201548570001,36.19975469800005],[136.13484480500006,36.22455239400006],[136.11942239700005,36.246444489000055],[136.12417327600014,36.25317933200006],[136.14491123500005,36.254279236000116],[136.16262712500009,36.252242211000066],[136.19673780600016,36.26436216400003],[136.22671926238968,36.28560274627938],[136.24122439958637,36.27179149008521],[136.2431881043475,36.26977610937993],[136.27605431505464,36.25127594692739],[136.28008507736433,36.248382066179374],[136.2865963083729,36.24236176248533],[136.29000695215905,36.2359280458426],[136.29403771356954,36.22517934784861],[136.30106570941496,36.19629222350724],[136.30519982271358,36.184148261533096],[136.3119177592971,36.17376129784563],[136.3229248388102,36.166319891749595],[136.3356372415654,36.161927395133205],[136.35873660710865,36.15949860327791],[136.378321975179,36.155390325702996],[136.41692426963925,36.14045583846615],[136.43573449135363,36.14022329446948]]]}},{"type":"Feature","properties":{"iso_3166_2":"JP-28","name":"Hyogo","name_alt":"Hiogo","name_local":"兵庫県","type":"Ken","type_en":"Prefecture","region":"Kinki","postal":"HG","region_code":"JPN-KIN"},"geometry":{"type":"MultiPolygon","coordinates":[[[[134.81731204499997,34.15554433800004],[134.81682376400008,34.153998114],[134.8112085300002,34.159572658000016],[134.81185957100004,34.165187893],[134.81609134200008,34.16779205900009],[134.81967207100004,34.17145416900014],[134.8190210300002,34.176906643000095],[134.8219507170002,34.179551499000084],[134.8291935560002,34.17332591400013],[134.82601972700016,34.160101630000085],[134.8224389980002,34.156642971000096],[134.81731204499997,34.15554433800004]]],[[[134.91627037900017,34.33828359600015],[134.91861316500004,34.320394420000056],[134.92618311400022,34.308495078000036],[134.95045006600017,34.28733958500014],[134.95825406100008,34.27035550100014],[134.93798406600015,34.26275510800012],[134.9094703660002,34.25718023200007],[134.88490593700024,34.244481070000134],[134.85611812200014,34.23600730500006],[134.83385849900012,34.22661011400014],[134.80004952200014,34.20075373700003],[134.75187547300018,34.191955442],[134.7286771410002,34.19093934900006],[134.72686973700004,34.20997004200008],[134.70537874300024,34.217968398],[134.70216251400004,34.22119879000003],[134.71359584400014,34.23997005300011],[134.72388756600012,34.252630927000084],[134.68811432000004,34.243579891000095],[134.66651451900006,34.26552969000009],[134.65716913300017,34.28820431600009],[134.6696351570001,34.302065221000035],[134.6832595860001,34.328226407000145],[134.7051556380001,34.323168076000044],[134.720814407,34.329788749],[134.79895562900006,34.446793791000076],[134.82422936300006,34.46084219000009],[134.84253991000006,34.470282294000086],[134.85043379000004,34.47573476800012],[134.85645592500012,34.4833031270001],[134.86500084700006,34.500677802000055],[134.87134850400017,34.50958893400009],[134.88383089300012,34.52948869500001],[134.9224611860001,34.54608208600011],[134.9381101050001,34.550905797000084],[134.96306260100013,34.580816112000136],[134.98133299800023,34.60240240600017],[135.00268188700014,34.608423048000034],[135.0281681650001,34.59100983300006],[135.03012129000004,34.57884349200016],[135.01841325900014,34.56604837500011],[135.00327729100005,34.5515747810001],[134.99539969300017,34.53023319400016],[134.98414147200018,34.50576406500009],[134.95630086700012,34.484877254000125],[134.93254200200008,34.453482284000145],[134.90297317900016,34.419005547],[134.89722741000017,34.38149648600013],[134.895762566,34.37274811400006],[134.89893639400006,34.36082591400013],[134.8996748380001,34.3490357590001],[134.91627037900017,34.33828359600015]]],[[[134.493988477,34.665798244000044],[134.4940698580002,34.658718166000185],[134.49366295700005,34.65416087400014],[134.49773196700002,34.65208567900011],[134.49952233200023,34.64720286700005],[134.49683678500006,34.64313385600009],[134.48698978000002,34.641343492000104],[134.4798283210001,34.63922760600009],[134.48275800900004,34.64248281500015],[134.48682701900023,34.644924221000096],[134.48617597700004,34.648098049000154],[134.48316491,34.64667389500009],[134.47901451900017,34.649155992000104],[134.46762129000004,34.64077383000013],[134.4585880870001,34.64484284100011],[134.45964603000007,34.64854564000014],[134.45972741000006,34.653876044000114],[134.4620874360002,34.65725332200013],[134.46436608200017,34.65932851800015],[134.46420332099999,34.665187893000095],[134.46876061300023,34.66445547100007],[134.47169030000023,34.66242096600003],[134.47510826900006,34.65936920800014],[134.4761662120002,34.66327545800014],[134.47852623800006,34.664740302],[134.48039798300024,34.66185130400008],[134.48414147200018,34.661932684000064],[134.48528079500002,34.66575755400005],[134.48959394600004,34.67064036700013],[134.493988477,34.665798244000044]]],[[[134.57927493600008,34.65562571800011],[134.57642662900005,34.651068427000055],[134.569590691,34.659776109000134],[134.56584720099997,34.664740302],[134.56674238400015,34.671332098000065],[134.5699162120002,34.674099026000036],[134.57406660200016,34.67560455900018],[134.5782983730002,34.674099026000036],[134.58838951900023,34.6694196640001],[134.58920332100016,34.66120026200012],[134.57927493600008,34.65562571800011]]],[[[134.53134199300004,34.677801825000174],[134.5328068370002,34.674099026000036],[134.53402754000004,34.677801825000174],[134.53777103000007,34.678900458000115],[134.54444420700023,34.68093496300004],[134.54590905000006,34.67161692900011],[134.54428144600016,34.66925690300015],[134.54509524800008,34.665798244000044],[134.5420841810001,34.65892161700005],[134.53728274800008,34.658514716000056],[134.53174889400017,34.66242096600003],[134.52588951900012,34.66567617400007],[134.51978600400005,34.668646552],[134.51327558700015,34.67084381700009],[134.51238040500007,34.675523179000024],[134.50896243600002,34.67617422100015],[134.5147404310002,34.680487372000144],[134.5216577480002,34.68223704600014],[134.52711022200006,34.68516673400016],[134.53557376400025,34.687201239],[134.53785241000006,34.684393622000144],[134.53386478000007,34.681057033000016],[134.53134199300004,34.677801825000174]]],[[[134.53698730900024,35.6722030990001],[134.59020875200022,35.65942839100005],[134.647447132,35.664265416000134],[134.69147450199998,35.66344715900003],[134.76690713200017,35.66655919200012],[134.7982952040002,35.665642253],[134.81341933700006,35.66237377200012],[134.83413714400015,35.65714558500015],[134.84234804400015,35.64536533400015],[134.86324991282666,35.65827840121362],[134.86740644694984,35.62237376643621],[134.86678633022498,35.61136668602366],[134.86539106714397,35.601393134385674],[134.86554609587554,35.58384898544237],[134.8677165062118,35.570697333115376],[134.8732975612334,35.558785916037166],[134.8839945823842,35.543825589479425],[134.91086632691943,35.51281972894738],[134.93350060357014,35.50059825350657],[134.95355105963378,35.49687755045859],[134.9710176942111,35.50075328223819],[135.00223025941884,35.514912624917784],[135.01246219257624,35.518349107125644],[135.02383100819455,35.51886587196243],[135.03514814696936,35.51336233220589],[135.0438297874147,35.50269114857768],[135.04739546083184,35.481813870214],[135.0504960471549,35.41639150626297],[135.04941084243634,35.40551361705978],[135.04475996340156,35.39499746396184],[135.03824873329236,35.38530813226443],[135.03106570871543,35.376884874237604],[135.0241410665569,35.36988271681385],[135.01483930938664,35.36611033782184],[135.00336714098083,35.365696925772525],[134.99489220611056,35.36688548417773],[134.98533206562243,35.37006358486657],[134.96300784733435,35.38166494448167],[134.94952029822306,35.38652252909152],[134.93892662986,35.38561819152635],[134.9302449894146,35.37959788693301],[134.9260591983734,35.368022365739606],[134.92373375930552,35.357118639013905],[134.92094323134498,35.31820628529185],[134.92202843606358,35.31110077598005],[134.92678266788587,35.302367458691336],[134.9367045426806,35.29378917103334],[134.95510135324494,35.285805162578285],[134.99029300301956,35.27769196201446],[135.0019202010565,35.272059231048715],[135.01432254365048,35.263946031384265],[135.02755171124252,35.25216380551528],[135.06465538983448,35.24063996026602],[135.0777812028402,35.233560289375774],[135.09426598458745,35.23485220056857],[135.11664187971897,35.245910956025895],[135.12697716656308,35.24797801447376],[135.1470276226266,35.247202867218576],[135.152712030436,35.244774075363196],[135.15927493738846,35.23955475554759],[135.17183230961345,35.20870392554572],[135.18847212099163,35.184209296022274],[135.2012878774336,35.170075791764404],[135.22485233007095,35.15713084591182],[135.24371422683006,35.158061020999256],[135.259475539065,35.156588243552605],[135.27441002810033,35.15216990851441],[135.28603722523778,35.14369497274471],[135.2939953961707,35.13232615802583],[135.30453738769032,35.12865713092184],[135.33120242665066,35.132842921963245],[135.3439148303053,35.129173895758626],[135.37915815602415,35.10788320624489],[135.3890800308187,35.100183416831285],[135.39641808502657,35.087884426125314],[135.40086225758708,35.076825669768894],[135.3970382017517,35.064268297543904],[135.378538039299,35.048662014040715],[135.35993452405913,35.03876597856707],[135.34670535736646,35.03429596578626],[135.338643833646,35.03018769000998],[135.338643833646,35.021971137558026],[135.34195112464474,35.014813951402644],[135.3633451678452,34.997450670512066],[135.36675581343016,34.95342234976168],[135.39889855372533,34.92409597405002],[135.43207482279482,34.91135773377239],[135.43982628815266,34.9037096221014],[135.4387410834344,34.88975698499688],[135.44013634741438,34.86541738510424],[135.43889611216585,34.84960439692544],[135.43486534985598,34.833946438377396],[135.43253991078828,34.81616974543742],[135.43316002841252,34.793845527149315],[135.44370201993215,34.76061758123633],[135.44850792859805,34.729198310453725],[135.4463375182618,34.72258372755702],[135.4449422551809,34.71922475791628],[135.442461785583,34.716124172492485],[135.43284997005017,34.70609894491044],[135.41293378998122,34.69208405211863],[135.3975743230001,34.6862137830001],[135.38121442800005,34.681262829],[135.363244418,34.68907092900015],[135.3412673680002,34.70850960500003],[135.3174851810002,34.70695845700011],[135.28686267099997,34.70544269800003],[135.287300908,34.679969876000044],[135.25360478100006,34.676997771000075],[135.25489028200005,34.70091002200017],[135.22006657000023,34.69077377000009],[135.24234854000005,34.650751996000096],[135.21090196999998,34.65518024800009],[135.20440327700007,34.67726067300008],[135.18603043700003,34.67490879400016],[135.18397604700013,34.65115585800011],[135.11131213300004,34.64038240500018],[135.07954647400007,34.62777575900016],[135.045768788,34.6249668870001],[135.01684557000007,34.642155986000105],[134.9792586600001,34.641017971000096],[134.96029707099999,34.64362213700018],[134.93702485700013,34.66736886900016],[134.9076249340001,34.677606433000065],[134.88835696700002,34.69147370000012],[134.83334394600016,34.721380927],[134.80046634200008,34.73090241100009],[134.7623804050002,34.75698476800015],[134.74439537900005,34.76654694200012],[134.69629967500006,34.776190497000115],[134.56690514400023,34.76654694200012],[134.55990644600016,34.76829661700013],[134.554453972,34.77163320500016],[134.54908287900005,34.77326080900018],[134.54265384200002,34.769964911000145],[134.53785241000006,34.76654694200012],[134.53150475400005,34.76312897300012],[134.52491295700023,34.76064687700001],[134.5190535820001,34.75971100500011],[134.50586998800023,34.760972398000135],[134.49586022200018,34.7645531270001],[134.490489129,34.77260976800012],[134.49122155000023,34.787054755],[134.4845483730002,34.7853050800001],[134.47820071700008,34.781927802000084],[134.47315514400012,34.776841539000046],[134.47136478000002,34.769964911000145],[134.47006269600004,34.76178620000003],[134.46705162900005,34.760972398000135],[134.46257571700008,34.762030341000084],[134.45704186300023,34.75971100500011],[134.43140709700018,34.73045482],[134.42286217500023,34.72557200700011],[134.40870201900023,34.72626373900006],[134.39820397200018,34.73151276200004],[134.38965905000023,34.73737213700018],[134.38135826900017,34.73981354400003],[134.36841881600017,34.73598867400001],[134.35775800900004,34.727362372000115],[134.3522241550002,34.716253973000065],[134.35401451900012,34.705145575000145],[134.32667076900012,34.704331773000135],[134.30464055720617,34.709108550374495],[134.30470177586622,34.70925120717739],[134.3143652691418,34.73175629351819],[134.3163806498471,34.74408112174642],[134.31400353393585,34.761237697961334],[134.31064456609377,34.77033275045609],[134.3061487157905,34.778135890858735],[134.28863040616832,34.799529934059294],[134.2597432800283,34.821337389309164],[134.25679772423567,34.83585846629525],[134.2577278993232,34.850973823383285],[134.26392907106973,34.872858792099535],[134.26361901270715,34.8971983910928],[134.25865807531002,34.936549994386795],[134.26454918779487,34.96742666281027],[134.2656343934125,34.98189606385229],[134.26501427578833,34.99352326098976],[134.26361901270715,35.000189520729876],[134.26361901270715,35.00096466708571],[134.26532433505,35.00269582785022],[134.31328006442348,35.04101390236973],[134.3626310568778,35.11103546851204],[134.37394819565267,35.12286937122455],[134.38557539279017,35.131757717244895],[134.39410200360456,35.14069774010868],[134.39709923714022,35.15206655482764],[134.39399865081705,35.17134186543474],[134.38821089111966,35.18751658792023],[134.3956522972159,35.216791286788364],[134.3956522972159,35.22921946870353],[134.41585778201116,35.22617055922389],[134.4232991881071,35.22084788751998],[134.43647667885566,35.2174889187785],[134.44846561119905,35.2186774771839],[134.46272830576677,35.22531789850213],[134.49218387268755,35.24433482489228],[134.50479292175604,35.25820994673167],[134.5100639184151,35.27187836389545],[134.51068403513997,35.288802395214404],[134.50789350807887,35.306010647373554],[134.5075834488172,35.31391714146294],[134.5061365088928,35.322262885123976],[134.50210574838164,35.33239146639313],[134.47854129394548,35.36187286993707],[134.47404544544085,35.38316356124933],[134.4679993024258,35.40011343009071],[134.4444348488892,35.43871572545042],[134.41678795799797,35.54418732378603],[134.39844282427705,35.57860382720493],[134.36883222862448,35.59756907855022],[134.36558094755824,35.59996541641969],[134.37649117900017,35.611184255000026],[134.41382264900008,35.62113994],[134.4662148620001,35.63755465300012],[134.49809573600012,35.65387932700018],[134.53698730900024,35.6722030990001]]]]}},{"type":"Feature","properties":{"iso_3166_2":"JP-26","name":"Kyoto","name_alt":"Kioto","name_local":"京都府","type":"Fu","type_en":"Urban Prefecture","region":"Kinki","postal":"KY","region_code":"JPN-KIN"},"geometry":{"type":"Polygon","coordinates":[[[135.4787607049713,35.543724789933606],[135.47641320190775,35.53953644475109],[135.46266727127755,35.53354197857939],[135.45243533722106,35.526901557261056],[135.44184166885793,35.517728990400514],[135.43930952421516,35.50889232032432],[135.44370201993218,35.49886709184281],[135.44959313421577,35.49015961387508],[135.45346886599538,35.480418606233684],[135.4533655132078,35.47519928641796],[135.44685428309867,35.46184092941536],[135.44742272387953,35.452074083352244],[135.45305545484536,35.43912913749966],[135.48499148956563,35.40613373558347],[135.50250980008724,35.392516995263094],[135.5104162941766,35.382026678788236],[135.51878787715873,35.373448391130324],[135.53930342031657,35.36427582516916],[135.6882865736664,35.330350247266125],[135.74285688683585,35.33758494688783],[135.77189904170734,35.31732778614841],[135.82698611881426,35.2633000762375],[135.82894982267618,35.2484947784113],[135.81876956636233,35.2123729517503],[135.82047488780574,35.19914378505763],[135.8338074081853,35.15361684843876],[135.83644290561557,35.13648611154477],[135.83659793524646,35.12075063683238],[135.81473880405252,35.00556387017647],[135.8145837753209,35.00109385829492],[135.8248157093774,34.98096588786544],[135.83938846230762,34.96052785907341],[135.8535478049871,34.93404368726641],[135.85602827368592,34.919470934336175],[135.85644168483594,34.905208237969816],[135.85540815606146,34.88970530905277],[135.8588188007471,34.880067654198854],[135.8631596214193,34.874150702392996],[135.87354658420747,34.86810456027723],[135.88625898696267,34.86528819389508],[135.90181359272316,34.86479726837919],[135.9157662289283,34.867019355558796],[135.92889204283352,34.860301418975325],[135.9359200377795,34.849268500141136],[135.94320641514395,34.839837550862285],[135.95219811395185,34.83373973190311],[135.97736453704374,34.823197740383364],[135.98852664618772,34.81361176237289],[135.99762169778313,34.802785549113764],[136.00196251755608,34.79291535116255],[136.00309940001733,34.77369171829815],[136.03648237466177,34.715349026136636],[136.02919599819666,34.70361847621169],[136.01973921139546,34.698192449921635],[136.00883548377055,34.695918686797995],[135.9993786969692,34.69757233319663],[135.98542605986472,34.70328257942754],[135.96537560380102,34.71400543899978],[135.93204430599985,34.72392731379452],[135.90987511644346,34.72418569621291],[135.89003136595477,34.71746776052865],[135.8727714378515,34.70697744405379],[135.84920698521415,34.698657537915096],[135.83225711457413,34.699122625908444],[135.81768436074458,34.704186916992626],[135.8090027202993,34.7090445007031],[135.76848839702194,34.71992238990637],[135.75267540884295,34.72625275286222],[135.73934289026215,34.73377167422342],[135.72192793162867,34.749197088774594],[135.7062699730808,34.75953237651794],[135.71479658389518,34.785318915435596],[135.70844038341698,34.81115713119661],[135.70099897732086,34.822732652390016],[135.68270552044345,34.844488429897154],[135.6463769882074,34.89918793427577],[135.6338196150831,34.90993663226973],[135.6207971539655,34.91430329046452],[135.61020348470305,34.91337311537697],[135.59795617084063,34.91972931585528],[135.5827633002861,34.94654938444654],[135.57439171820317,34.95052846901362],[135.56643354727032,34.947221178014956],[135.56069746261784,34.94034821180057],[135.5571317892007,34.93290680570445],[135.56147260987302,34.925413722765086],[135.56374637299666,34.915956935963806],[135.5565116715764,34.91071177772636],[135.53821821469876,34.90978160353811],[135.50406009279902,34.92469025325261],[135.48592166555244,34.93812612641963],[135.47165897008546,34.95466258411099],[135.4583264506051,34.97471304017469],[135.44401207919407,34.98370473898254],[135.43021447172043,34.98758047076214],[135.39326582186015,34.98969920515415],[135.36334516784518,34.99745067051202],[135.3419511246447,35.01481395140269],[135.33864383364596,35.02197113755798],[135.33864383364596,35.03018769000991],[135.34670535736637,35.034295965786214],[135.35993452405904,35.03876597856703],[135.37853803929897,35.04866201404067],[135.39703820175163,35.06426829754386],[135.40086225758705,35.07682566976885],[135.39641808502654,35.087884426125356],[135.38908003081872,35.10018341683124],[135.37915815602406,35.107883206244935],[135.3439148303052,35.12917389575864],[135.33120242665063,35.13284292196329],[135.3045373876903,35.12865713092185],[135.2939953961706,35.13232615802579],[135.28603722523775,35.143694972744754],[135.2744100281003,35.15216990851445],[135.2594755390649,35.15658824355256],[135.2437142268301,35.1580610209993],[135.22485233007092,35.157130845911865],[135.20128787743357,35.17007579176436],[135.18847212099155,35.18420929602223],[135.17183230961342,35.20870392554568],[135.15927493738843,35.239554755547516],[135.1527120304359,35.24477407536324],[135.14702762262664,35.24720286721853],[135.126977166563,35.2479780144738],[135.11664187971894,35.245910956025824],[135.09426598458742,35.23485220056858],[135.07778120284024,35.233560289375816],[135.0646553898344,35.24063996026598],[135.02755171124244,35.25216380551521],[135.01432254365045,35.26394603138422],[135.0019202010564,35.27205923104867],[134.9902930030196,35.277691962014416],[134.95510135324486,35.285805162578214],[134.9367045426805,35.29378917103338],[134.9267826678858,35.30236745869129],[134.9220284360635,35.31110077598001],[134.92094323134495,35.31820628529178],[134.9237337593055,35.35711863901395],[134.92605919837337,35.36802236573965],[134.93024498941463,35.37959788693294],[134.93892662986002,35.38561819152628],[134.9495202982231,35.38652252909148],[134.96300784733427,35.38166494448163],[134.98533206562234,35.37006358486653],[134.99489220611048,35.366885484177686],[135.00336714098074,35.36569692577257],[135.01483930938662,35.366110337821794],[135.02414106655692,35.36988271681389],[135.03106570871546,35.37688487423756],[135.03824873329233,35.38530813226447],[135.0447599634016,35.3949974639618],[135.04941084243637,35.40551361705974],[135.0504960471548,35.41639150626298],[135.0473954608318,35.481813870213955],[135.04382978741467,35.50269114857764],[135.0351481469694,35.51336233220593],[135.02383100819446,35.518865871962475],[135.01246219257615,35.5183491071256],[135.00223025941887,35.51491262491774],[134.97101769421113,35.500753282238236],[134.95355105963375,35.496877550458635],[134.93350060357005,35.50059825350661],[134.9108663269194,35.512819728947335],[134.8839945823841,35.54382558947938],[134.87329756123336,35.558785916037124],[134.86771650621176,35.57069733311539],[134.86554609587552,35.58384898544233],[134.86539106714395,35.60139313438563],[134.86678633022495,35.6113666860237],[134.86740644694987,35.62237376643617],[134.86324991282663,35.65827840121358],[134.88096824600012,35.6573224950001],[134.885047535,35.6459137520001],[134.897749492,35.64916184900008],[134.91570383300007,35.64436743400003],[134.9270125660001,35.64118073100008],[134.9472762380001,35.654852606000105],[134.95362389400015,35.6579043640001],[134.96371504,35.661037502000084],[134.95962217700003,35.67375324500006],[134.98794378000008,35.68977723600008],[135.010843852,35.69111295300013],[135.0290315420001,35.69286863100007],[135.04482240700014,35.70173922100014],[135.08578535200007,35.72597890800006],[135.084119836,35.73902244700005],[135.13430528700013,35.751901306],[135.18384850400003,35.76023997600004],[135.21013431100005,35.7633731140001],[135.22684561200003,35.772320652000104],[135.25066024000006,35.75781549700005],[135.26172936300014,35.73981354400004],[135.27670332100007,35.731390692000105],[135.29249108200008,35.71165599200006],[135.304047071,35.68891022300002],[135.30616295700014,35.671535549000055],[135.29932701900015,35.6579043640001],[135.27921371900004,35.6685327000001],[135.25882700300014,35.65682881300009],[135.246415178,35.63552024800006],[135.242393935,35.622640356],[135.2327554000001,35.61421404300003],[135.20490238300016,35.587352774000095],[135.18817537200005,35.56504457600002],[135.188324232,35.54525757600004],[135.19604082100005,35.53989476800004],[135.20667266200007,35.54146785600008],[135.208084182,35.55905389800006],[135.2216903000001,35.56793854400013],[135.23524646400006,35.584548485000056],[135.24822550200014,35.59169447900007],[135.25342858200014,35.57127513200004],[135.26543768000016,35.567075332000115],[135.27091067100002,35.56292289500007],[135.26204205600004,35.55754659600004],[135.25195709700006,35.557315818000035],[135.23981521900015,35.557963034000124],[135.23873893400003,35.54202559100014],[135.301521966,35.51324263100008],[135.31617752400007,35.51833756300002],[135.32443612400004,35.52444638300011],[135.33548989200006,35.50821008500009],[135.32956419600015,35.49475491900003],[135.32496178500008,35.485663153000075],[135.31527754,35.466782945000034],[135.31348717500015,35.45864492400011],[135.31902103000004,35.44696686400002],[135.33025149800005,35.45453522300008],[135.339757307,35.471122489000095],[135.35251785900005,35.486984186000115],[135.37050393500016,35.48612645800003],[135.394867384,35.47646719000008],[135.4023543630001,35.482163804000066],[135.4023543630001,35.507025458000015],[135.37378991000008,35.501695054000066],[135.35022402500016,35.51031344800003],[135.3377962190001,35.537477564000056],[135.3613387380001,35.55418528900009],[135.3737085300001,35.55768463700008],[135.4028426440001,35.55817291900007],[135.4160262380001,35.56167226800008],[135.4259546230001,35.56981028900009],[135.4355574880001,35.58002350500004],[135.43948099800002,35.59056974300009],[135.46322209200008,35.603327396000054],[135.45824425800004,35.586987262000065],[135.45238978900005,35.57178111900009],[135.4700304860001,35.56595953900006],[135.482937686,35.55919918800009],[135.4787607049713,35.543724789933606]]]}},{"type":"Feature","properties":{"iso_3166_2":"JP-29","name":"Nara","name_alt":null,"name_local":"奈良県","type":"Ken","type_en":"Prefecture","region":"Kinki","postal":"NR","region_code":"JPN-KIN"},"geometry":{"type":"Polygon","coordinates":[[[135.84920698521415,34.698657537915096],[135.8727714378515,34.70697744405379],[135.89003136595477,34.71746776052865],[135.90987511644346,34.72418569621291],[135.93204430599985,34.72392731379452],[135.96537560380102,34.71400543899978],[135.98542605986472,34.70328257942754],[135.9993786969692,34.69757233319663],[136.00883548377055,34.695918686797995],[136.01973921139546,34.698192449921635],[136.02919599819666,34.70361847621169],[136.03648237466177,34.715349026136636],[136.04965986541038,34.711679999032725],[136.0550858908012,34.70845022239982],[136.05911665311106,34.70253327149334],[136.0625272968972,34.69178457349926],[136.06485273686428,34.67731517245724],[136.07234581890447,34.65630870198498],[136.0633024441525,34.64680023923964],[136.03989302024667,34.64124502174039],[136.03818769700456,34.63716258438572],[136.0409782249651,34.63375193880091],[136.05338056935773,34.62643972391419],[136.05834150585576,34.61912750902735],[136.05927168184257,34.6055366071287],[136.0535355980893,34.58900014943734],[136.05245039337092,34.574582424339354],[136.0598917985676,34.562851874414406],[136.07585981727664,34.55249075004804],[136.09699547715945,34.54249135998833],[136.1142037293186,34.53639354102913],[136.12898318872317,34.53494660110482],[136.14247073783434,34.53556671782971],[136.15363284697827,34.533835557964665],[136.16164269385513,34.527815253371244],[136.1714612158624,34.509366766862826],[136.18127973876892,34.50396657989367],[136.2025187523385,34.50151194871751],[136.20794477772927,34.4954141297583],[136.2112003927839,34.486396593428026],[136.21042524642797,34.47246979384593],[136.20267378107013,34.458827216003215],[136.1775073588775,34.43862173120786],[136.15730187408218,34.43115448669022],[136.11389367095614,34.42518585894021],[136.09560021407856,34.42001821506855],[136.08071740098723,34.40880442998039],[136.07120893824185,34.39381826410158],[136.0692452325814,34.3769975864694],[136.07389611161625,34.36353587488074],[136.08195763623587,34.35087514896901],[136.10769249920946,34.30069733331527],[136.10645226486014,34.2920415312916],[136.10087120983843,34.283437405212084],[136.10438520731145,34.26899384169238],[136.1128084662377,34.254963691121446],[136.11869957872256,34.24114024522612],[136.11807946199747,34.22840200494849],[136.10722741121612,34.189386298438876],[136.1101729679081,34.138588365160956],[136.10939782065282,34.126237698511034],[136.0857816920714,34.04996328377851],[136.09079430631215,34.03590729388651],[136.1014913265634,34.018466497730685],[136.09777062441475,34.01164520925903],[136.08722863199574,34.00944896140041],[136.0353971699434,34.01074087169383],[136.01756880105927,34.00484975830969],[136.00382287042908,33.99311920838474],[135.99069705562454,33.97032990210329],[135.98480594313975,33.95314748836586],[135.97410892108974,33.93697276498111],[135.95752078655505,33.91795583769178],[135.92553307499134,33.90108348231689],[135.92072716722504,33.89343536974653],[135.91514611220333,33.88873281476759],[135.90036665279877,33.88852610919261],[135.89137495309166,33.88268667175245],[135.8833134302705,33.862946274950644],[135.87540693618115,33.850802313875676],[135.847656691603,33.83814158796392],[135.8172709486953,33.872222195497955],[135.80073449100394,33.87653717684921],[135.78523156118752,33.87904348396961],[135.77050377772707,33.87540029618671],[135.75825646386465,33.87113698988014],[135.74709435382135,33.869147446697326],[135.73603559836414,33.86958669716833],[135.69634809828608,33.87891429276041],[135.68218875470728,33.87989614469129],[135.66823611940129,33.87762238246694],[135.65397342303504,33.872558092282105],[135.63738528939956,33.85907054317104],[135.62823856006145,33.85596995684807],[135.61857506678592,33.857132676831554],[135.60896325125304,33.86382477499339],[135.60291710823793,33.875090236924876],[135.59826622920315,33.890128078747864],[135.6035372249629,33.91653473618908],[135.6106685726965,33.937256984921845],[135.61330407102605,33.954852809809296],[135.60648278165507,33.977202867418384],[135.5847270041479,33.998416043465625],[135.5795076843322,34.01565013314709],[135.5712911318803,34.028517563734624],[135.5654000175967,34.035623073945686],[135.5540312028777,34.04169505538252],[135.54643476805006,34.05073843013443],[135.5430241233646,34.06456187602976],[135.55108564708485,34.08246776017904],[135.57501183492826,34.111509915050505],[135.58710412005905,34.129105739937955],[135.61516442299967,34.15695933730359],[135.6328894390963,34.184580389773174],[135.6400207868299,34.193468735793516],[135.64994266162444,34.20052256916125],[135.66110477076853,34.204449977784265],[135.70110233010843,34.20592275613032],[135.70844038341698,34.21289907513227],[135.70906050014196,34.22535309546896],[135.69448774631235,34.24860748974385],[135.66885623612632,34.272637031273945],[135.66281009311126,34.28493602108054],[135.6590893900633,34.32322825807762],[135.64684207620076,34.37175242823196],[135.65955447805663,34.37495636734252],[135.66544559144086,34.381105862245676],[135.67071658720073,34.388547268341796],[135.66885623612632,34.40787425399358],[135.67521243660462,34.4333507354481],[135.6769177589474,34.44797516522166],[135.6740238790988,34.46414988950579],[135.66513553307834,34.49306285316817],[135.6505627792489,34.51660146738379],[135.6411059924476,34.527014269492895],[135.62710167939895,34.53794383374094],[135.62296756430158,34.54380910870336],[135.62203738831477,34.553420925135555],[135.64653201693903,34.601066596146524],[135.66761600177705,34.674886379702656],[135.6740238790988,34.690053411835464],[135.68456587061843,34.705685532861],[135.7062699730808,34.75953237651794],[135.72192793162867,34.749197088774594],[135.73934289026215,34.73377167422342],[135.75267540884295,34.72625275286222],[135.76848839702194,34.71992238990637],[135.8090027202993,34.7090445007031],[135.81768436074458,34.704186916992626],[135.83225711457413,34.699122625908444],[135.84920698521415,34.698657537915096]]]}},{"type":"Feature","properties":{"iso_3166_2":"JP-27","name":"Osaka","name_alt":null,"name_local":"大阪府","type":"Fu","type_en":"Urban Prefecture","region":"Kinki","postal":"OS","region_code":"JPN-KIN"},"geometry":{"type":"MultiPolygon","coordinates":[[[[135.25705428500012,34.43577806100008],[135.22441622000022,34.41630428000015],[135.21054196500003,34.421905936000186],[135.20517916100007,34.43049087500013],[135.24097098900015,34.45464659500011],[135.25705428500012,34.43577806100008]]],[[[135.50406009279905,34.924690253252564],[135.53821821469873,34.90978160353815],[135.55651167157643,34.91071177772632],[135.5637463729967,34.91595693596385],[135.561472609873,34.92541372276504],[135.55713178920078,34.93290680570449],[135.56069746261792,34.94034821180061],[135.56643354727035,34.947221178015],[135.57439171820315,34.95052846901366],[135.5827633002862,34.946549384446584],[135.59795617084072,34.91972931585532],[135.61020348470308,34.91337311537701],[135.62079715396558,34.91430329046456],[135.63381961508313,34.909936632269776],[135.64637698820738,34.899187934275815],[135.68270552044353,34.844488429897226],[135.70099897732084,34.82273265239006],[135.70844038341707,34.81115713119665],[135.7147965838952,34.78531891543555],[135.70626997308082,34.75953237651798],[135.6845658706185,34.70568553286104],[135.67402387909888,34.69005341183551],[135.66761600177713,34.67488637970273],[135.64653201693912,34.601066596146566],[135.62203738831474,34.553420925135626],[135.62296756430155,34.54380910870343],[135.62710167939892,34.5379438337409],[135.64110599244762,34.52701426949285],[135.650562779249,34.51660146738378],[135.6651355330783,34.49306285316821],[135.67402387909888,34.46414988950575],[135.67691775894744,34.447975165221735],[135.6752124366046,34.433350735448144],[135.6688562361263,34.407874253993654],[135.67071658720076,34.38854726834184],[135.66544559144089,34.38110586224572],[135.65955447805666,34.37495636734248],[135.64684207620073,34.371752428231915],[135.6010567571635,34.368496812278025],[135.52519575358113,34.33464874874069],[135.508866002364,34.33087636974865],[135.4925879252925,34.332168280941445],[135.4794104354432,34.33501048394665],[135.4568795106808,34.33464874874069],[135.33321780825517,34.30493480120016],[135.31259891230988,34.29733836547324],[135.1884710903685,34.2743027079036],[135.1205814795517,34.27571120630721],[135.09973570803655,34.280500099799795],[135.0852713040758,34.299181985920725],[135.10503071500003,34.31811688100008],[135.20898538000003,34.342277645000124],[135.25656401300014,34.376754752000025],[135.28129845600014,34.397428263],[135.31968984900018,34.42875819700011],[135.35347650300005,34.46748311400013],[135.37256231200004,34.484513116000116],[135.3742794250002,34.50775608100015],[135.3732082730002,34.51893221900009],[135.39099683600014,34.52364861700006],[135.3991382210002,34.53293199299999],[135.40832373099997,34.540974933000044],[135.4143791510002,34.55812547000012],[135.4152341600002,34.5799677080001],[135.41578152200012,34.60961152200004],[135.40731751300015,34.63420060100019],[135.40359067700015,34.658912182000066],[135.41293378998122,34.69208405211863],[135.43284997005017,34.70609894491044],[135.442461785583,34.716124172492485],[135.4449422551809,34.71922475791628],[135.4463375182618,34.72258372755702],[135.44850792859805,34.729198310453725],[135.44370201993215,34.76061758123633],[135.43316002841252,34.793845527149315],[135.43253991078828,34.81616974543742],[135.43486534985598,34.833946438377396],[135.43889611216585,34.84960439692544],[135.44013634741438,34.86541738510424],[135.4387410834344,34.88975698499688],[135.43982628815266,34.9037096221014],[135.43207482279482,34.91135773377239],[135.39889855372533,34.92409597405002],[135.36675581343016,34.95342234976168],[135.3633451678452,34.997450670512066],[135.39326582186013,34.989699205154224],[135.43021447172046,34.98758047076218],[135.4440120791941,34.98370473898258],[135.45832645060514,34.97471304017476],[135.47165897008549,34.954662584111034],[135.48592166555247,34.938126126419675],[135.50406009279905,34.924690253252564]]]]}},{"type":"Feature","properties":{"iso_3166_2":"JP-25","name":"Shiga","name_alt":"Siga","name_local":"滋賀県","type":"Ken","type_en":"Prefecture","region":"Kinki","postal":"SH","region_code":"JPN-KIN"},"geometry":{"type":"Polygon","coordinates":[[[136.25729577018365,35.64562815981171],[136.28923180580324,35.60015290003628],[136.29264244958938,35.57989573839757],[136.29796512309196,35.56397939743121],[136.31238284729056,35.54168101756491],[136.3260254251333,35.53294770027611],[136.33806603431998,35.5320175242893],[136.34757449796467,35.53622915285305],[136.35935672383374,35.53385203694194],[136.3684001003843,35.52082957582422],[136.37909712063566,35.50106334150004],[136.3973905784125,35.45277171534238],[136.40762251156963,35.393395494406576],[136.40245486859732,35.35714447743567],[136.39816572476832,35.343579413059445],[136.39397993372688,35.31861969734118],[136.37537641758752,35.266323147295424],[136.37615156484276,35.231493231827216],[136.3987858423926,35.20260610568721],[136.40700239484454,35.1834341505656],[136.43573449135363,35.15098135010925],[136.44193566310042,35.14147288736382],[136.4431758974497,35.131835232509985],[136.43232384666823,35.0620978872077],[136.4183712095636,35.02189362229285],[136.4116532738795,34.98236115184571],[136.4072091004196,34.96688406045098],[136.39987104711116,34.949469102716876],[136.39165449375986,34.937350979164364],[136.38157759023358,34.926395574696045],[136.3701054218277,34.916163642438136],[136.36245731015674,34.90582835469482],[136.342613559668,34.892702541688976],[136.3116077009346,34.87929250694367],[136.24050093007384,34.86311778445818],[136.1804529155695,34.86252350525555],[136.12459069210678,34.872342027262704],[136.11265343570744,34.871050116969286],[136.1021114441877,34.865055649898295],[136.10040612184508,34.85420360001612],[136.1128084662377,34.833119615178106],[136.1011812682009,34.81911530212952],[136.08195763623587,34.800925198039494],[136.00309940001733,34.77369171829815],[136.00196251755608,34.79291535116255],[135.99762169778313,34.802785549113764],[135.98852664618772,34.81361176237289],[135.97736453704374,34.823197740383364],[135.95219811395185,34.83373973190311],[135.94320641514395,34.839837550862285],[135.9359200377795,34.849268500141136],[135.92889204283352,34.860301418975325],[135.9157662289283,34.867019355558796],[135.90181359272316,34.86479726837919],[135.88625898696267,34.86528819389508],[135.87354658420747,34.86810456027723],[135.8631596214193,34.874150702392996],[135.8588188007471,34.880067654198854],[135.85540815606146,34.88970530905277],[135.85644168483594,34.905208237969816],[135.85602827368592,34.919470934336175],[135.8535478049871,34.93404368726641],[135.83938846230762,34.96052785907341],[135.8248157093774,34.98096588786544],[135.8145837753209,35.00109385829492],[135.81473880405252,35.00556387017647],[135.83659793524646,35.12075063683238],[135.83644290561557,35.13648611154477],[135.8338074081853,35.15361684843876],[135.82047488780574,35.19914378505763],[135.81876956636233,35.2123729517503],[135.82894982267618,35.2484947784113],[135.82698611881426,35.2633000762375],[135.77189904170734,35.31732778614841],[135.74285688683585,35.33758494688783],[135.79918419829215,35.37688487423756],[135.81752933201307,35.38468801553947],[135.8412488142814,35.386574205035544],[135.85540815606146,35.38181997321317],[135.866880323568,35.379830430929644],[135.8764921408996,35.381587429216495],[135.88625898696267,35.3907083201328],[135.89385542179025,35.40073354771502],[135.90098677042312,35.413781847254455],[135.9211922552184,35.48907440915664],[135.92568810372296,35.497497667183524],[135.9309591003821,35.5026394717342],[135.9380904481157,35.50093415029076],[135.94506676711757,35.496877550458635],[135.95514367064385,35.48749827712385],[135.9671326029872,35.481813870213955],[135.97953494737988,35.480418606233684],[135.99152387882384,35.4845785588534],[136.01570844908565,35.503311266201905],[136.0439237807579,35.511992905748],[136.05673953719992,35.51431834571508],[136.07089887898007,35.515145168914415],[136.08082075377473,35.51429250729336],[136.0886238950767,35.522638250954515],[136.08970909979507,35.53186249375901],[136.08893395433853,35.54274038296228],[136.09001915905685,35.5513445090418],[136.09575524281018,35.5584758567754],[136.10924279192125,35.55839834240953],[136.1222652530389,35.55596955055424],[136.1354944188323,35.55793325531545],[136.1452612648955,35.5709557155339],[136.14634646961383,35.582143663099515],[136.14324588419015,35.59250478836526],[136.1343575381698,35.610901598030324],[136.13332400939544,35.6270763214151],[136.13218712783362,35.63335500752754],[136.12443566337515,35.64934886285977],[136.1239705753817,35.65526581556489],[136.1277429552731,35.663534043960965],[136.14696658723813,35.671207994053674],[136.1672754248209,35.67500621236678],[136.25729577018365,35.64562815981171]]]}},{"type":"Feature","properties":{"iso_3166_2":"JP-30","name":"Wakayama","name_alt":null,"name_local":"和歌山県","type":"Ken","type_en":"Prefecture","region":"Kinki","postal":"WK","region_code":"JPN-KIN"},"geometry":{"type":"MultiPolygon","coordinates":[[[[135.85621178500006,33.466498114],[135.85287519600004,33.462144273000106],[135.8296004570001,33.450832424000126],[135.82667076900006,33.45099518400018],[135.81853274800008,33.4604352890001],[135.80925540500013,33.463324286000116],[135.80404707100004,33.46287669500013],[135.7994083990001,33.46381256700012],[135.80144290500002,33.47195058800004],[135.80982506600017,33.47805410400012],[135.83676191500015,33.476629950000145],[135.8550724620002,33.47349681200008],[135.85873457100016,33.471665757000025],[135.85621178500006,33.466498114]]],[[[135.64684207620073,34.371752428231915],[135.65908939006331,34.32322825807758],[135.66281009311123,34.28493602108058],[135.6688562361263,34.27263703127399],[135.69448774631238,34.24860748974383],[135.709060500142,34.225353095469],[135.70844038341707,34.21289907513231],[135.7011023301085,34.20592275613036],[135.66110477076856,34.204449977784336],[135.64994266162446,34.20052256916121],[135.64002078682998,34.19346873579359],[135.63288943909632,34.18458038977322],[135.61516442299964,34.15695933730355],[135.58710412005908,34.129105739938],[135.57501183492835,34.11150991505055],[135.55108564708482,34.082467760179085],[135.54302412336463,34.064561876029714],[135.54643476805003,34.05073843013447],[135.55403120287772,34.04169505538259],[135.56540001759677,34.03562307394573],[135.57129113188037,34.02851756373458],[135.5795076843323,34.01565013314713],[135.58472700414794,33.99841604346567],[135.6064827816551,33.97720286741834],[135.61330407102602,33.95485280980937],[135.6106685726966,33.937256984921916],[135.60353722496293,33.916534736189035],[135.59826622920323,33.89012807874791],[135.60291710823802,33.87509023692492],[135.60896325125307,33.86382477499343],[135.618575066786,33.85713267683151],[135.62823856006153,33.855969956848114],[135.63738528939965,33.859070543171086],[135.65397342303507,33.872558092282176],[135.6682361194013,33.87762238246698],[135.68218875470737,33.87989614469136],[135.69634809828605,33.878914292760484],[135.73603559836423,33.86958669716837],[135.74709435382138,33.86914744669737],[135.75825646386463,33.8711369898801],[135.7705037777271,33.875400296186754],[135.78523156118754,33.879043483969596],[135.80073449100396,33.876537176849254],[135.81727094869532,33.87222219549791],[135.84765669160296,33.83814158796399],[135.8465198100412,33.82496409811462],[135.84682986930304,33.81741933923111],[135.8516874530135,33.80266571734897],[135.86315962141933,33.78708527316685],[135.90243371034754,33.74750112587621],[135.91995201996977,33.735589707898626],[135.92878869004593,33.72357493713368],[135.93824547684724,33.71429901838492],[135.9508028499716,33.70393789311926],[135.96713260298728,33.698563544571996],[135.99373956985735,33.68625974353479],[135.99057050900015,33.68252187700001],[135.98072350400005,33.65298086100013],[135.96159915500007,33.64252350500006],[135.95728600400017,33.62571849200005],[135.93706668399997,33.61747297900003],[135.9387364620002,33.60394802800006],[135.95987107500017,33.5930882250001],[135.94607134200012,33.577809933000125],[135.91253492700017,33.54768686700014],[135.89420900499996,33.54164240700014],[135.88477623800023,33.52899811400012],[135.8280632870001,33.51364825899999],[135.80918398599997,33.50503721300002],[135.79799322100004,33.49516148700009],[135.78296949000017,33.47289128700008],[135.79021590700003,33.45339146900004],[135.7892632630002,33.44106232400016],[135.77202431600008,33.44491902400013],[135.760020379,33.43333567900008],[135.753846014,33.45157716400011],[135.77075201000005,33.46822920000007],[135.76557060700023,33.481545488000066],[135.66822350400017,33.490464585000055],[135.63754316500015,33.49461497599999],[135.49076302200004,33.54122717300005],[135.44483483200023,33.550848700000174],[135.40919030000012,33.57420482000008],[135.39750451600017,33.58258693600011],[135.38732414300003,33.59406731700001],[135.38681334100013,33.60783872000012],[135.39234459700012,33.61888255400014],[135.380707227,33.63711172100001],[135.37501061300011,33.64313385600012],[135.369395379,33.644964911],[135.35866231200023,33.65420731400009],[135.34196725399997,33.65721093600011],[135.32769512600012,33.671192935000036],[135.3429445310002,33.6938983510001],[135.3792142130002,33.69811089400004],[135.40235436300006,33.701117255],[135.39161217500018,33.71356842700011],[135.34083092500012,33.745306708000086],[135.32138786300007,33.75292358100013],[135.31210223400004,33.7655287840001],[135.2940207730002,33.76371566600001],[135.264345035,33.78131573100008],[135.2325826480002,33.78199800700004],[135.22984796100005,33.798554135000145],[135.19646243600002,33.81476471600011],[135.17335045700005,33.838324286000145],[135.1527576010001,33.87585417900014],[135.11868351100023,33.89293870400009],[135.10012023200014,33.88984017900013],[135.0654538490002,33.885571819000106],[135.05885950400003,33.8800328870001],[135.06130745400006,33.88987988000004],[135.06649658500024,33.896407725000145],[135.05736156500004,33.901297796],[135.06423797000005,33.90602024800005],[135.07912676300023,33.90602541400001],[135.07799229000008,33.91855214600015],[135.069559977,33.93066660300012],[135.084717046,33.94221372400001],[135.10122240100011,33.954437547000154],[135.09497587900003,33.958691242000114],[135.07733462100012,33.95898546600013],[135.0757372510001,33.97748793800015],[135.09199839900023,33.99203611100013],[135.113277088,33.99338693300008],[135.1279350470002,33.998605234000095],[135.15316816500015,34.00975169499999],[135.1616317070001,34.02496979400014],[135.16277103000002,34.03974030200014],[135.15308678500017,34.048570054],[135.13331139400023,34.058294989000146],[135.11109459700018,34.06574127800012],[135.09449303500006,34.06761302299999],[135.1149194670002,34.10179271000008],[135.11736087300002,34.103420315],[135.12549889400023,34.106146552000084],[135.128672722,34.108587958],[135.1305444670002,34.11322663000011],[135.13062584700018,34.12238190300012],[135.12283938400012,34.13710111500002],[135.14877062399998,34.13807629800006],[135.1870223320001,34.135931708000086],[135.18995201900023,34.149603583000115],[135.17969811300011,34.16583893400015],[135.16585549400006,34.18672339300009],[135.14877363400015,34.185614325000174],[135.13542728000007,34.22768789300012],[135.11962891700003,34.24220217300014],[135.09266843600008,34.25988713800014],[135.06104364700016,34.26727491900006],[135.07129967500012,34.2857933610001],[135.0852713040758,34.299181985920725],[135.09973570803655,34.280500099799795],[135.1205814795517,34.27571120630721],[135.1884710903685,34.2743027079036],[135.31259891230988,34.29733836547324],[135.33321780825517,34.30493480120016],[135.4568795106808,34.33464874874069],[135.4794104354432,34.33501048394665],[135.4925879252925,34.332168280941445],[135.508866002364,34.33087636974865],[135.52519575358113,34.33464874874069],[135.6010567571635,34.368496812278025],[135.64684207620073,34.371752428231915]]]]}},{"type":"Feature","properties":{"iso_3166_2":"JP-12","name":"Chiba","name_alt":"Tiba|Tsiba","name_local":"千葉県","type":"Ken","type_en":"Prefecture","region":"Kanto","postal":"CH","region_code":"JPN-KNT"},"geometry":{"type":"Polygon","coordinates":[[[139.79170535711654,36.07480093051851],[139.80545128774673,36.07779816315474],[139.86596439024441,36.00508942273865],[139.93236860612626,35.93847850218114],[139.96962731344973,35.91393219671346],[140.12734378498766,35.85442678546772],[140.16977013618282,35.84419485141126],[140.1896655617162,35.842902940218494],[140.31994184793797,35.850680243098765],[140.345573358124,35.85543447492114],[140.36779422362451,35.878430488576214],[140.39280561708557,35.88489004184191],[140.461431920147,35.892434800725425],[140.5514522646103,35.88855906804653],[140.56964236870033,35.88383067554517],[140.62571129773818,35.85365163821254],[140.670824823207,35.8416368683468],[140.69273563034506,35.83267100706129],[140.71087405759158,35.81972606120871],[140.75541914317893,35.77401825653723],[140.7768131863794,35.75688751874395],[140.7989823750366,35.74378754326057],[140.82476891485356,35.735390122755916],[140.85717003756713,35.73244456606383],[140.85946791781248,35.73537802957986],[140.8650008470001,35.733628648000064],[140.87427819100003,35.72923411700009],[140.87940514400015,35.72052643400011],[140.86876177700003,35.69675396200003],[140.86066467200015,35.68779101800007],[140.8468530610001,35.69525788000007],[140.84021114000006,35.704379042000056],[140.82830145700007,35.71396943700009],[140.8031441980001,35.70937139000003],[140.770890109,35.697051422000044],[140.72078890300008,35.68251721100006],[140.71626055100006,35.69879072800006],[140.66105645600015,35.688634978000096],[140.5961624470001,35.652075298000085],[140.48346749700016,35.5659910550001],[140.4232195130001,35.490644380000106],[140.38591856900007,35.380998573000085],[140.40503991000003,35.32892487200013],[140.4130965500001,35.301214911000045],[140.4040837080001,35.25950925500007],[140.39883763000006,35.22209519200007],[140.39419527500002,35.19659166200012],[140.377629651,35.176356909000106],[140.34893519300016,35.18051589700005],[140.33047969900008,35.15778336400004],[140.33353722800013,35.14234798800004],[140.32121361200012,35.13039407800002],[140.303349485,35.13340288500012],[140.2943684120001,35.14663912100008],[140.27891015,35.13198816600004],[140.25332548800014,35.13462394500007],[140.23738075200004,35.112429525000096],[140.2000669510001,35.1149842640001],[140.1555132030001,35.11807535700004],[140.13460281400006,35.12264536400008],[140.10595281100007,35.0976030030001],[140.10080523400006,35.07575134500004],[140.07548783400006,35.05926940100005],[140.05553662300014,35.058868491000084],[140.0211555850001,35.03842885800009],[139.99096763300014,35.02050211200009],[139.98057300900012,35.00751446600009],[139.9748695020001,34.99019749100009],[139.9640643580001,34.97595964400003],[139.964648033,34.95928462900011],[139.96213888100016,34.940850503000036],[139.95238826500008,34.92797425400002],[139.94303968000008,34.918649772000094],[139.9263958460001,34.907356652000146],[139.90079996000009,34.903012715000074],[139.88293893700006,34.901305321000024],[139.87064389700004,34.904726639000046],[139.855791469,34.90243585200005],[139.84309961700006,34.89998186000011],[139.83814537900003,34.90468984600011],[139.821984262,34.912109830000134],[139.82496460300007,34.921371227000094],[139.82318224300002,34.934921744000036],[139.81083100900003,34.94353955300005],[139.77881155300014,34.95413884000004],[139.75699355500007,34.95628367400005],[139.75243898200006,34.96473781400002],[139.7527773650001,34.97580871200006],[139.76530374200001,34.976499991000054],[139.78362189500007,34.97425062900001],[139.79445380400006,34.9734485380001],[139.80851286700016,34.976165857000126],[139.82044658100006,34.98136827700009],[139.8271049220001,34.9901935180001],[139.84030331500009,34.991003171000045],[139.8586531910001,34.986802476],[139.86548912900003,34.99054596600004],[139.86996504000007,34.999335028000104],[139.8676863940001,35.01333242400008],[139.8559676440001,35.02081940300013],[139.83578535200007,35.02724844000005],[139.83464603000004,35.0374209660001],[139.8462020190001,35.046820380000014],[139.8496199880001,35.05801015800003],[139.8474227220001,35.06932200700001],[139.83806399800005,35.08832428600002],[139.83578535200007,35.09926992400008],[139.83643639400015,35.13519928600007],[139.81897429600008,35.15766287700012],[139.82211347700007,35.17059967700007],[139.8194346680001,35.18504826700007],[139.8246088240001,35.19906390000003],[139.85195684100006,35.21466754000002],[139.8651506070001,35.224098964000035],[139.86632662800002,35.24620537700011],[139.8483179050001,35.27171458500007],[139.84933413400006,35.29355360000005],[139.80813764700008,35.30548489100002],[139.78215300800002,35.31417710000008],[139.78100337900003,35.31806065600006],[139.8021897060001,35.31735035200009],[139.82415804200002,35.32842398900007],[139.824667997,35.34700932700014],[139.83874471700005,35.35929899400011],[139.84477673600009,35.37620508400005],[139.8927430760001,35.36418368900004],[139.90786505500006,35.3787185920001],[139.90731450700002,35.392304486000114],[139.900121044,35.42310445500007],[139.91282345400015,35.43443618000009],[139.94075591000006,35.442517644000134],[139.95867218600011,35.45620969700005],[139.98233663500002,35.458668431],[140.005859289,35.47342712000008],[140.0201180250001,35.49121049500013],[140.041455089,35.51377297500011],[140.07188712900012,35.542856802000074],[140.09015640100012,35.54084883200002],[140.09782201000013,35.55532235600012],[140.10204868400007,35.567087494000134],[140.086119779,35.56680512400004],[140.08301842500015,35.585598049000026],[140.07960045700014,35.603583075000074],[140.06382667700012,35.61534216400011],[140.04761498000005,35.630775009000104],[140.03287822000004,35.64099547700002],[140.00894986300005,35.659759819000044],[139.99577884200005,35.65668366100007],[139.98361433200006,35.66864466800004],[139.95041397400007,35.67259201500008],[139.92053189700005,35.662066673000055],[139.93957929100014,35.6368914980001],[139.91207079900005,35.624087461000016],[139.89716783000011,35.61437375800011],[139.8911238940001,35.623114325000046],[139.8794051440001,35.6250674500001],[139.8708602220001,35.63129303600007],[139.86424285686127,35.63206757687868],[139.8769714697575,35.660821031265584],[139.88115726079894,35.67343008123328],[139.885963170364,35.69774384180482],[139.8639490086398,35.778126533212884],[139.87480106032064,35.85037018473622],[139.8718555027292,35.869361274503234],[139.86653283102532,35.88881745046493],[139.85785118968062,35.900754705964914],[139.8386275577156,35.922898057998964],[139.83056603399518,35.93791006140023],[139.79645958893883,36.01891286953327],[139.78591759741914,36.03679291436154],[139.75284468023779,36.07955516234088],[139.7717582538403,36.08002025033423],[139.79170535711654,36.07480093051851]]]}},{"type":"Feature","properties":{"iso_3166_2":"JP-08","name":"Ibaraki","name_alt":null,"name_local":"茨城県","type":"Ken","type_en":"Prefecture","region":"Kanto","postal":"IB","region_code":"JPN-KNT"},"geometry":{"type":"Polygon","coordinates":[[[140.797286048648,36.84648905231134],[140.79314212300005,36.83755117400011],[140.75171959700003,36.78506094000005],[140.7418725920001,36.768459377000084],[140.6938582690001,36.6179873720001],[140.63892662900003,36.53974030200004],[140.6235457690001,36.50608958500001],[140.61011803500008,36.4339053410001],[140.6105249360001,36.41815827000005],[140.6235457690001,36.37962474200009],[140.6247664720001,36.3635928410001],[140.6168725920001,36.33779531500005],[140.5793819980001,36.30475890300008],[140.56410737100015,36.283095802000105],[140.56643664500012,36.24583748900011],[140.57837975400003,36.16095612200007],[140.6099023050001,36.09505676000006],[140.646034105,36.013320444000044],[140.78931725400003,35.8086612000001],[140.83082116000003,35.76105377800013],[140.84164472700002,35.74241771000004],[140.8525496750001,35.737534898000064],[140.85946699300007,35.73537832200006],[140.85946791781248,35.73537802957986],[140.85717003756713,35.73244456606383],[140.82476891485356,35.735390122755916],[140.7989823750366,35.74378754326057],[140.7768131863794,35.75688751874395],[140.75541914317893,35.77401825653723],[140.71087405759158,35.81972606120871],[140.69273563034506,35.83267100706129],[140.670824823207,35.8416368683468],[140.62571129773818,35.85365163821254],[140.56964236870033,35.88383067554517],[140.5514522646103,35.88855906804653],[140.461431920147,35.892434800725425],[140.39280561708557,35.88489004184191],[140.36779422362451,35.878430488576214],[140.345573358124,35.85543447492114],[140.31994184793797,35.850680243098765],[140.1896655617162,35.842902940218494],[140.16977013618282,35.84419485141126],[140.12734378498766,35.85442678546772],[139.96962731344973,35.91393219671346],[139.93236860612626,35.93847850218114],[139.86596439024441,36.00508942273865],[139.80545128774673,36.07779816315474],[139.79170535711654,36.07480093051851],[139.7717582538403,36.08002025033423],[139.75284468023779,36.07955516234088],[139.7334660177425,36.084903673365886],[139.7240092309412,36.089244493138835],[139.7109350929801,36.098287868790095],[139.6855102892684,36.12549551010966],[139.67899905825993,36.140688381563564],[139.67403812086252,36.15221222591353],[139.6537292832798,36.20313935040073],[139.66778527227245,36.2011498072178],[139.67667361919217,36.20089142479941],[139.70364871561577,36.204689643112516],[139.74617841959832,36.218203029746036],[139.78199018789678,36.23432607718664],[139.79180870990405,36.24158661612941],[139.80638146373354,36.265952053544396],[139.8172335154144,36.28000804343651],[139.84038455600245,36.299955145813385],[139.85867801288003,36.305200304050715],[139.87449100195818,36.30439931927319],[139.88337934797852,36.30512278878567],[139.89485151638428,36.309308579827075],[139.90735721176588,36.32656850793029],[139.95350426690834,36.362121893810354],[139.9652864927774,36.366540228848436],[139.97608686671555,36.36821971276953],[139.99438032359302,36.364860744927455],[140.00285525936272,36.364369819411564],[140.01417239813765,36.364860744927455],[140.03928714438626,36.37338735574184],[140.05484175014658,36.38333506895819],[140.0864677274036,36.39160329825356],[140.1142696470265,36.39602163329175],[140.14419030194085,36.39095734310695],[140.15721276305857,36.392533474240366],[140.17028690012035,36.40160268831343],[140.1811389509018,36.41488353095016],[140.2003625837662,36.459273586906534],[140.2104394881918,36.47622345574791],[140.2300248562621,36.49963288055301],[140.23539920480937,36.5168669702345],[140.23762129108968,36.54133576133631],[140.22981814978777,36.62355296539701],[140.22165327417918,36.66047577593625],[140.2210331556555,36.677193102579594],[140.22795779781404,36.68941457802035],[140.24227217012447,36.700318304745934],[140.25932539265278,36.708999946090614],[140.26676679874873,36.718637600045156],[140.25482954324883,36.74385569908125],[140.2506437522074,36.761296495237076],[140.2513155457758,36.80943309176374],[140.2464579611659,36.84191172884317],[140.2467680204278,36.85986928983587],[140.24537275644752,36.87635407248246],[140.23994673105676,36.89624949801589],[140.23731123272722,36.924826564894005],[140.2860421075572,36.90586131444809],[140.3055757996833,36.89384654458232],[140.32821007723334,36.87426117651205],[140.3544617050436,36.85666535072531],[140.37864627530536,36.83594310199254],[140.40691328292172,36.815763454719615],[140.44985639895356,36.794576117094124],[140.46928673739296,36.79222484050399],[140.48122399289286,36.797108263535534],[140.49672692270929,36.81274038276251],[140.5064937678731,36.819509996189396],[140.51476199806774,36.82953522377153],[140.53243533732086,36.8456065943688],[140.56468143130292,36.86317658083453],[140.5698490742754,36.87139313418575],[140.5668518407398,36.8829944929015],[140.56147749219252,36.8973088652119],[140.55972049390567,36.90823843035923],[140.56147749219252,36.91790192273558],[140.57000410390617,36.92606679924336],[140.5757401876595,36.92673859281177],[140.583026565024,36.92247528740458],[140.5879358255778,36.914723822946],[140.59868452357188,36.90513784403623],[140.61439415896325,36.896146145228414],[140.68777469294764,36.87351186857785],[140.69816165573587,36.868602607124586],[140.797286048648,36.84648905231134]]]}},{"type":"Feature","properties":{"iso_3166_2":"JP-14","name":"Kanagawa","name_alt":null,"name_local":"神奈川県","type":"Ken","type_en":"Prefecture","region":"Kanto","postal":"KN","region_code":"JPN-KNT"},"geometry":{"type":"Polygon","coordinates":[[[139.46748742080774,35.488919379525726],[139.4705880071308,35.49003042356526],[139.47255171099272,35.493544420138875],[139.47399865091705,35.49873790153299],[139.47477379817224,35.50809133644597],[139.4718282405808,35.541810207874846],[139.47596235567812,35.54997508438262],[139.48547081932287,35.549639186699096],[139.4892948751583,35.55467763936156],[139.48981163999508,35.558785916037124],[139.48485070169858,35.56581391008385],[139.45958092671833,35.58570933741595],[139.45322472624002,35.59227224436859],[139.45446495969009,35.59731069613167],[139.46206139541704,35.59875763605609],[139.47988976520054,35.59069611323508],[139.48779625928995,35.59178131795352],[139.49167199106944,35.59658722571993],[139.49559939969254,35.60289175115338],[139.5028341011129,35.60751679086715],[139.51373782783844,35.61139252444542],[139.52738040568113,35.614028021875754],[139.5394210148679,35.612606920373054],[139.6548661639423,35.56413442616284],[139.66251427561332,35.55925100403067],[139.66799197784752,35.555091051410955],[139.69775760313092,35.538089504826786],[139.78452233343893,35.51178620017305],[139.78662138357868,35.51152965048249],[139.77857506600003,35.50185781500002],[139.74455011300006,35.48430496600014],[139.71407684000013,35.46473072500007],[139.68822173300015,35.46110650400004],[139.66689706,35.46793427800009],[139.6516219410001,35.46458567900004],[139.64230183700016,35.45426118200004],[139.66221936600004,35.446480587000025],[139.68054456100003,35.43838609900007],[139.68739709600004,35.43217553000008],[139.68204337700007,35.41881092200009],[139.68685957100007,35.40070221600013],[139.67457116000008,35.4008242860001],[139.6499959250001,35.410550808000096],[139.6357919080001,35.40163242700007],[139.64214195600005,35.388480564000076],[139.6572384790001,35.37702195400004],[139.654633009,35.3394229190001],[139.64966881600003,35.326646226000065],[139.65023847700002,35.310370184000135],[139.64835814200006,35.29789050700006],[139.6575045670001,35.286647050000056],[139.66438993500003,35.298780810000096],[139.67689930500006,35.29153718100008],[139.69418379000007,35.26874420800007],[139.73422804800015,35.26520292300006],[139.745453321,35.24896881700005],[139.725922071,35.233303127000056],[139.72934004,35.22931549700007],[139.73096764400015,35.225897528000075],[139.73226972700002,35.22256094000005],[139.72802465700016,35.20708410000006],[139.68879598000007,35.20913368600009],[139.666456229,35.193893224000135],[139.660589416,35.178232492000035],[139.6705835300001,35.159979559000135],[139.68034915500004,35.149603583000044],[139.68506920700014,35.14044830900005],[139.6750594410001,35.136460679000066],[139.66431725400008,35.134833075000046],[139.64151397500007,35.13963386500009],[139.625336134,35.13178131700005],[139.6162849360001,35.13400170800011],[139.6114520120001,35.141972689000056],[139.61606961400003,35.15262239800006],[139.6143019980001,35.1740426960001],[139.60179274300003,35.20183531900011],[139.62395895200007,35.211617096000055],[139.6199183290001,35.21974007600008],[139.604322561,35.224233507000065],[139.59759518300012,35.23868757400007],[139.56949795300005,35.268857317000084],[139.56625410200007,35.27606842700007],[139.56068062000014,35.28692774600009],[139.54851321700005,35.28790924700013],[139.5441777970001,35.30789279800004],[139.5266033730001,35.30203700900003],[139.50667053000012,35.30417269500009],[139.48666425900007,35.30052317900001],[139.46691429100014,35.313318584000086],[139.41485572000016,35.31881465900008],[139.3300220760001,35.30447567700011],[139.2820504240001,35.29619758400014],[139.23336693300007,35.285324419000034],[139.18353782100013,35.26326671600009],[139.14595743700005,35.23522698500008],[139.14242597700002,35.18402741100007],[139.15805097700002,35.136460679000066],[139.12077055300006,35.15025745000014],[139.09443084024332,35.11747362336345],[139.0728861840501,35.124833075086315],[139.05190555199954,35.12870880776529],[139.0287545114116,35.13555593555796],[139.01934939965497,35.14116282810207],[139.01237308155243,35.146795559067726],[139.0026062363886,35.15780263948028],[138.98389936656253,35.18299490009457],[138.97356408061773,35.20495738407598],[138.96860314322043,35.23025299747778],[138.97061852392574,35.24976085118237],[138.9771297549342,35.261672268260554],[138.99340783110642,35.27686513881508],[138.99805871014138,35.284771632904466],[139.00028079642152,35.29055939440059],[139.00028079642152,35.301411445182055],[138.99867882686635,35.312961127054365],[138.9936145366815,35.33370921510823],[138.99020389199603,35.342390855553504],[138.98834354092162,35.34848867451271],[138.98679324820978,35.35618846302714],[138.98751671772237,35.37381012633631],[138.98658654173556,35.38114818054413],[138.97490766775456,35.38670339624474],[138.96457238181,35.38840871768815],[138.90033857626418,35.3809414740698],[138.90607466001745,35.40083690050261],[138.9332564638147,35.437062079051714],[138.9519633318422,35.44969696744113],[138.97015343593233,35.457887682370625],[138.99092736240777,35.46478648520815],[139.08048261887768,35.50493907327956],[139.09102461219607,35.51400828735254],[139.09924116374862,35.5256613229117],[139.10626915869472,35.5392780623327],[139.1165010927512,35.58477916142914],[139.1175862983689,35.59787913691261],[139.11371056479072,35.63079702446316],[139.12177208941034,35.65399974189455],[139.14735192275293,35.650020657327445],[139.1827502790021,35.63144297871048],[139.20383426294092,35.623717353573],[139.24527876220515,35.59167796516593],[139.26636274614378,35.582143663099515],[139.2977303409824,35.575296536206224],[139.34196536730786,35.57322947775816],[139.37726036987016,35.56676992449238],[139.39906782422065,35.5563054473385],[139.4172062523666,35.53984650311364],[139.4260429224429,35.52790924671436],[139.45818566273806,35.49297597935794],[139.46314660103474,35.4898237170909],[139.46748742080774,35.488919379525726]]]}},{"type":"Feature","properties":{"iso_3166_2":"JP-11","name":"Saitama","name_alt":null,"name_local":"埼玉県","type":"Ken","type_en":"Prefecture","region":"Kanto","postal":"ST","region_code":"JPN-KNT"},"geometry":{"type":"Polygon","coordinates":[[[139.4730684758295,36.178076280096235],[139.51420291583196,36.1928299019784],[139.56308882119208,36.19096955000467],[139.61001102089187,36.17944570655408],[139.67403812086252,36.15221222591353],[139.67899905825993,36.140688381563564],[139.6855102892684,36.12549551010966],[139.7109350929801,36.098287868790095],[139.7240092309412,36.089244493138835],[139.7334660177425,36.084903673365886],[139.75284468023779,36.07955516234088],[139.78591759741914,36.03679291436154],[139.79645958893883,36.01891286953327],[139.83056603399518,35.93791006140023],[139.8386275577156,35.922898057998964],[139.85785118968062,35.900754705964914],[139.86653283102532,35.88881745046493],[139.8718555027292,35.869361274503234],[139.87480106032064,35.85037018473622],[139.8639490086398,35.778126533212884],[139.80452111175993,35.790348009552986],[139.75780561673588,35.795283108528594],[139.7401322783819,35.79140737584973],[139.73067548978207,35.78716990796488],[139.72132205576816,35.778126533212884],[139.71470747287157,35.77642120997089],[139.70612918521368,35.77564606451426],[139.64127526294294,35.77711884196094],[139.6257723331267,35.77301056618467],[139.61507531107668,35.76748118710711],[139.60360314267086,35.75903209155777],[139.53559695903243,35.75156484614067],[139.5287756696614,35.75926463555447],[139.5262952009628,35.76732615837548],[139.52288455627718,35.77479340289324],[139.51668338363123,35.77755809243203],[139.50738162736013,35.777661445219536],[139.49280887263131,35.77383738938397],[139.46717736244528,35.76138336814793],[139.45260460771647,35.75637075480654],[139.43431115083888,35.75223663970908],[139.41147016771401,35.751978258190064],[139.38449507129042,35.754923813982856],[139.2895137876311,35.80210439700028],[139.2715303900154,35.80897736321475],[139.0601737812949,35.85305735900991],[139.04560102836467,35.85881928208423],[139.01361331590186,35.877293606115046],[139.00394982262623,35.87886973724858],[138.99371789036832,35.876544298180875],[138.95289350782912,35.8578891060973],[138.92281782418326,35.835384019756674],[138.86897098232487,35.83776113476853],[138.8306270693837,35.84546092418233],[138.79760582904566,35.856002915701964],[138.7156986842469,35.89646556213603],[138.6995239608621,35.94982147937779],[138.700919223943,35.96953603775788],[138.71642215375937,35.98105988210784],[138.73182173078823,35.999560045459674],[138.73213178915074,36.000696926122174],[138.73228681878163,36.00188548452749],[138.73569746256788,36.01209158016232],[138.74143354722042,36.019868883042534],[138.75073530529005,36.02718109792934],[138.7642745303453,36.03216787374831],[138.7827230168537,36.0351651072838],[138.85827396117435,36.07273387296985],[138.95702762292638,36.1111294618552],[139.0182125180932,36.128906154795175],[139.0337671247529,36.13867300085829],[139.04074344285556,36.14975759473725],[139.04229373556734,36.16440786383191],[139.04229373556734,36.1757250035061],[139.04436079311614,36.18665456775415],[139.0496317888759,36.19649892818293],[139.0896293482158,36.249028022225446],[139.10823286435522,36.26874258150494],[139.11185021371642,36.2708613140984],[139.1380501646833,36.270602932579266],[139.17763431197386,36.258381456239164],[139.19277550658433,36.25760630988327],[139.1987182959126,36.254428209194515],[139.23241132981906,36.242180895331984],[139.30429324793505,36.228228258227546],[139.378603957007,36.222492174474326],[139.41250369738776,36.21174347648025],[139.44423302563365,36.19631806102967],[139.4730684758295,36.178076280096235]]]}},{"type":"Feature","properties":{"iso_3166_2":"JP-09","name":"Tochigi","name_alt":"Totigi","name_local":"栃木県","type":"Ken","type_en":"Prefecture","region":"Kanto","postal":"TC","region_code":"JPN-KNT"},"geometry":{"type":"Polygon","coordinates":[[[140.23731123272722,36.924826564894005],[140.23994673105676,36.89624949801589],[140.24537275644752,36.87635407248246],[140.2467680204278,36.85986928983587],[140.2464579611659,36.84191172884317],[140.2513155457758,36.80943309176374],[140.2506437522074,36.761296495237076],[140.25482954324883,36.74385569908125],[140.26676679874873,36.718637600045156],[140.25932539265278,36.708999946090614],[140.24227217012447,36.700318304745934],[140.22795779781404,36.68941457802035],[140.2210331556555,36.677193102579594],[140.22165327417918,36.66047577593625],[140.22981814978777,36.62355296539701],[140.23762129108968,36.54133576133631],[140.23539920480937,36.5168669702345],[140.2300248562621,36.49963288055301],[140.2104394881918,36.47622345574791],[140.2003625837662,36.459273586906534],[140.1811389509018,36.41488353095016],[140.17028690012035,36.40160268831343],[140.15721276305857,36.392533474240366],[140.14419030194085,36.39095734310695],[140.1142696470265,36.39602163329175],[140.0864677274036,36.39160329825356],[140.05484175014658,36.38333506895819],[140.03928714438626,36.37338735574184],[140.01417239813765,36.364860744927455],[140.00285525936272,36.364369819411564],[139.99438032359302,36.364860744927455],[139.97608686671555,36.36821971276953],[139.9652864927774,36.366540228848436],[139.95350426690834,36.362121893810354],[139.90735721176588,36.32656850793029],[139.89485151638428,36.309308579827075],[139.88337934797852,36.30512278878567],[139.87449100195818,36.30439931927319],[139.85867801288003,36.305200304050715],[139.84038455600245,36.299955145813385],[139.8172335154144,36.28000804343651],[139.80638146373354,36.265952053544396],[139.79180870990405,36.24158661612941],[139.78199018789678,36.23432607718664],[139.74617841959832,36.218203029746036],[139.70364871561577,36.204689643112516],[139.67667361919217,36.20089142479941],[139.66778527227245,36.2011498072178],[139.6537292832798,36.20313935040073],[139.63848473498257,36.22574778952884],[139.60546349464448,36.25241282848927],[139.5886686554341,36.2601126170037],[139.5028341011129,36.27437531247068],[139.4823702329998,36.27515045792728],[139.46826256716372,36.27300588601284],[139.4548783708401,36.268845934292415],[139.44051232258568,36.268484199086544],[139.42356245284492,36.279103704972044],[139.40077314656344,36.30036855696332],[139.3913163597622,36.31098806374817],[139.3835648953036,36.32346792340596],[139.35374759317693,36.348065903918325],[139.34351566001965,36.35855622039318],[139.3383996929914,36.368555610453086],[139.33653934101773,36.37912344039444],[139.33777957626643,36.38883860871482],[139.34088016169005,36.39571157492921],[139.34506595273155,36.402016100362744],[139.356073033144,36.41514191336856],[139.36320437997813,36.42227326110205],[139.3783972523313,36.443848172355246],[139.3835648953036,36.45906688133147],[139.39079959492528,36.47508657508541],[139.39302168210486,36.48748891947804],[139.39705244441478,36.498444322147805],[139.40309858563114,36.50810781542333],[139.41178022697585,36.51813304300546],[139.4164311060107,36.52588450836333],[139.41891157381013,36.532705796835074],[139.42712812716127,36.54358368603826],[139.43865197241058,36.55151601854945],[139.44454308489537,36.56151540770986],[139.44764367121843,36.57270335527568],[139.4458866720322,36.58593252196826],[139.43586144355078,36.595105088828745],[139.4234074241133,36.60045359985375],[139.36366946797148,36.60662893317871],[139.35374759317693,36.60970368108005],[139.3413452496835,36.61536225046743],[139.31204471239346,36.63215709147664],[139.30594689343434,36.64474030212324],[139.30718712778372,36.658925483224465],[139.31276818280537,36.67634044005919],[139.32568729113552,36.70465912541829],[139.3304415220586,36.71930939451295],[139.3288912293467,36.75656810183642],[139.33261193329406,36.76907379811726],[139.34212039603938,36.78054596652311],[139.35204227083415,36.79026113484349],[139.35932864819853,36.800363877690785],[139.3666150246636,36.80827037178025],[139.36894046373146,36.81429067637359],[139.3682686710623,36.823049832084024],[139.3607239121788,36.82953522377153],[139.35064700685388,36.83656321871763],[139.33917483934732,36.84870717979251],[139.3363843122861,36.86007599541085],[139.34026004496508,36.87175486939171],[139.35958702971755,36.90203725771326],[139.40790449429687,36.925136624155925],[139.4458866720322,36.956142482889305],[139.46299157140385,36.96270538984186],[139.509552036797,36.97490102776024],[139.67853397026653,37.05321666072035],[139.74741865484702,37.07701365825366],[139.7644202014311,37.07995921494583],[139.79118859317896,37.08122528681753],[139.82234948064405,37.105539049187826],[139.86131351120963,37.130447088961915],[139.88585981667717,37.139180406250745],[139.9168656763099,37.14357290286722],[139.95815514504392,37.1393871118257],[140.09809492364178,37.105823269128564],[140.1134428238272,37.09802012782663],[140.16356896443614,37.0655156523255],[140.17628136629196,37.05892690695114],[140.1850146826814,37.05293244077953],[140.19090579606564,37.04342397713481],[140.19416141201953,37.03096995679812],[140.1988122910543,37.02019542128161],[140.20718387313724,37.01213389756131],[140.22547733001483,37.00414988910606],[140.2291980330628,37.00203115471405],[140.23043826741213,37.00104930278309],[140.2312650897121,36.999989936486344],[140.23452070476662,36.990248927945686],[140.2410319357752,36.94306834582753],[140.23731123272722,36.924826564894005]]]}},{"type":"Feature","properties":{"iso_3166_2":"JP-13","name":"Tokyo","name_alt":"Edo|Yedo|Tokio|T¢quio","name_local":"東京都","type":"To","type_en":"Metropolis","region":"Kanto","postal":"TK","region_code":"JPN-KNT"},"geometry":{"type":"MultiPolygon","coordinates":[[[[141.46794681100008,24.213771877000013],[141.46314537900017,24.212103583],[141.4557397800002,24.215887762000094],[141.45297285200004,24.222398179000024],[141.46021569100006,24.227362372000144],[141.46998131600017,24.226263739],[141.47071373800011,24.219183661000145],[141.46794681100008,24.213771877000013]]],[[[153.98365319100006,24.282945054],[153.97828209700018,24.282416083000115],[153.97201582100004,24.284816799000154],[153.97299238399998,24.289699611000046],[153.9812117850001,24.295355536000116],[153.98560631600017,24.291083075000117],[153.98365319100006,24.282945054]]],[[[153.96623782600008,24.30866120000003],[153.95346113400004,24.29250722900018],[153.94068444100017,24.311468817],[153.95370527400004,24.315822658000073],[153.96623782600008,24.30866120000003]]],[[[141.30258222700004,24.734361070000105],[141.28956139400023,24.726955471000124],[141.28980553500017,24.760239976000136],[141.29265384200002,24.773871161000088],[141.29948978000007,24.785874742000104],[141.31169681100002,24.79181549700003],[141.33025149800002,24.794094143],[141.34799238400004,24.793117580000043],[141.35775800900015,24.789618231000034],[141.36548912900017,24.777736721000096],[141.35726972700016,24.773423570000162],[141.34262129000015,24.772121486000074],[141.33057701900023,24.769110419000086],[141.32032311300023,24.758612372000115],[141.30258222700004,24.734361070000105]]],[[[141.29566491000006,25.424505927000027],[141.28744550900004,25.417710679],[141.27466881600017,25.427069403000118],[141.27051842500023,25.44037506700012],[141.27475019600016,25.451117255000057],[141.28825931100008,25.452541408000016],[141.2975366550002,25.44529857000019],[141.29948978000007,25.434800523000106],[141.29566491000006,25.424505927000027]]],[[[142.1432397800002,26.702215887000122],[142.1534936860002,26.70066966400016],[142.16586347700016,26.701320705000015],[142.16586347700016,26.694525458],[142.15430748800011,26.686468817000062],[142.15560957100004,26.67914459800015],[142.16578209700018,26.674383856000148],[142.18018639400023,26.67401764500012],[142.18018639400023,26.666571356000148],[142.175547722,26.663234768000123],[142.17481530000006,26.66152578300013],[142.175059441,26.6590843770001],[142.17269941500015,26.653509833],[142.18181399800008,26.65717194200012],[142.18620853000002,26.65790436400006],[142.18913821700008,26.654527085000055],[142.19320722700004,26.646063544000114],[142.18140709700006,26.644232489000117],[142.175547722,26.638657945000105],[142.175059441,26.63007233300003],[142.18018639400023,26.618801174000012],[142.159922722,26.632025458000058],[142.13900800900015,26.66250234600001],[142.11133873800006,26.721177476000108],[142.11768639400012,26.721747137000094],[142.12240644599999,26.720445054],[142.13184655000012,26.714992580000157],[142.13575280000012,26.70669179900007],[142.1432397800002,26.702215887000122]]],[[[142.24105879000015,27.084295966000084],[142.23462975400005,27.050034898000106],[142.21851647200006,27.040350653000147],[142.1985783210001,27.05109284100017],[142.18018639400023,27.078070380000142],[142.21436608200023,27.063788153000033],[142.21070397200018,27.072821356000148],[142.20557701900023,27.08095937700007],[142.19955488400015,27.087469794000143],[142.19320722700004,27.091742255000085],[142.20655358200023,27.09711334800012],[142.2208764980002,27.09833405200014],[142.23324629000015,27.094305731000176],[142.24105879000015,27.084295966000084]]],[[[142.22681725400005,27.10545482000019],[142.2213647800002,27.103786526000178],[142.21379642000008,27.10382721600017],[142.20476321700002,27.10866933800007],[142.2006942070001,27.113633531000104],[142.1946720710001,27.11513906500015],[142.18930097700004,27.11701080900012],[142.18832441500015,27.12067291900017],[142.1885685560001,27.126613674000012],[142.19052168100004,27.133693752000156],[142.19312584700006,27.13556549700003],[142.19621829500014,27.131577867000047],[142.220550977,27.120591539000188],[142.22698001400008,27.113836981000148],[142.2296655610002,27.108303127000127],[142.22681725400005,27.10545482000019]]],[[[142.1959741550002,27.15241120000003],[142.18921959700006,27.14549388200014],[142.1842554050002,27.158351955000157],[142.18531334700006,27.174139716000113],[142.19092858200023,27.185207424000126],[142.20045006600006,27.18329498900009],[142.20411217500012,27.173895575000145],[142.20183353000002,27.16274648600013],[142.1959741550002,27.15241120000003]]],[[[140.87818444100006,27.232611395000063],[140.86996504000015,27.218247789000188],[140.867930535,27.233954169000143],[140.87419681100008,27.238226630000085],[140.87818444100006,27.232611395000063]]],[[[142.21184329500002,27.494655666000128],[142.21306399800014,27.484605210000055],[142.208832227,27.497788804000024],[142.21184329500002,27.494655666000128]]],[[[142.1928817070001,27.616197007],[142.19532311300023,27.599107164000046],[142.17945397200012,27.612494208000058],[142.18311608200017,27.61945221600014],[142.1928817070001,27.616197007]]],[[[142.14291425900015,27.67194245000009],[142.1388452480002,27.667629299000097],[142.12517337300008,27.677435614000117],[142.12533613400004,27.680894273000135],[142.13331139400006,27.681911526000093],[142.141856316,27.679673570000105],[142.14291425900015,27.67194245000009]]],[[[142.11166425899998,27.725856838000126],[142.107188347,27.716742255000113],[142.1051538420002,27.72703685100005],[142.10881595100014,27.729681708000143],[142.11166425899998,27.725856838000126]]],[[[142.08513431100002,27.72606028900016],[142.08057701900006,27.71694570500007],[142.07862389400023,27.727240302],[142.0822860040001,27.7298851580001],[142.08513431100002,27.72606028900016]]],[[[140.31861412900005,30.47553131700009],[140.30648847700016,30.47361888200011],[140.30160566499998,30.48069896],[140.30144290500002,30.486273505],[140.30762780000006,30.491156317000062],[140.31714928500017,30.491156317000062],[140.32593834700006,30.485174872000144],[140.31861412900005,30.47553131700009]]],[[[140.04566491,31.443304755000113],[140.04346764400012,31.443101304000052],[140.0444442070001,31.44505442900011],[140.04566491,31.443304755000113]]],[[[140.0431421230002,31.444566148000106],[140.04151451900006,31.443101304000052],[140.04127037900005,31.444159247000115],[140.04135175900004,31.446478583000086],[140.0431421230002,31.444566148000106]]],[[[139.75709069100012,32.470363674000126],[139.77377363400004,32.44098541900003],[139.75635826900017,32.452297268],[139.75709069100012,32.470363674000126]]],[[[139.6905216810002,33.13275788000014],[139.6979272800002,33.116278387000065],[139.6858830090001,33.116888739],[139.67986087300008,33.123114325000145],[139.67562910200016,33.13556549700009],[139.68100019599999,33.137396552000055],[139.6905216810002,33.13275788000014]]],[[[139.8452254570001,33.04677969000012],[139.8357853520001,33.03978099200005],[139.82097415500013,33.040269273000135],[139.8029077480002,33.047430731000176],[139.78760826900023,33.058417059000035],[139.77637780000023,33.07998281500015],[139.74341881600006,33.118597723],[139.7397567070001,33.133246161000116],[139.75082441500015,33.14524974200005],[139.76775149800002,33.14988841400016],[139.79102623800023,33.135321356000034],[139.81316165500002,33.123765367000104],[139.83887780000018,33.116685289000046],[139.86231530000023,33.107001044000086],[139.87745201900023,33.08759186400009],[139.869395379,33.075506903000175],[139.8452254570001,33.04677969000012]]],[[[139.29908287900017,33.65070221600017],[139.29908287900017,33.65009186400003],[139.29615319100017,33.651068427],[139.29908287900017,33.65070221600017]]],[[[139.62289472700016,33.856756903000175],[139.61019941499998,33.85285065300009],[139.59424889400006,33.85472239800005],[139.58130944100017,33.86253489800005],[139.57976321700002,33.88031647300012],[139.5924585300002,33.89581940300006],[139.60962975400005,33.896389065],[139.61898847700016,33.89012278900016],[139.62281334700018,33.885565497000115],[139.6295679050002,33.87173086100002],[139.628754102,33.86570872600011],[139.62289472700016,33.856756903000175]]],[[[139.53451582099999,34.037543036000145],[139.50611412900017,34.03587474200013],[139.48707116000017,34.06077708500008],[139.49439537900017,34.09275950700008],[139.52344811300017,34.11237213700004],[139.55632571700008,34.11347077000006],[139.57504316500004,34.09003327],[139.56128991,34.05809153900019],[139.53451582099999,34.037543036000145]]],[[[139.14234459700006,34.1885033220001],[139.12956790500013,34.18569570500016],[139.12126712300002,34.1889509140001],[139.1222436860002,34.19542064000011],[139.12891686300006,34.204738674000154],[139.13078860800013,34.21181875200001],[139.13078860800013,34.216823635000154],[139.13021894600016,34.21922435100002],[139.13575280000006,34.236558335],[139.14682050900004,34.24095286700016],[139.16114342500012,34.237127997000144],[139.16911868600008,34.22890859600015],[139.17367597700004,34.211615302000055],[139.16716556100013,34.20661041900003],[139.15699303500017,34.20433177300005],[139.14234459700006,34.1885033220001]]],[[[139.2238061860002,34.32436758000007],[139.2124943370002,34.316636460000055],[139.2046818370002,34.31972890800013],[139.1976017590001,34.316636460000055],[139.1975203790001,34.32326894700013],[139.20541425900015,34.32908763200008],[139.20720462300008,34.332790432000124],[139.20753014400006,34.3354352890001],[139.21029707100004,34.336737372000115],[139.21623782600008,34.334824937000135],[139.2238061860002,34.32436758000007]]],[[[139.283457879,34.33685944200009],[139.26783287900005,34.32269928600006],[139.25367272200018,34.34137604400003],[139.25464928500017,34.35346100500014],[139.26539147200018,34.388617255],[139.27035566500004,34.39598216400019],[139.279551629,34.402777411000116],[139.29151451900023,34.41453685100002],[139.30095462300008,34.41791413000011],[139.30250084700018,34.39972565300003],[139.2963973320001,34.367865302],[139.283457879,34.33685944200009]]],[[[139.29721113400004,34.474432684000035],[139.2915958990002,34.46979401200012],[139.2886662120001,34.473822333000086],[139.2924910820001,34.4758568380001],[139.29721113400004,34.474432684000035]]],[[[139.29045657599997,34.52338288000011],[139.27678470100014,34.51276276200015],[139.26433353000002,34.525864976000136],[139.27938886800015,34.53396230700015],[139.29045657599997,34.52338288000011]]],[[[139.4537866550002,34.678941148000106],[139.44271894600016,34.67670319200012],[139.421641472,34.677191473000036],[139.35935284600006,34.70229865300003],[139.35119548300017,34.720033634000075],[139.35201437000015,34.76733961600017],[139.35646512200017,34.79722949200014],[139.40064537900017,34.78864166900003],[139.418223504,34.78082916900003],[139.4377547540001,34.771918036],[139.45004316500015,34.756781317],[139.4567163420002,34.737127997000144],[139.4585067070001,34.71503327000006],[139.45785566500015,34.68988678600009],[139.4537866550002,34.678941148000106]]],[[[139.1694442070001,35.04364655200011],[139.1714787120002,35.036607164000046],[139.1642358730002,35.038519598],[139.16277103000002,35.04092031500012],[139.1694442070001,35.04364655200011]]],[[[139.3844950712904,35.7549238139829],[139.411470167714,35.75197825819011],[139.4343111508389,35.752236639709125],[139.4526046077165,35.7563707548065],[139.46717736244537,35.761383368147975],[139.4928088726314,35.77383738938396],[139.5073816273601,35.77766144521958],[139.51668338363132,35.7775580924321],[139.5228845562772,35.77479340289328],[139.5262952009629,35.767326158375525],[139.52877566966143,35.759264635554516],[139.53559695903246,35.75156484614071],[139.60360314267083,35.75903209155784],[139.61507531107665,35.76748118710715],[139.62577233312678,35.77301056618471],[139.6412752629429,35.7771188419609],[139.70612918521377,35.77564606451422],[139.71470747287165,35.776421209970934],[139.72132205576818,35.77812653321293],[139.73067548978216,35.78716990796492],[139.74013227838194,35.79140737584977],[139.75780561673596,35.795283108528665],[139.80452111176,35.79034800955294],[139.86394900863982,35.77812653321293],[139.88596317036402,35.69774384180478],[139.88115726079903,35.673430081233235],[139.87697146975754,35.66082103126554],[139.8642428568613,35.63206757687867],[139.85027103000002,35.63751862200017],[139.84327233200023,35.62889232000008],[139.83727706700003,35.61454952400014],[139.8238875110002,35.62295089600018],[139.82035734500008,35.638049330000015],[139.80682518800015,35.638192534000055],[139.8003035820001,35.618638414000046],[139.78914674800015,35.603243412],[139.77485460200015,35.61763727099999],[139.77562521600012,35.64110350500012],[139.76527245200006,35.65351048500004],[139.75816223600012,35.63156424200018],[139.76880944100017,35.60097890800013],[139.784804085,35.58046609600011],[139.78500472800008,35.56816522000018],[139.7990563450002,35.540010128000134],[139.78687584700012,35.52716705900012],[139.78809655000012,35.51325104400003],[139.78663170700017,35.511542059000035],[139.78662138357865,35.511529650482444],[139.784522333439,35.51178620017309],[139.697757603131,35.53808950482683],[139.6679919778476,35.55509105141091],[139.6625142756134,35.55925100403071],[139.65486616394227,35.56413442616291],[139.53942101486788,35.612606920373096],[139.52738040568116,35.61402802187571],[139.5137378278384,35.61139252444546],[139.502834101113,35.60751679086722],[139.49559939969257,35.60289175115342],[139.49167199106947,35.59658722571989],[139.48779625929004,35.591781317953476],[139.47988976520062,35.590696113235126],[139.46206139541712,35.598757636056135],[139.4544649596901,35.59731069613166],[139.45322472624005,35.592272244368544],[139.45958092671836,35.585709337415906],[139.4848507016986,35.56581391008389],[139.4898116399951,35.558785916037166],[139.48929487515832,35.554677639361515],[139.48547081932296,35.54963918669905],[139.47596235567815,35.549975084382666],[139.4718282405809,35.5418102078748],[139.4747737981722,35.508091336446014],[139.47399865091714,35.49873790153303],[139.4725517109928,35.493544420138946],[139.47058800713077,35.4900304235653],[139.46748742080771,35.48891937952568],[139.46314660103477,35.48982371709097],[139.4581856627381,35.49297597935792],[139.42604292244292,35.52790924671443],[139.4172062523667,35.53984650311368],[139.39906782422068,35.55630544733846],[139.37726036987024,35.56676992449242],[139.34196536730795,35.57322947775812],[139.29773034098244,35.57529653620618],[139.26636274614387,35.58214366309956],[139.24527876220523,35.591677965166],[139.20383426294094,35.62371735357296],[139.18275027900208,35.63144297871044],[139.14735192275296,35.65002065732743],[139.1217720894103,35.653999741894594],[139.03578250455897,35.69634857782471],[138.99268436069477,35.732547918851466],[138.9805403987203,35.746913967105925],[138.9709285831875,35.76164175146563],[138.94658898329484,35.81662547488578],[138.92281782418334,35.835384019756745],[138.95289350782915,35.857889106097375],[138.99371789036834,35.87654429818092],[139.00394982262625,35.87886973724862],[139.01361331590195,35.87729360611509],[139.0456010283647,35.85881928208427],[139.06017378129494,35.85305735900995],[139.27153039001544,35.808977363214794],[139.28951378763114,35.802104397000235],[139.3844950712904,35.7549238139829]]]]}},{"type":"Feature","properties":{"iso_3166_2":"JP-19","name":"Yamanashi","name_alt":"Yamanasi","name_local":"山梨県","type":"Ken","type_en":"Prefecture","region":"Chubu","postal":"YN","region_code":"JPN-KNT"},"geometry":{"type":"Polygon","coordinates":[[[138.466308221847,35.88819733284066],[138.51891483025526,35.89954031003728],[138.53193729137286,35.89954031003728],[138.55679365520302,35.89563873983596],[138.57286502490092,35.894579373539244],[138.58526736929366,35.89196971273205],[138.59467247925153,35.88623362897883],[138.5999434750113,35.87796540058275],[138.60428429568373,35.866803290539366],[138.612965936129,35.85817332603813],[138.62299116371122,35.85398753499672],[138.63446333211704,35.85326406548424],[138.64552208937295,35.85419424147105],[138.66278201657684,35.8594393988092],[138.7156986842469,35.89646556213603],[138.79760582904566,35.856002915701964],[138.8306270693837,35.84546092418233],[138.86897098232487,35.83776113476853],[138.92281782418326,35.835384019756674],[138.94658898329487,35.81662547488574],[138.97092858318751,35.76164175146559],[138.98054039872034,35.74691396710588],[138.99268436069468,35.732547918851424],[139.03578250455894,35.69634857782464],[139.12177208941034,35.65399974189455],[139.11371056479072,35.63079702446316],[139.1175862983689,35.59787913691261],[139.1165010927512,35.58477916142914],[139.10626915869472,35.5392780623327],[139.09924116374862,35.5256613229117],[139.09102461219607,35.51400828735254],[139.08048261887768,35.50493907327956],[138.99092736240777,35.46478648520815],[138.97015343593233,35.457887682370625],[138.9519633318422,35.44969696744113],[138.9332564638147,35.437062079051714],[138.90607466001745,35.40083690050261],[138.90033857626418,35.3809414740698],[138.82969689339694,35.36466339789746],[138.69719852089497,35.350762436737085],[138.67239383390825,35.3561367861837],[138.65730431524184,35.365025133103416],[138.6483126164341,35.373913479123786],[138.634670037692,35.38112234122303],[138.61265587776654,35.383628648343375],[138.5932255393272,35.39210358321378],[138.5564835959412,35.41747671188071],[138.5434094588794,35.41703746230897],[138.53395267117878,35.4096735705788],[138.52769982258877,35.39685781503616],[138.5232556500282,35.38135488521982],[138.51627933192566,35.32973013054104],[138.5056856626632,35.2942284215045],[138.5040320171638,35.25676300680729],[138.50728763221844,35.231260687830456],[138.51007816017886,35.21919424112136],[138.51054324817233,35.20746369119641],[138.50899295456117,35.19940216747602],[138.5071326025875,35.19428620044778],[138.50341190043883,35.188446763906995],[138.49783084541724,35.18152212174854],[138.48739220578562,35.17216868683536],[138.47235436396272,35.16167837215917],[138.4579366397641,35.15728587554267],[138.44336388593462,35.15697581628086],[138.43044477760435,35.15930125624794],[138.4189726100979,35.16511485436703],[138.39830203730918,35.181418768961066],[138.38347090106117,35.19030711498132],[138.37494428934752,35.2037946640925],[138.36745120730734,35.21867747718383],[138.352568394216,35.27836375648221],[138.3429565777838,35.29205801026896],[138.32822879522274,35.29988698999259],[138.30461266484258,35.30190237069783],[138.2839937679979,35.29895681400578],[138.2622896673343,35.29376333351104],[138.2465800310436,35.29712230135314],[138.23588300989297,35.303685208305694],[138.23185224758316,35.313917141462895],[138.23138715958964,35.32368398752598],[138.23200727811337,35.33350250953316],[138.23045698540147,35.344225369105516],[138.22642622309178,35.355981757452156],[138.2265812518233,35.3675572777461],[138.2354179218995,35.393137111988096],[138.23789839059822,35.40843333622945],[138.23417768844962,35.43411652325892],[138.23479780517454,35.444141750841055],[138.24130903528373,35.46408885321793],[138.24332441598892,35.47478587526794],[138.24130903528373,35.51778066724404],[138.2369682146114,35.53516978655634],[138.22177534405688,35.57276439156337],[138.216504348297,35.602064927954046],[138.21371382123584,35.61178009717372],[138.19614383387085,35.627851466871704],[138.1820361680347,35.64782440946894],[138.17211429324004,35.67472199242596],[138.16854861892352,35.69880320900083],[138.17381961468345,35.713220934098814],[138.19753909695174,35.73668203394868],[138.20265506398,35.74709483515849],[138.19769412658263,35.75670665069134],[138.18637698780765,35.76556915918934],[138.17971072806762,35.777609768376095],[138.18017581606108,35.786730659292516],[138.216504348297,35.85039602315794],[138.22549604710485,35.85796662046317],[138.2354179218995,35.85853506124411],[138.257122024362,35.84809642251187],[138.2697310734302,35.849310818439506],[138.27887780186904,35.854891873461185],[138.28719770710848,35.86266917634137],[138.33825402190558,35.93884023738704],[138.34962283662458,35.95098419936127],[138.36026818273035,35.95780548783296],[138.3715336446619,35.95728872299617],[138.3986637716157,35.950906684096225],[138.4281710153801,35.939150295749585],[138.4368526549261,35.932742418427836],[138.44067671076152,35.92514598180162],[138.44150353396088,35.9181179877549],[138.4416585626925,35.907653509701646],[138.44429406102205,35.89775747332871],[138.45276899589237,35.890316067232675],[138.466308221847,35.88819733284066]]]}},{"type":"Feature","properties":{"iso_3166_2":"JP-05","name":"Akita","name_alt":null,"name_local":"秋田県","type":"Ken","type_en":"Prefecture","region":"Tohoku","postal":"AK","region_code":"JPN-THO"},"geometry":{"type":"Polygon","coordinates":[[[140.9262614277227,40.24397797290513],[140.9070377948583,40.22948273434076],[140.88481692935778,40.21674449316379],[140.8705542338908,40.20162913697504],[140.85541303928034,40.180596828980526],[140.85644656805465,40.16829783827464],[140.8595471543777,40.1596161969299],[140.8618725934454,40.15015941012871],[140.86032229983425,40.14204621046426],[140.85691165604806,40.13256358524126],[140.85567142079935,40.11749990499655],[140.85598148006125,40.10408987115062],[140.85055545467048,40.0919975860198],[140.84156375496337,40.077166449771795],[140.83815311117712,40.066391913356114],[140.83784305191523,40.05383454023183],[140.84063357987577,40.03954600724242],[140.84249393095018,39.977456772711946],[140.8444576357113,39.96665639877372],[140.84528445891056,39.95815562638106],[140.84941857310872,39.938596095833134],[140.85505130407438,39.92133616772992],[140.8690039411789,39.89123464656163],[140.8705542338908,39.878315538231504],[140.8640430037815,39.87033152887696],[140.85396609935594,39.86666250357169],[140.84249393095018,39.866972561034856],[140.83034996987516,39.86854869216839],[140.81655236240158,39.868471177802604],[140.80477013563325,39.865551459532185],[140.79438317284507,39.86046133092566],[140.78585656113137,39.85033275055602],[140.7831693868577,39.84015249334291],[140.7827559757077,39.829145412930444],[140.7861666203932,39.81733734774036],[140.79371137927671,39.80904328092265],[140.81624230403906,39.794315497462236],[140.82647423719618,39.78434194582414],[140.824613886122,39.7750401877544],[140.81918785983186,39.76522166574733],[140.8041500180089,39.74594635693887],[140.7971736999063,39.734990953369845],[140.79019738180364,39.71977224439351],[140.80053266774837,39.69318471889966],[140.80864586831223,39.67713918672402],[140.81283165935355,39.66235972821892],[140.81376183534047,39.64393707923276],[140.81035118975558,39.63137970610859],[140.80616539871414,39.62161286094474],[140.79092085221555,39.599081936182415],[140.74813276581455,39.56014374403853],[140.73914106700659,39.546888739823515],[140.72932254499943,39.529267076514344],[140.7143363791206,39.49278351554676],[140.6759924661793,39.43550019058134],[140.65811242135112,39.39227285370919],[140.66043786041882,39.3807490102586],[140.66446862182943,39.36741648987905],[140.68451907789313,39.33434357449636],[140.69335574796935,39.30256256850768],[140.69940189008514,39.292072252032824],[140.70684329618115,39.28561269786766],[140.7173852886001,39.27364960394604],[140.72281131399086,39.266285712215875],[140.73169966001132,39.25918020290399],[140.75154340960057,39.24783722570737],[140.76053511020717,39.24086090850409],[140.7665812523229,39.2312490911726],[140.76999189700837,39.22003530518518],[140.76921674975318,39.2057984481398],[140.7741776880498,39.19579905897939],[140.78244591734517,39.18835765198398],[140.79061079295366,39.182053128349196],[140.79608849518786,39.174715074141375],[140.7940731135833,39.16779043198284],[140.7861666203932,39.16272614179795],[140.77495283440578,39.157300117306534],[140.7639457539933,39.14807587270329],[140.75293867358084,39.12756033044485],[140.7493730001638,39.11327179655615],[140.751336704925,39.09906077703323],[140.75851972860255,39.08640005112139],[140.77278242406953,39.075392970709004],[140.78585656113137,39.06784821182549],[140.7946932312076,39.0602001001545],[140.79841393425556,39.04867625580454],[140.79531334883188,39.03911611621575],[140.77464277604332,39.00392446554167],[140.75944990458936,38.95173126918269],[140.73428348239685,38.943463039887405],[140.7254984891639,38.936951808878916],[140.71040896959823,38.92811513880261],[140.695629511093,38.916798000926974],[140.6419893739104,38.889331977189016],[140.57760053873386,38.87202037224242],[140.55806684840627,38.871529445827235],[140.54406253535763,38.8736998561634],[140.53290042531432,38.881709703040286],[140.4793636418185,38.89220001951523],[140.44892622296675,38.91540273694673],[140.43326826441887,38.939742336839345],[140.4211759792879,38.963875230257656],[140.4050529318473,38.97565745702602],[140.34278283106283,39.0038469511758],[140.31968346641884,39.00718008149556],[140.2858354028815,39.00831696215806],[140.21069786971094,39.019995836138946],[140.1949365583754,39.026739610244846],[140.18454959468795,39.034336045971685],[140.1780383645788,39.04118317286506],[140.16511925714792,39.04526561111902],[140.15054650331842,39.04500722870063],[140.12620690342578,39.048469550229555],[140.10429609628773,39.05738373557091],[140.06858768077677,39.077149969895146],[140.03520470613233,39.105106920048286],[140.02414594887642,39.108362535102884],[140.01215701743246,39.109809475027305],[139.99489708932919,39.10603709603518],[139.9845101256417,39.10169627536277],[139.97365807486017,39.09937083629504],[139.96275434813464,39.0982339538339],[139.8856531111021,39.11510631010816],[139.88100223206732,39.11510631010816],[139.8808549493155,39.115106310035316],[139.891937696,39.133205471000025],[139.895843946,39.152289130000014],[139.89795983200008,39.19330475500004],[139.9035814390001,39.22493941100004],[139.91684255200005,39.26249903000007],[139.93181044000005,39.28711183400014],[139.96357962400015,39.29882013200006],[139.9953101900001,39.327328560000126],[140.02024245400003,39.40758142300007],[140.04857715000003,39.50466964600005],[140.05933387900006,39.69806625600009],[140.05929588100003,39.727492249000136],[140.03911708700002,39.76928182100005],[140.0390897680001,39.793282631000096],[140.02759850400008,39.82453034100004],[140.00456790500004,39.85089752800005],[139.96648196700005,39.8800723330001],[139.92139733200008,39.89850495000013],[139.87745201900015,39.89280833500004],[139.8642684250001,39.88222890800009],[139.85482832100007,39.87083567900004],[139.84376061300014,39.861761786000045],[139.82553144600007,39.85805898600009],[139.760101759,39.85805898600009],[139.75180097700002,39.86627838700008],[139.73812910200007,39.89191315300005],[139.73015384200005,39.90273672100005],[139.7086694670001,39.92426178600007],[139.704172093,39.945157201000114],[139.71943758300011,39.952141356000055],[139.70099004100013,39.96066114800004],[139.69773066900007,39.988566482000124],[139.700639313,40.005636112000076],[139.74345199600015,39.982463933000105],[139.80046634200005,39.9625918640001],[139.82211347700007,39.96108633000006],[139.86692463200012,39.9842972860001],[139.90419316100008,40.01769512100006],[139.97803795700008,40.125474351],[139.993500196,40.169623114000075],[139.98861094900013,40.19111380400008],[140.002841718,40.222439703000134],[140.01115209900001,40.23545842000004],[140.0198987270001,40.33321038300005],[140.02426296100015,40.35501606700009],[140.01173376100007,40.3678589080001],[139.99857651000008,40.37715986500007],[139.9634554810001,40.40392272000011],[139.94605553500008,40.41885000200011],[139.94376212601424,40.4292795527856],[139.94409915605115,40.429315496912636],[139.981409540218,40.43329458327838],[139.99613732277925,40.43189931929811],[140.0124670757948,40.439495755025064],[140.02455936092582,40.448745836251305],[140.04548831613283,40.46153575337232],[140.06135298115515,40.46409373643681],[140.07964643803274,40.46021800375783],[140.09530439658062,40.45422353848551],[140.12186608275357,40.44861664504219],[140.30061486228607,40.44709218985264],[140.32945031068323,40.45590302240649],[140.35797570161736,40.472878730568965],[140.3846924183204,40.48011343019064],[140.40903201731373,40.48083689970312],[140.4227262719998,40.476909491979455],[140.42939253084057,40.46897715946827],[140.43383670519972,40.45980459170852],[140.47409264515943,40.444766750784936],[140.5277844591854,40.41221059844037],[140.5442175640893,40.40797313145478],[140.5511422062478,40.41133209929697],[140.5596171411181,40.417662462252764],[140.57434492367918,40.42383779647719],[140.59232832309368,40.42518138271464],[140.60674604729218,40.42246837001926],[140.61759809807376,40.41903188691202],[140.63346276309596,40.41233978875019],[140.64788048729463,40.41179718729035],[140.66152306513737,40.414122626358136],[140.68885989766613,40.42370860436861],[140.70203738841474,40.425284736401494],[140.7169202006068,40.42554311792054],[140.74890791217035,40.446265367552684],[140.77428104083737,40.454378567217134],[140.78802697236694,40.46244009003814],[140.8052352236266,40.481663722902454],[140.81903283110023,40.4922573921649],[140.84993533704613,40.499517931107675],[140.86884891244733,40.496598211937936],[140.9150993185787,40.4825422229452],[140.93013716040167,40.47541087521171],[140.9403690935588,40.468202013112375],[140.94408979660682,40.46409373643681],[140.94688032366798,40.45967540139861],[140.94832726539096,40.45484365521048],[140.9486373228541,40.449701849760544],[140.9464152365739,40.44414663316056],[140.94207441590157,40.43980581338761],[140.93912886010878,40.43546499271517],[140.9366483914102,40.432907008751414],[140.94657026620473,40.426214911488955],[140.95308149631404,40.42011709252975],[140.9599027847857,40.410789496038376],[140.96398522393883,40.38061046050433],[140.9627449886903,40.36864736658271],[140.95742231698625,40.35717519817689],[140.95153120270277,40.34764089611045],[140.94801720612907,40.33867503482497],[140.9435730326693,40.31916718201984],[140.93571821542326,40.29759227076664],[140.93401289308053,40.28555166337853],[140.93370283381864,40.27149567348653],[140.9262614277227,40.24397797290513]]]}},{"type":"Feature","properties":{"iso_3166_2":"JP-02","name":"Aomori","name_alt":null,"name_local":"青森県","type":"Ken","type_en":"Prefecture","region":"Tohoku","postal":"AO","region_code":"JPN-THO"},"geometry":{"type":"Polygon","coordinates":[[[141.68098803715316,40.45100587481204],[141.67448449086646,40.4481257195263],[141.58777143830122,40.40709463231141],[141.57846968023154,40.39644928620555],[141.57381880119675,40.3858814562642],[141.5707182148737,40.376295478253695],[141.56544721911382,40.36756216096498],[141.55314822840796,40.35919057888205],[141.53687015223574,40.35640005092162],[141.51108361241876,40.35898387330707],[141.4735665217775,40.36854401289585],[141.4543428898125,40.36740713223335],[141.43057173070076,40.36177440036823],[141.3829260596898,40.34554800103942],[141.35688113835374,40.340070298805216],[141.33543541920915,40.34262828186971],[141.32566857314612,40.34996633607753],[141.3149198751521,40.35508230220648],[141.30251753075942,40.35539236146832],[141.24153934116765,40.33417918632037],[141.08764692636453,40.26268484093265],[141.02542850242344,40.21863068355921],[141.01343956918072,40.213101305380945],[141.00150231278144,40.211318467773],[140.98847985166378,40.21434153883092],[140.97437218582763,40.21930247712763],[140.9262614277227,40.24397797290513],[140.93370283381864,40.27149567348653],[140.93401289308053,40.28555166337853],[140.93571821542326,40.29759227076664],[140.9435730326693,40.31916718201984],[140.94801720612907,40.33867503482497],[140.95153120270277,40.34764089611045],[140.95742231698625,40.35717519817689],[140.9627449886903,40.36864736658271],[140.96398522393883,40.38061046050433],[140.9599027847857,40.410789496038376],[140.95308149631404,40.42011709252975],[140.94657026620473,40.426214911488955],[140.9366483914102,40.432907008751414],[140.93912886010878,40.43546499271517],[140.94207441590157,40.43980581338761],[140.9464152365739,40.44414663316056],[140.9486373228541,40.449701849760544],[140.94832726539096,40.45484365521048],[140.94688032366798,40.45967540139861],[140.94408979660682,40.46409373643681],[140.9403690935588,40.468202013112375],[140.93013716040167,40.47541087521171],[140.9150993185787,40.4825422229452],[140.86884891244733,40.496598211937936],[140.84993533704613,40.499517931107675],[140.81903283110023,40.4922573921649],[140.8052352236266,40.481663722902454],[140.78802697236694,40.46244009003814],[140.77428104083737,40.454378567217134],[140.74890791217035,40.446265367552684],[140.7169202006068,40.42554311792054],[140.70203738841474,40.425284736401494],[140.68885989766613,40.42370860436861],[140.66152306513737,40.414122626358136],[140.64788048729463,40.41179718729035],[140.63346276309596,40.41233978875019],[140.61759809807376,40.41903188691202],[140.60674604729218,40.42246837001926],[140.59232832309368,40.42518138271464],[140.57434492367918,40.42383779647719],[140.5596171411181,40.417662462252764],[140.5511422062478,40.41133209929697],[140.5442175640893,40.40797313145478],[140.5277844591854,40.41221059844037],[140.47409264515943,40.444766750784936],[140.43383670519972,40.45980459170852],[140.42939253084057,40.46897715946827],[140.4227262719998,40.476909491979455],[140.40903201731373,40.48083689970312],[140.3846924183204,40.48011343019064],[140.35797570161736,40.472878730568965],[140.32945031068323,40.45590302240649],[140.30061486228607,40.44709218985264],[140.12186608275357,40.44861664504219],[140.09530439658062,40.45422353848551],[140.07964643803274,40.46021800375783],[140.06135298115515,40.46409373643681],[140.04548831613283,40.46153575337232],[140.02455936092582,40.448745836251305],[140.0124670757948,40.439495755025064],[139.99613732277925,40.43189931929811],[139.981409540218,40.43329458327838],[139.94409915605115,40.429315496912636],[139.94376212601424,40.4292795527856],[139.94263756600003,40.4343936220001],[139.94564863400007,40.4780947940001],[139.94353274800005,40.52142975500007],[139.94278633300013,40.54458555800011],[139.930978309,40.55443808700005],[139.92850275500007,40.57097044500006],[139.91515451300012,40.58617340700002],[139.87639612100008,40.583437846000066],[139.856781446,40.59015534100007],[139.8603621750001,40.60879140800006],[139.88038466000006,40.625232554000064],[139.90029743700006,40.64247505800003],[139.925841999,40.64682100100009],[139.938624076,40.66984990800009],[139.95954043000006,40.6776925150001],[139.97013709000015,40.693649883000035],[139.9868773930001,40.7178996830001],[139.99815616500013,40.74210409000011],[140.04597727600003,40.76777008700009],[140.06931012100006,40.765582512000094],[140.09513809700002,40.74927419200006],[140.1076180130001,40.74407301800002],[140.1223587180001,40.74476553400004],[140.14013941000007,40.74957629000011],[140.1547744620001,40.761448243000046],[140.1980380870001,40.78645254300008],[140.21908790400005,40.77833468000006],[140.240570509,40.7835147160001],[140.25806725400008,40.79564036700009],[140.27076256600003,40.81240469000002],[140.29664147200003,40.87376536700003],[140.3092554050001,40.93622467700007],[140.31625410200002,40.954413153000075],[140.31511478000004,40.97850169500009],[140.319238175,40.99972153500008],[140.32192155800016,41.027445197000134],[140.324833894,41.02746135900014],[140.34099368600005,41.005072333000044],[140.34982602400015,40.998256667000106],[140.36228565300007,40.99287923600005],[140.36959444000001,40.986054691000106],[140.38233483200008,40.988267320000034],[140.37587989300005,41.01236805000008],[140.36962853800003,41.02166163200005],[140.37686074100014,41.028008653000114],[140.38558219700013,41.02942508400008],[140.39651086100002,41.02701276800005],[140.40779258300006,41.02569846100002],[140.40446189300008,41.034181320000044],[140.39898677500003,41.03937203000001],[140.37897206000002,41.038166566000115],[140.3680536810001,41.03838470300013],[140.35058592000007,41.03884449200007],[140.34435617100007,41.04402182000007],[140.34066533100008,41.050034933000035],[140.3337851330001,41.045611403000066],[140.3269048200001,41.04118680800008],[140.32395648300013,41.045284584000115],[140.32264494100002,41.07050782800013],[140.32185208300007,41.0829208590001],[140.3001619810001,41.111277292000096],[140.281795428,41.11920156000011],[140.26472982300004,41.12099656200013],[140.24809544900012,41.12336100200011],[140.245477048,41.13387384600014],[140.25618438200007,41.138896678000066],[140.28150475400003,41.14036692900004],[140.30397109100005,41.136680501000114],[140.32043302,41.149779762],[140.32936704900015,41.17211254600008],[140.33277428500008,41.19131094000005],[140.32837975400008,41.20132070500003],[140.3300887380001,41.211859442000076],[140.33277902700002,41.237153409000086],[140.34100620700013,41.24646276100012],[140.33822086800006,41.25889596300007],[140.34228304300007,41.26573129800005],[140.35914755300013,41.25394959800008],[140.379063953,41.24411441700008],[140.39148121400007,41.24044348400008],[140.40943444100003,41.2246768250001],[140.43580162900003,41.198146877000056],[140.46224804000008,41.18388740700007],[140.4836739810001,41.18346812600004],[140.51106755500007,41.197719024],[140.52475613000001,41.21997640700005],[140.5485975940001,41.22624299300011],[140.5939069910001,41.22017794000001],[140.6327023830001,41.194257795000055],[140.64266573200013,41.17137914700004],[140.63701139400007,41.1447473960001],[140.63461347700002,41.1154645850001],[140.63103274800005,41.10565827000005],[140.63152103000004,41.093085028000075],[140.63697350400008,41.071926174000055],[140.64128665500004,41.041489976],[140.65455162900003,41.00849030200004],[140.67302493600005,40.89557526200008],[140.70312167000014,40.85329202300008],[140.752402511,40.83518657000013],[140.79922346800004,40.83908125100004],[140.8307489350001,40.8668380420001],[140.85206829100002,40.883848724000075],[140.8707263990001,40.915135476000046],[140.86570872100003,40.92226795400009],[140.86293283500004,40.9335641210001],[140.86688513900003,40.940992390000105],[140.87083680400008,40.94485248400011],[140.86280763700006,40.94726942200006],[140.85360123300006,40.9449188910001],[140.84724564000015,40.94760752700006],[140.8405199490001,40.952971527000074],[140.84921628000006,40.956248688000045],[140.861488388,40.95713361300008],[140.85948816000007,40.965184801000106],[140.8610516550001,40.9720427660001],[140.87096258300005,40.9779781500001],[140.86853472400003,40.98426696100006],[140.8721016980001,40.989024474000075],[140.88233210700002,41.007822022000084],[140.8886749560001,41.01077779500014],[140.90288540600005,41.008995810000044],[140.91440585900006,40.99609776500009],[140.93883612500008,40.99434078100012],[140.94870251300011,40.9907477350001],[140.957775072,40.97791522800006],[140.96643156800013,40.96960157300006],[140.98140227400006,40.95976859900006],[140.98178952400013,40.95381221000008],[140.97981597600005,40.95173234200013],[140.9794214110001,40.95143509800005],[140.97665426700013,40.94608651000007],[140.97506573300006,40.937755320000065],[140.97979578000002,40.935663849000036],[140.99097741000003,40.93431224200003],[141.01099694100003,40.92951080900011],[141.03493617600014,40.91833765900006],[141.04715557500003,40.914749897000036],[141.05822181400004,40.916522572000076],[141.0680756420001,40.91084813100005],[141.073919208,40.90012069800011],[141.083704774,40.886413220000065],[141.09276681100005,40.8816313830001],[141.11134557100002,40.87263328600005],[141.12626868300003,40.872919082000095],[141.1471450140001,40.87883994300006],[141.16377570600008,40.89130807700005],[141.18524863300001,40.91121452900009],[141.22640007400003,40.987442920000035],[141.23640716500006,41.01572156100008],[141.24190264900005,41.082742],[141.24789472700002,41.098130601],[141.246366158,41.106862387000035],[141.25234706100008,41.11875852600005],[141.263463214,41.12617311400007],[141.27223835200004,41.13657760500013],[141.277882083,41.155329909000045],[141.2704802500001,41.18520388400012],[141.2561012490001,41.21123666100007],[141.23546690100005,41.23797276500002],[141.20591119200003,41.2647197040001],[141.18337455300008,41.27706277200005],[141.16123245800014,41.27846726200008],[141.15246083700004,41.263980445000044],[141.14597765300005,41.25550840300011],[141.1369634360001,41.24669717700007],[141.137639411,41.24271426100003],[141.1438538590001,41.24166270200007],[141.14963557400011,41.248748404000054],[141.15611297200013,41.25479616600006],[141.1591148390001,41.25669431400007],[141.158871181,41.253231738000125],[141.1570088420001,41.24821429700009],[141.14683011300008,41.23628857000003],[141.11337199500008,41.21436328300004],[141.0947367270001,41.21026451300011],[141.07237646000016,41.19661705300004],[141.05807571800005,41.18306812500006],[141.0341351350001,41.185861325000076],[141.00563260700005,41.19576286500006],[140.9920538990001,41.19335164900005],[140.977561863,41.196477815000065],[140.96306758300005,41.18990252900005],[140.94626517500006,41.17328947700011],[140.907788697,41.17364541400008],[140.89078478800008,41.16377995100004],[140.87535602200006,41.16654929600011],[140.86273009800004,41.164123111000094],[140.82850222700006,41.14610662600012],[140.81452501500007,41.128461806000075],[140.79815518300012,41.128577901000085],[140.76579604300002,41.14501873900008],[140.76530067700008,41.184626508000036],[140.76555366700006,41.19595586000014],[140.778168165,41.206854559000135],[140.78469859000006,41.23514784300008],[140.780395753,41.25193437900006],[140.79309271300014,41.27842175200004],[140.79928382000008,41.30300457000004],[140.80321422500003,41.32118674800003],[140.80314793400015,41.32954397600005],[140.81517287700007,41.33756239600004],[140.82363136600014,41.364709589000086],[140.82730899100005,41.387559300000106],[140.83695137100005,41.418221886000055],[140.85333808400003,41.430339450000105],[140.88382800500005,41.467409939000106],[140.89795983200008,41.47614166900013],[140.90105228000004,41.48102448100008],[140.90710228800003,41.5007985150001],[140.9057158930001,41.51308858200011],[140.8994617900001,41.52417520800009],[140.90362850500003,41.528154139000065],[140.90709272100008,41.53854826300005],[140.913572359,41.54685719300008],[140.92699769800004,41.533324933000074],[140.95080024500015,41.521911388],[140.96441713000007,41.50907653600004],[140.97805707600003,41.497659041000105],[140.9930157440001,41.491067669000074],[141.00333950800007,41.48708488900007],[141.02126455500002,41.484118126000084],[141.0653072390001,41.48111619600013],[141.10775040700003,41.46386893600004],[141.14290933000012,41.43322531400014],[141.1596639490001,41.41712322800004],[141.17995380600007,41.40562133200004],[141.18402107200006,41.39741473700013],[141.19499759200005,41.38715241100002],[141.23566610900002,41.367585477],[141.276095682,41.35319552800007],[141.31791884200004,41.353046706000015],[141.3488110140001,41.360219794000045],[141.3821608780001,41.372599583000095],[141.41035306700007,41.390388346000066],[141.4313316260001,41.406088314000044],[141.44819724900003,41.418404235000054],[141.46057858100005,41.43022317800006],[141.463865746,41.42602266500006],[141.46692099400002,41.419327886000104],[141.4604310750001,41.413356293000106],[141.46344160600006,41.40381685400013],[141.461849335,41.400483716000025],[141.45381379800006,41.39635130100007],[141.45559512800003,41.39196423800007],[141.45988422000005,41.38796292700002],[141.45746549300014,41.3774729620001],[141.44528424100008,41.36618409700006],[141.43988362800008,41.3511756610001],[141.43191811600002,41.33002057500008],[141.42379443000004,41.31270692100006],[141.40891673300007,41.2566773930001],[141.40428358000008,41.23065244500009],[141.40376745800006,41.22063293800011],[141.39081676700005,41.16101119700008],[141.39460702200012,41.138200175000065],[141.39828535200007,41.12811920800007],[141.39446549800005,41.11646771900004],[141.39472983900015,41.10288506600011],[141.39635925500005,41.09173074200001],[141.3863069410001,41.03036180100014],[141.38806285300006,40.977231939],[141.39026167600002,40.93393259100014],[141.3930429450001,40.92175044400008],[141.40555340500015,40.81682286300011],[141.42315604000015,40.72577228600008],[141.43738666000007,40.670140931000105],[141.470398091,40.593418071000116],[141.48241247400006,40.5740690690001],[141.491639652,40.56232670000011],[141.5196960080001,40.537986372000034],[141.532504271,40.53139789500008],[141.54821362400003,40.531595226000064],[141.55939515900008,40.53939933200007],[141.57554958600014,40.54227905900004],[141.58210069000006,40.53279883700009],[141.58926137100002,40.522104635000034],[141.6237085300001,40.501369533000116],[141.68098803715316,40.45100587481204]]]}},{"type":"Feature","properties":{"iso_3166_2":"JP-07","name":"Fukushima","name_alt":"Hukusima","name_local":"福島県","type":"Ken","type_en":"Prefecture","region":"Tohoku","postal":"FS","region_code":"JPN-THO"},"geometry":{"type":"Polygon","coordinates":[[[140.32061364240565,37.94584951434362],[140.35291141233182,37.94621124954949],[140.39032514928613,37.95365265654482],[140.40458784385385,37.95463450847578],[140.4432418151576,37.943007311338306],[140.45765954025558,37.935643418708764],[140.4688216493995,37.92517894155489],[140.48499637278434,37.90342316314846],[140.4979671570586,37.8949482291774],[140.50835411984673,37.89313955314785],[140.51739749639728,37.89319122999126],[140.57491336535952,37.90326813441692],[140.61439415896325,37.89422475786628],[140.63191247038412,37.88652497025123],[140.6516011903426,37.88290761999065],[140.66958458885767,37.872365628471016],[140.67940311086483,37.85991160723495],[140.68296878518134,37.84699249890471],[140.6810567572635,37.823893134260715],[140.68281375465097,37.81567658090941],[140.6873096049543,37.80751170530098],[140.69469933510618,37.79854584401551],[140.7330432480474,37.776867580874125],[140.76410078272488,37.77020132113407],[140.77898359581627,37.77038218828733],[140.78461632678204,37.77542064094979],[140.7751078640366,37.78374054618922],[140.77805341982946,37.7859626333688],[140.82492394358508,37.78637604451882],[140.84125369660086,37.790897732344405],[140.84962527868362,37.79877838801218],[140.85272586500668,37.81004384994375],[140.85520633370527,37.83810415288437],[140.85520633370527,37.84735423411058],[140.85272586500668,37.86750804296179],[140.85489627534275,37.87603465377629],[140.86466312140595,37.883036811199844],[140.87784061125512,37.88771352775706],[140.92672651571604,37.88978058530574],[140.9331925950084,37.889804989206255],[140.9333602220001,37.889227606000105],[140.95926646200013,37.84995876300013],[140.99325908700007,37.79983832100004],[141.00459510300004,37.76440553700013],[141.00814863400007,37.750189520000106],[141.01742597700002,37.739976304000066],[141.02222741000003,37.72695547100008],[141.0219832690001,37.706732489000046],[141.01905358200014,37.69863515800003],[141.00928795700008,37.68524811400002],[141.00782311300014,37.67885976800011],[141.0114038420001,37.672267971000025],[141.02515709700003,37.65794505400004],[141.028168165,37.648098049000026],[141.04184004000007,37.37714264500002],[141.0361434250001,37.34471263200004],[141.01441491000003,37.27147044500009],[141.01449629,37.239976304000066],[141.00782311300014,37.22675202000005],[141.00782311300014,37.133856512000136],[141.0051375660001,37.12287018400008],[140.98796634200005,37.08978913000004],[140.9743758470001,37.00177643400011],[140.96029707100007,36.96621328300003],[140.92579186300014,36.93891022300005],[140.91724694100003,36.93646881700002],[140.8917749360001,36.93211497600004],[140.85906009200005,36.914007880000014],[140.8352156910001,36.9084333350001],[140.82032311300014,36.89435455900005],[140.8122664720001,36.89118073100008],[140.80437259200005,36.885972398],[140.8019311860001,36.87457916900013],[140.80225670700008,36.8570010440001],[140.79729251400016,36.84650299700013],[140.797286048648,36.84648905231134],[140.69816165573587,36.868602607124586],[140.68777469294764,36.87351186857785],[140.61439415896325,36.896146145228414],[140.59868452357188,36.90513784403623],[140.5879358255778,36.914723822946],[140.583026565024,36.92247528740458],[140.5757401876595,36.92673859281177],[140.57000410390617,36.92606679924336],[140.56147749219252,36.91790192273558],[140.55972049390567,36.90823843035923],[140.56147749219252,36.8973088652119],[140.5668518407398,36.8829944929015],[140.5698490742754,36.87139313418575],[140.56468143130292,36.86317658083453],[140.53243533732086,36.8456065943688],[140.51476199806774,36.82953522377153],[140.5064937678731,36.819509996189396],[140.49672692270929,36.81274038276251],[140.48122399289286,36.797108263535534],[140.46928673739296,36.79222484050399],[140.44985639895356,36.794576117094124],[140.40691328292172,36.815763454719615],[140.37864627530536,36.83594310199254],[140.3544617050436,36.85666535072531],[140.32821007723334,36.87426117651205],[140.3055757996833,36.89384654458232],[140.2860421075572,36.90586131444809],[140.23731123272722,36.924826564894005],[140.2410319357752,36.94306834582753],[140.23452070476662,36.990248927945686],[140.2312650897121,36.999989936486344],[140.23043826741213,37.00104930278309],[140.2291980330628,37.00203115471405],[140.22547733001483,37.00414988910606],[140.20718387313724,37.01213389756131],[140.1988122910543,37.02019542128161],[140.19416141201953,37.03096995679812],[140.19090579606564,37.04342397713481],[140.1850146826814,37.05293244077953],[140.17628136629196,37.05892690695114],[140.16356896443614,37.0655156523255],[140.1134428238272,37.09802012782663],[140.09809492364178,37.105823269128564],[139.95815514504392,37.1393871118257],[139.9168656763099,37.14357290286722],[139.88585981667717,37.139180406250745],[139.86131351120963,37.130447088961915],[139.82234948064405,37.105539049187826],[139.79118859317896,37.08122528681753],[139.7644202014311,37.07995921494583],[139.74741865484702,37.07701365825366],[139.67853397026653,37.05321666072035],[139.509552036797,36.97490102776024],[139.46299157140385,36.96270538984186],[139.4458866720322,36.956142482889305],[139.40790449429687,36.925136624155925],[139.35958702971755,36.90203725771326],[139.27163374190366,36.91955556913413],[139.24698408364856,36.92017568585922],[139.22646854139003,36.92498159452492],[139.21737348889536,36.929503282350595],[139.21458296093488,36.945652167313625],[139.22698530532756,36.96177521385505],[139.2313261251005,37.00094594999558],[139.23923261918998,37.02792104821776],[139.24062788317025,37.03949656851188],[139.2345817401552,37.090682075417476],[139.2345817401552,37.11556427676996],[139.23628706339719,37.12905182588102],[139.2352018577795,37.13990387576331],[139.23101606673805,37.14930898751982],[139.21003543468748,37.18548249012477],[139.2042993509342,37.19209707302147],[139.19499759286452,37.1923037794958],[139.18740115803706,37.18966828116629],[139.1784094592291,37.1895649283787],[139.17251834494562,37.19607615848793],[139.15949588382801,37.2136978217971],[139.15556847610424,37.225893459715394],[139.16011600235163,37.240776271907464],[139.18833133402387,37.28351268236443],[139.1939123881462,37.29658681942621],[139.20817508361318,37.354593613904115],[139.20817508361318,37.36733185508109],[139.20383426294092,37.37957916894345],[139.1973230328316,37.389785265477656],[139.18879642111796,37.39900950828218],[139.18678104131197,37.40844045756103],[139.18853803869945,37.41812978835898],[139.1955660336455,37.42934357434643],[139.20879520123754,37.4411258002155],[139.22574507097818,37.44691356081216],[139.26357221908262,37.447326971962184],[139.32599734859872,37.46127960906671],[139.3407251320591,37.461822211425925],[139.37105919812348,37.45838572831872],[139.38139448496753,37.460814521073274],[139.39519209244116,37.488409736020515],[139.40387373288644,37.49616120137827],[139.4195316923337,37.50334422505591],[139.46717736244528,37.50122549156316],[139.48035485229462,37.502259020337476],[139.5028341011129,37.50755585451904],[139.51544315018123,37.50897695602174],[139.54350345312184,37.50386098899341],[139.55358035664813,37.506496487323034],[139.5560608262461,37.51814952198282],[139.55285688713565,37.56308218029841],[139.54954959523752,37.57729319892195],[139.54412356984682,37.58866201454029],[139.53869754535543,37.597498683717305],[139.535751987764,37.60364818041913],[139.53327151906535,37.61367340800135],[139.53714725174433,37.62437042915198],[139.54799930162642,37.63832306625653],[139.59533491427487,37.68043935818977],[139.66561486193638,37.763845119756496],[139.68566531800002,37.7803557399254],[139.72462934766622,37.82037913678772],[139.76478193573774,37.81645172816468],[139.77609907361335,37.809268704487124],[139.79067182834217,37.805754706114755],[139.80638146373354,37.80598725011146],[139.82560509659794,37.81149078986809],[139.85015140206553,37.81185252507396],[139.87821170500615,37.80552216211808],[139.88999393087516,37.80466950139632],[139.90430830318564,37.80805430855949],[139.91655561704806,37.81453970024691],[139.93236860612626,37.81159414355494],[139.94559777191955,37.79994110799578],[139.9655448751958,37.77294017225117],[139.97923912988193,37.761984767782764],[139.99055626775748,37.75653290486966],[139.99923790910213,37.754284980167625],[140.007609491185,37.754336656111775],[140.03634158679472,37.75717886001635],[140.04915734323674,37.756041978454476],[140.06104292189332,37.7522179235184],[140.07205000230567,37.745474148513125],[140.09390913260034,37.727361558788886],[140.10429609628773,37.72265900291069],[140.11737023334956,37.722607326966624],[140.13147789918565,37.7268447939521],[140.14930626806972,37.73849783041055],[140.16170861156314,37.74229604782428],[140.17256066324398,37.74307119418029],[140.18222415562025,37.74035818148491],[140.19245608877753,37.738937079082916],[140.20330813955889,37.73849783041055],[140.21447024960236,37.74059072548158],[140.22268680205428,37.74332957569939],[140.23095503134965,37.74741201395324],[140.26118574372714,37.768986925206434],[140.2692472683467,37.780536607078744],[140.27374311685128,37.79955353436807],[140.26707685801057,37.83105032041601],[140.26506147730527,37.87231395072823],[140.26738691637308,37.90670461752407],[140.27043582585264,37.925850735123305],[140.2695573258099,37.964246324008684],[140.32061364240565,37.94584951434362]]]}},{"type":"Feature","properties":{"iso_3166_2":"JP-03","name":"Iwate","name_alt":null,"name_local":"岩手県","type":"Ken","type_en":"Prefecture","region":"Tohoku","postal":"IW","region_code":"JPN-THO"},"geometry":{"type":"Polygon","coordinates":[[[141.64030353084496,38.96750341736643],[141.6336601101259,38.96955963806681],[141.59536787312885,38.97630341217271],[141.56772098223746,38.9856826855075],[141.53997073765942,38.99015269648967],[141.51480431456747,38.98961009413054],[141.49945641528132,38.98676789022596],[141.48581383743868,38.97700104416285],[141.48235151590973,38.96361684783926],[141.48235151590973,38.947442125353774],[141.4839534845657,38.9324042835309],[141.4839534845657,38.921242174386805],[141.48131798713536,38.91137197553621],[141.4769771673623,38.90457652368761],[141.470310906723,38.89700592728164],[141.46209435427102,38.88987457954815],[141.45496300743685,38.881968085458766],[141.4507255386526,38.87276968017659],[141.45010542192773,38.863674628581265],[141.45144900906456,38.85318431210632],[141.449950393196,38.83266876894851],[141.45057050992108,38.82409048129071],[141.4488651875783,38.81628733998869],[141.4432841325567,38.80941437377433],[141.41677412322713,38.78858877225397],[141.40669721880158,38.78543650998694],[141.3554341984294,38.80476349473946],[141.33404015522888,38.808716743582835],[141.3207076357487,38.81303172493418],[141.3093904969739,38.81003449229797],[141.3031893252271,38.80435008448879],[141.2974532405746,38.7968053247059],[141.28908165939112,38.79052663769417],[141.26065962124454,38.77840851504092],[141.25135786407407,38.77246572481337],[141.23647505098285,38.75828054551073],[141.2284135281617,38.754172267935786],[141.21776818295524,38.75378469520757],[141.18087120993835,38.77386098879356],[141.1461446472577,38.78621165634286],[141.13343224540176,38.79876902946711],[141.11353681896907,38.822385158947895],[141.11245161425052,38.83137685775574],[141.1177226100105,38.839800117581376],[141.13296715740836,38.8494119331142],[141.13622277156355,38.85274506343396],[141.13699791881885,38.85711172072925],[141.12888471915437,38.86364879015957],[141.1126066429821,38.869462389177926],[141.0741077013094,38.87323476817005],[141.00527469267286,38.872924709807506],[140.99266564270522,38.875198472931146],[140.9763875674322,38.880417791847606],[140.9070377948583,38.91405914980987],[140.81608727440818,38.94658946373272],[140.75944990458936,38.95173126918269],[140.77464277604332,39.00392446554167],[140.79531334883188,39.03911611621575],[140.79841393425556,39.04867625580454],[140.7946932312076,39.0602001001545],[140.78585656113137,39.06784821182549],[140.77278242406953,39.075392970709004],[140.75851972860255,39.08640005112139],[140.751336704925,39.09906077703323],[140.7493730001638,39.11327179655615],[140.75293867358084,39.12756033044485],[140.7639457539933,39.14807587270329],[140.77495283440578,39.157300117306534],[140.7861666203932,39.16272614179795],[140.7940731135833,39.16779043198284],[140.79608849518786,39.174715074141375],[140.79061079295366,39.182053128349196],[140.78244591734517,39.18835765198398],[140.7741776880498,39.19579905897939],[140.76921674975318,39.2057984481398],[140.76999189700837,39.22003530518518],[140.7665812523229,39.2312490911726],[140.76053511020717,39.24086090850409],[140.75154340960057,39.24783722570737],[140.73169966001132,39.25918020290399],[140.72281131399086,39.266285712215875],[140.7173852886001,39.27364960394604],[140.70684329618115,39.28561269786766],[140.69940189008514,39.292072252032824],[140.69335574796935,39.30256256850768],[140.68451907789313,39.33434357449636],[140.66446862182943,39.36741648987905],[140.66043786041882,39.3807490102586],[140.65811242135112,39.39227285370919],[140.6759924661793,39.43550019058134],[140.7143363791206,39.49278351554676],[140.72932254499943,39.529267076514344],[140.73914106700659,39.546888739823515],[140.74813276581455,39.56014374403853],[140.79092085221555,39.599081936182415],[140.80616539871414,39.62161286094474],[140.81035118975558,39.63137970610859],[140.81376183534047,39.64393707923276],[140.81283165935355,39.66235972821892],[140.80864586831223,39.67713918672402],[140.80053266774837,39.69318471889966],[140.79019738180364,39.71977224439351],[140.7971736999063,39.734990953369845],[140.8041500180089,39.74594635693887],[140.81918785983186,39.76522166574733],[140.824613886122,39.7750401877544],[140.82647423719618,39.78434194582414],[140.81624230403906,39.794315497462236],[140.79371137927671,39.80904328092265],[140.7861666203932,39.81733734774036],[140.7827559757077,39.829145412930444],[140.7831693868577,39.84015249334291],[140.78585656113137,39.85033275055602],[140.79438317284507,39.86046133092566],[140.80477013563325,39.865551459532185],[140.81655236240158,39.868471177802604],[140.83034996987516,39.86854869216839],[140.84249393095018,39.866972561034856],[140.85396609935594,39.86666250357169],[140.8640430037815,39.87033152887696],[140.8705542338908,39.878315538231504],[140.8690039411789,39.89123464656163],[140.85505130407438,39.92133616772992],[140.84941857310872,39.938596095833134],[140.84528445891056,39.95815562638106],[140.8444576357113,39.96665639877372],[140.84249393095018,39.977456772711946],[140.84063357987577,40.03954600724242],[140.83784305191523,40.05383454023183],[140.83815311117712,40.066391913356114],[140.84156375496337,40.077166449771795],[140.85055545467048,40.0919975860198],[140.85598148006125,40.10408987115062],[140.85567142079935,40.11749990499655],[140.85691165604806,40.13256358524126],[140.86032229983425,40.14204621046426],[140.8618725934454,40.15015941012871],[140.8595471543777,40.1596161969299],[140.85644656805465,40.16829783827464],[140.85541303928034,40.180596828980526],[140.8705542338908,40.20162913697504],[140.88481692935778,40.21674449316379],[140.9070377948583,40.22948273434076],[140.9262614277227,40.24397797290513],[140.97437218582763,40.21930247712763],[140.98847985166378,40.21434153883092],[141.00150231278144,40.211318467773],[141.01343956918072,40.213101305380945],[141.02542850242344,40.21863068355921],[141.08764692636453,40.26268484093265],[141.24153934116765,40.33417918632037],[141.30251753075942,40.35539236146832],[141.3149198751521,40.35508230220648],[141.32566857314612,40.34996633607753],[141.33543541920915,40.34262828186971],[141.35688113835374,40.340070298805216],[141.3829260596898,40.34554800103942],[141.43057173070076,40.36177440036823],[141.4543428898125,40.36740713223335],[141.4735665217775,40.36854401289585],[141.51108361241876,40.35898387330707],[141.53687015223574,40.35640005092162],[141.55314822840796,40.35919057888205],[141.56544721911382,40.36756216096498],[141.5707182148737,40.376295478253695],[141.57381880119675,40.3858814562642],[141.57846968023154,40.39644928620555],[141.58777143830122,40.40709463231141],[141.67448449086646,40.4481257195263],[141.68098803715316,40.45100587481204],[141.68100019600007,40.45099518400008],[141.69092858200014,40.442287502000084],[141.71914098100007,40.41283517800008],[141.7260845130001,40.39379277500004],[141.74377693500008,40.38392223200012],[141.753573888,40.369490560000116],[141.75855553500003,40.35895416900007],[141.772797071,40.33392975500007],[141.77556399800005,40.32758209800002],[141.7784936860001,40.31549713700011],[141.78565514400015,40.30687083500001],[141.80347741000003,40.29002513200001],[141.830414259,40.251166083000015],[141.8419702480001,40.22577545800007],[141.83423912900008,40.21434153900012],[141.82447350400003,40.2110049500001],[141.81519616000003,40.202866929000095],[141.81023196700005,40.19277578300003],[141.813324415,40.18357982000006],[141.82593834700003,40.17568594000008],[141.8527938160001,40.167222398000035],[141.8650008470001,40.15973541900007],[141.87720787900003,40.13930898600009],[141.86589603000004,40.12726471600007],[141.84742272200003,40.11513906500008],[141.8375757170001,40.094549872000044],[141.8424585300001,40.070379950000046],[141.85499108200008,40.0549990910001],[141.91960696700005,40.00885651200008],[141.93034915500004,40.00409577000008],[141.94117272200003,40.00145091400009],[141.949554884,39.99656810100004],[141.95533287900008,39.97492096600004],[141.95964603000004,39.96430084800011],[141.96143639400015,39.95368073100005],[141.95679772200003,39.94375234600005],[141.94507897200003,39.931301174000026],[141.942230665,39.92450592700001],[141.95297285200002,39.90643952000008],[141.95923912900008,39.89838288000004],[141.9660750660001,39.89175039300008],[141.97185306100005,39.88300202000002],[141.97543379,39.85219961100003],[141.97868899800005,39.83930084800002],[142.002289259,39.77757396000001],[142.0048934250001,39.772691148000035],[142.00391686300014,39.76740143400008],[142.00684655000015,39.76044342700007],[142.0087996750001,39.752752997000044],[142.0048934250001,39.74506256700005],[141.99390709700003,39.735296942000105],[141.99122155000015,39.730454820000034],[141.98389733200014,39.70697663000004],[141.98096764400015,39.662543036000045],[141.97828209700003,39.64785390800003],[141.9648543630001,39.625718492000146],[141.96045983200008,39.6116397160001],[141.96631920700014,39.59845612200007],[142.01246178500003,39.63580963700011],[142.03614342500015,39.63898346600007],[142.03101647200003,39.629624742000146],[142.02898196700005,39.62299225500007],[142.03077233200008,39.61749909100007],[142.03614342500015,39.6116397160001],[142.0273543630001,39.59471263200004],[142.03077233200008,39.58417389500008],[142.05909264400015,39.56289297100008],[142.0641382170001,39.559881903000075],[142.0681258470001,39.55638255400001],[142.07032311300014,39.55019765800003],[142.0693465500001,39.54047272300008],[142.06470787900008,39.536444403000104],[142.05933678500003,39.533270575000046],[142.0566512380001,39.52602773600003],[142.05030358200008,39.522691148],[142.01514733200014,39.48871491100007],[141.9992781910001,39.481024481000134],[141.96631920700014,39.47134023600009],[141.95297285200002,39.460760809000135],[141.97087649800005,39.44326406500008],[141.9962671230001,39.445257880000014],[142.01889082100007,39.45937734600005],[142.02881920700008,39.47793203300006],[142.03638756600003,39.48379140800009],[142.05062910200002,39.47699616100007],[142.05844160200002,39.466294664000145],[142.04615319100003,39.460760809000135],[142.039886915,39.45457591400006],[142.03834069100003,39.44025299700007],[142.0380965500001,39.42401764500005],[142.031586134,39.417303778000075],[142.01059004,39.415716864000046],[142.00114993600005,39.41364166900013],[141.99170983200014,39.41437409100007],[141.98096764400015,39.4124209660001],[141.9716903000001,39.40696849200009],[141.95020592500015,39.39154694200005],[141.93873131600003,39.38507721600004],[141.96412194100003,39.37555573100005],[141.95337975400003,39.36200592700007],[141.92693118600005,39.34642161700009],[141.90528405000015,39.33047109600008],[141.92465254000007,39.32489655200007],[141.94678795700014,39.3303897160001],[141.96713300900007,39.34096914300005],[141.98096764400015,39.35097890800003],[141.98365319100003,39.32713450700007],[141.96371504,39.31256745000013],[141.914886915,39.294867255000014],[141.9228621750001,39.29047272300005],[141.9288843110001,39.28388092700007],[141.9326278000001,39.27521393400008],[141.92432701900015,39.275824286000045],[141.9072371750001,39.274562893000024],[141.8990991550001,39.27521393400008],[141.8982039720001,39.26211172100011],[141.8990991550001,39.24852122600004],[141.93148847700002,39.247707424000026],[141.9470320970001,39.249701239000075],[141.94678795700014,39.24852122600004],[141.9492293630001,39.22801341400009],[141.930023634,39.21222565300005],[141.9021102220001,39.204331773000064],[141.87867272200003,39.207586981000105],[141.88168379,39.19245026200011],[141.89372806100005,39.186753648000035],[141.9262801440001,39.18707916900007],[141.91578209700003,39.1699893250001],[141.8951929050001,39.15936920800007],[141.86947675900007,39.153957424000026],[141.8437606130001,39.15232982],[141.8610945970001,39.13841380400004],[141.90886478000004,39.10976797100005],[141.9133406910001,39.097723700000046],[141.89047285200007,39.089544989000046],[141.83545983200008,39.1043154970001],[141.81714928500003,39.09088776200011],[141.859711134,39.07330963700008],[141.87183678500008,39.0629336610001],[141.8605249360001,39.05923086100006],[141.848480665,39.05703359600005],[141.83611087300005,39.05621979400004],[141.82325280000015,39.05670807500013],[141.82325280000015,39.04926178600007],[141.83399498800014,39.04441966400009],[141.8481551440001,39.03510163000004],[141.85572350400003,39.02606842700004],[141.84742272200003,39.021958726000065],[141.80648847700002,39.02948639500005],[141.76636803500003,39.02484772300011],[141.74561608200008,39.0261904970001],[141.72771243600005,39.03628164300005],[141.72820071700005,39.02171458500004],[141.7336531910001,39.0101992860001],[141.7414656910001,38.99949778900009],[141.7482202480001,38.98786041900007],[141.73666425900007,38.989325262000136],[141.7270613940001,38.98761627800013],[141.71338951900015,38.97418854400013],[141.72828209700003,38.969916083000015],[141.73389733200008,38.9605166690001],[141.73023522200003,38.95115794500006],[141.717133009,38.94684479400007],[141.7041121750001,38.95058828300009],[141.69092858200014,38.95962148600009],[141.680023634,38.97077057500013],[141.6731063160001,38.98102448100005],[141.68620853000004,38.98590729400013],[141.69361412900003,38.995306708000044],[141.6510522800001,38.99681224200009],[141.63835696700005,38.985419012000136],[141.64030353084496,38.96750341736643]]]}},{"type":"Feature","properties":{"iso_3166_2":"JP-04","name":"Miyagi","name_alt":null,"name_local":"宮城県","type":"Ken","type_en":"Prefecture","region":"Tohoku","postal":"MG","region_code":"JPN-THO"},"geometry":{"type":"MultiPolygon","coordinates":[[[[141.46859785200004,38.28420644700016],[141.48080488399998,38.27798086100002],[141.48178144600016,38.273749091000084],[141.48747806100002,38.268500067],[141.4897567070001,38.262844143],[141.4923608730002,38.25779857],[141.4981388680001,38.25470612200009],[141.49740644600016,38.250718492000104],[141.49903405000018,38.248480536000116],[141.49903405000018,38.24632396000014],[141.49740644600016,38.24636465100012],[141.49024498800011,38.250718492000104],[141.4795841810001,38.250718492000104],[141.472504102,38.258408921000054],[141.465586785,38.265692450000145],[141.46127363400004,38.26752350500011],[141.4566349620001,38.26911041900014],[141.4565535820001,38.273667710000026],[141.45972741000017,38.27968984600001],[141.46143639400006,38.282741604000094],[141.46428470100003,38.28180573100012],[141.46859785200004,38.28420644700016]]],[[[141.42660566500004,38.294338283000016],[141.41016686300023,38.285589911000145],[141.40577233200023,38.29336172100015],[141.40853925900004,38.29995351800012],[141.40707441500015,38.30426666900003],[141.41797936300023,38.31175364799999],[141.42139733200023,38.30255768400012],[141.42660566500004,38.294338283000016]]],[[[141.58342532600014,38.276597398000135],[141.5757755870002,38.26817454600017],[141.55892988400004,38.28119538000006],[141.54664147200006,38.29897695500013],[141.5568139980002,38.30931224200005],[141.5620223320001,38.31285228100013],[141.56706790500002,38.31053294500008],[141.57431074300004,38.307359117000104],[141.58220462300014,38.30491771000008],[141.58537845099997,38.29673899900017],[141.5811466810001,38.28685130400005],[141.58204186300017,38.28164297100015],[141.58342532600014,38.276597398000135]]],[[[141.12671959700006,38.327704169000086],[141.12224368600008,38.326727606000034],[141.11451256600006,38.335475979000094],[141.11801191500015,38.337795315000065],[141.12387128999998,38.342637437000135],[141.12867272200018,38.34792715100012],[141.13005618600008,38.3389753280001],[141.12671959700006,38.327704169000086]]],[[[141.62395267000008,38.85179271000011],[141.62704511800015,38.84874095300002],[141.63168379000015,38.84874095300002],[141.63323001400013,38.84686920800006],[141.63477623800023,38.84389883000013],[141.62981204500002,38.83820221600014],[141.62452233200023,38.83315664300012],[141.6163029310002,38.83746979400003],[141.60971113400015,38.85130442900011],[141.60482832099999,38.85586172100007],[141.60352623800006,38.862901109000134],[141.60637454500014,38.86456940300015],[141.60328209700006,38.867336330000015],[141.60075931100002,38.87319570500016],[141.60914147200018,38.87803782800013],[141.6168725920002,38.879990953000075],[141.62631269600004,38.88292064000011],[141.6307886080002,38.87897370000003],[141.6315210300002,38.87132396],[141.62712649800014,38.86367422100007],[141.62484785200016,38.859605210000026],[141.62395267000008,38.85179271000011]]],[[[141.64527428500006,38.92300039300012],[141.66879316499998,38.872626044000086],[141.67359459700018,38.85195547100007],[141.65211022200006,38.86432526200012],[141.64926191499998,38.86908600500011],[141.64568118600002,38.88263580900018],[141.64210045700017,38.88849518400012],[141.63672936300011,38.89109935100011],[141.6315210300002,38.88971588700004],[141.62525475400017,38.88690827000009],[141.61784915500007,38.88544342700011],[141.59864342500012,38.88519928600009],[141.58855228000007,38.88222890800007],[141.58448326900012,38.873114325000174],[141.58375084700006,38.854437567],[141.586192254,38.835109768000066],[141.58936608200005,38.826076565000065],[141.5870874360002,38.81924062700013],[141.57325280000006,38.806586005000085],[141.53052819100017,38.78082916900003],[141.52165774800002,38.768133856000176],[141.53199303500006,38.7633324240001],[141.53882897200006,38.756252346000124],[141.54908287900017,38.74079010600009],[141.56706790500002,38.72882721600017],[141.57260175900015,38.71865469000012],[141.56641686300006,38.703558661000116],[141.55974368600013,38.69953034100014],[141.55445397200006,38.70258209800015],[141.54908287900017,38.707017320000105],[141.54281660200004,38.707261460000055],[141.53785241000017,38.704087632],[141.52540123800006,38.68992747600008],[141.51587975400017,38.684271552000084],[141.49105879000004,38.677557684000035],[141.480723504,38.672552802],[141.4630639980002,38.66136302299999],[141.46314537900017,38.65546295800014],[141.47388756600017,38.64520905200011],[141.48519941500015,38.64085521000011],[141.53223717500006,38.638413804],[141.53516686300011,38.632025458000086],[141.52808678500006,38.61790599200005],[141.51775149800002,38.603827216000084],[141.5114038420002,38.597398179],[141.46705162900017,38.56952545800014],[141.48308353000007,38.557318427000055],[141.49903405000018,38.541652736000074],[141.51465905000023,38.53481679900007],[141.529144727,38.54901764500009],[141.54224694100017,38.533433335],[141.54761803500006,38.51862213700012],[141.54712975400005,38.50214264500012],[141.54281660200004,38.48139069200012],[141.53174889400012,38.48407623900003],[141.52418053500006,38.489691473],[141.5187280610002,38.497951565],[141.51482181100013,38.508042710000055],[141.5006616550002,38.47044505400008],[141.49496504000004,38.460882880000085],[141.50074303500017,38.45791250200007],[141.50326582099999,38.45465729400003],[141.50489342500012,38.45099518400015],[141.5079858730002,38.446600653000175],[141.48292076900012,38.44061920800006],[141.47144616000006,38.435736395],[141.47046959700018,38.429510809000035],[141.47722415500013,38.41844310100002],[141.476817254,38.409735419000114],[141.47754967500023,38.40155670800003],[141.487559441,38.392035223],[141.49903405000018,38.39960358300006],[141.51840253999998,38.40232982000013],[141.53760826900023,38.398179429],[141.54908287900017,38.38515859600001],[141.53419030000023,38.389837958000115],[141.52035566500004,38.390529690000065],[141.50904381600006,38.38515859600001],[141.50123131600006,38.37152741100006],[141.525238477,38.359930731000034],[141.52930748800017,38.33954498900006],[141.52979576900023,38.31793854400014],[141.54281660200004,38.302639065],[141.537364129,38.29507070500016],[141.52540123800006,38.267808335000055],[141.51856530000023,38.27045319200015],[141.49122155000006,38.29238515800007],[141.484629754,38.29559967700011],[141.46998131600017,38.296087958000115],[141.46338951900012,38.299221096000096],[141.45997155000012,38.306341864000146],[141.46338951900012,38.31240469000012],[141.46753991000006,38.31781647300009],[141.46705162900017,38.32306549700017],[141.457774285,38.330877997000144],[141.42554772200018,38.343573309000035],[141.43083743600008,38.350246486000074],[141.439707879,38.37152741100006],[141.42807050899998,38.380438544000086],[141.4194442070001,38.380682684000035],[141.41049238400015,38.37791575700008],[141.39812259200014,38.37767161700013],[141.38624108200005,38.380845445000105],[141.3761499360002,38.38544342700014],[141.35377037900017,38.40224844000015],[141.33318118600008,38.40900299700009],[141.30445397200012,38.407904364000146],[141.22950280000023,38.39411041900003],[141.202403191,38.38580963700015],[141.18091881600017,38.37116120000006],[141.17212975400005,38.347316799000154],[141.17497806100008,38.32436758000007],[141.16968834700018,38.322821356000034],[141.15211022200006,38.32306549700017],[141.14771569100017,38.32949453300007],[141.13184655000023,38.37152741100006],[141.12322024800002,38.36652252800012],[141.11459394600004,38.36465078300013],[141.10596764400023,38.366156317],[141.0978296230002,38.37152741100006],[141.07943769600016,38.360907294000114],[141.06470787900017,38.34662506700012],[141.0542098320001,38.32916901200015],[141.048675977,38.30947500200001],[141.05836022200006,38.313706773000135],[141.06959069100006,38.31488678600006],[141.07911217500023,38.31159088700004],[141.08350670700023,38.302639065],[141.08057701900012,38.29490794499999],[141.07252037900017,38.289536851000136],[141.06226647200006,38.28473541900014],[141.05274498800023,38.27871328300013],[141.01734459700006,38.24485911700016],[140.98796634200002,38.20701732000013],[140.96680748800023,38.170477606000176],[140.92579186300023,38.04938385600012],[140.9186304050002,38.00722890800016],[140.91976972700004,37.96515534100011],[140.93262780000023,37.891750393000095],[140.93319259500842,37.88980498920621],[140.92672651571607,37.8897805853057],[140.8778406112551,37.887713527757015],[140.86466312140604,37.88303681119989],[140.85489627534272,37.87603465377633],[140.85272586500676,37.867508042961774],[140.8552063337053,37.84735423411054],[140.8552063337053,37.83810415288441],[140.85272586500676,37.810043849943796],[140.8496252786837,37.79877838801214],[140.84125369660094,37.790897732344476],[140.8249239435851,37.786376044518775],[140.7780534198295,37.785962633368754],[140.77510786403658,37.783740546189264],[140.78461632678201,37.77542064094975],[140.7789835958163,37.770382188287286],[140.76410078272485,37.77020132113411],[140.73304324804744,37.77686758087417],[140.6946993351062,37.798545844015464],[140.68730960495432,37.80751170530105],[140.682813754651,37.815676580909454],[140.68105675726346,37.82389313426076],[140.68296878518143,37.846992498904754],[140.6794031108649,37.859911607234906],[140.66958458885765,37.87236562847097],[140.65160119034263,37.882907619990604],[140.63191247038415,37.88652497025119],[140.61439415896328,37.894224757866326],[140.57491336535955,37.90326813441688],[140.51739749639725,37.89319122999122],[140.5083541198468,37.89313955314789],[140.49796715705864,37.89494822917747],[140.48499637278442,37.9034231631485],[140.46882164939947,37.92517894155496],[140.4576595402556,37.93564341870872],[140.44324181515762,37.94300731133826],[140.40458784385382,37.95463450847582],[140.39032514928616,37.95365265654486],[140.3529114123319,37.94621124954945],[140.32061364240568,37.945849514343664],[140.26955732580998,37.96424632400864],[140.27705040874932,38.03018545189711],[140.2823214054085,38.045119940932594],[140.29503380816365,38.05659210933841],[140.3085730332189,38.061656399523216],[140.34484988771217,38.06506704420873],[140.3606628767902,38.068632716726526],[140.3788013040369,38.07870962205136],[140.396526321033,38.091163642388224],[140.41388960192367,38.11441803576368],[140.44070966961553,38.13945526854572],[140.45078657404113,38.15214183197999],[140.45905480423576,38.175137843836424],[140.46215538965956,38.19079580328376],[140.463085564747,38.20821076101778],[140.46138024330358,38.24484935251566],[140.46820153177524,38.26781952595046],[140.47435102757774,38.2817463237338],[140.48277428560485,38.29518219690091],[140.50308312408688,38.31872081201594],[140.5119714701074,38.33311269779274],[140.52251346162697,38.357710680103864],[140.5431323593708,38.37938894324516],[140.55227908691037,38.38579682146617],[140.55972049390576,38.39478852027402],[140.5726396022359,38.42954092137647],[140.58504194572927,38.45289866843886],[140.58793582557783,38.46571442308222],[140.58204471219366,38.48002879539264],[140.5740348653168,38.48865875899459],[140.56519819613996,38.496513577139936],[140.55837690586955,38.508089098333144],[140.55491458613918,38.52436717450557],[140.55429446761562,38.567775376732314],[140.54886844312412,38.584647732107115],[140.53791303865577,38.60738536244459],[140.53460574765714,38.619167589212864],[140.53439904208219,38.63118235907855],[140.54111697776628,38.642137763546955],[140.55212405817875,38.64404979146464],[140.56798872320113,38.64175018991928],[140.58194136030548,38.64327464510883],[140.59108808784495,38.649553331221185],[140.5989945819343,38.65978526527773],[140.60364546096937,38.671955063875046],[140.60597090093646,38.68637278897303],[140.60457563695613,38.710402330503214],[140.6067460472922,38.73231313674192],[140.60891645672908,38.73639557589503],[140.6163578637244,38.7474026563075],[140.6182182147987,38.7555675319161],[140.61604780536183,38.765437729867315],[140.59511885015482,38.790242417753305],[140.5771354507406,38.8222301302164],[140.5426672713776,38.85752513277869],[140.53290042531435,38.88170970304033],[140.5440625353576,38.873699856163356],[140.5580668484063,38.87152944582728],[140.57760053873395,38.87202037224246],[140.64198937391043,38.88933197718909],[140.69562951109302,38.91679800092693],[140.7104089695982,38.92811513880265],[140.72549848916393,38.936951808878874],[140.73428348239688,38.94346303988745],[140.75944990458933,38.951731269182645],[140.81608727440826,38.94658946373271],[140.90703779485833,38.91405914980983],[140.97638756743217,38.88041779184765],[140.99266564270525,38.87519847293122],[141.00527469267283,38.87292470980755],[141.0741077013095,38.87323476817001],[141.11260664298206,38.86946238917797],[141.1288847191544,38.863648790159615],[141.13699791881893,38.85711172072932],[141.13622277156358,38.852745063434],[141.13296715740844,38.849411933114155],[141.1177226100106,38.83980011758133],[141.11245161425055,38.831376857755785],[141.11353681896915,38.82238515894785],[141.1334322454018,38.79876902946707],[141.14614464725778,38.7862116563429],[141.18087120993832,38.7738609887936],[141.21776818295533,38.75378469520753],[141.22841352816172,38.75417226793583],[141.23647505098293,38.75828054551077],[141.2513578640741,38.772465724813415],[141.26065962124457,38.778408515040994],[141.28908165939114,38.79052663769424],[141.2974532405747,38.79680532470597],[141.30318932522712,38.80435008448886],[141.30939049697398,38.81003449229793],[141.32070763574868,38.81303172493422],[141.33404015522885,38.808716743582906],[141.35543419842944,38.804763494739504],[141.4066972188016,38.785436509986894],[141.41677412322716,38.788588772254016],[141.44328413255678,38.80941437377437],[141.44886518757838,38.81628733998876],[141.45057050992116,38.82409048129075],[141.44995039319602,38.832668768948466],[141.45144900906465,38.853184312106364],[141.45010542192782,38.863674628581336],[141.45072553865262,38.872769680176546],[141.45496300743682,38.88196808545872],[141.46209435427104,38.88987457954822],[141.47031090672309,38.89700592728171],[141.47697716736232,38.90457652368765],[141.48131798713544,38.91137197553617],[141.48395348456577,38.92124217438676],[141.48395348456577,38.93240428353094],[141.48235151590976,38.94744212535382],[141.48235151590976,38.963616847839305],[141.48581383743877,38.97700104416289],[141.4994564152813,38.986767890226005],[141.51480431456756,38.98961009413058],[141.5399707376595,38.990152696489716],[141.5677209822375,38.98568268550757],[141.59536787312888,38.976303412172754],[141.63366011012593,38.96955963806677],[141.640303530845,38.9675034173665],[141.64055423300013,38.96519603100016],[141.64527428500006,38.92300039300012]]]]}},{"type":"Feature","properties":{"iso_3166_2":"JP-15","name":"Niigata","name_alt":null,"name_local":"新潟県","type":"Ken","type_en":"Prefecture","region":"Chubu","postal":"NI","region_code":"JPN-THO"},"geometry":{"type":"MultiPolygon","coordinates":[[[[138.43751061300006,38.063788153000175],[138.44320722700016,38.051947333000115],[138.45150800900015,38.052435614],[138.45923912900005,38.06989166900014],[138.49463951900023,38.066961981000034],[138.54078209700018,38.076727606000176],[138.57520592500012,38.074286200000145],[138.57520592500012,38.03510163000011],[138.56592858200017,38.01634349200005],[138.52442467500023,37.96344635600009],[138.51319420700017,37.9448102890001],[138.50049889400012,37.906683661000116],[138.48650149800002,37.891750393000095],[138.370371941,37.82876211100016],[138.26514733200005,37.7983259140001],[138.24317467500023,37.796128648000106],[138.2325952480002,37.797674872000144],[138.22266686300011,37.8022321640001],[138.21509850400005,37.80955638200011],[138.21216881600006,37.81940338700004],[138.21550540500007,37.83026764500012],[138.223887566,37.834173895000035],[138.27214603000007,37.842230536000145],[138.28321373800006,37.84833405200014],[138.28785241,37.861029364],[138.28785241,37.905991929],[138.298594597,37.92243073100009],[138.33082116000017,37.95189036700016],[138.34253991000006,37.96686432500012],[138.3147892590001,37.997463283000044],[138.24789472700016,37.978501695000105],[138.23267662900017,38.00775788000014],[138.2325952480002,38.03131745000009],[138.23560631600012,38.05215078300007],[138.24219811300006,38.071478583],[138.25310306100008,38.090318101000136],[138.29468834700006,38.13617584800012],[138.31006920700005,38.16811758000013],[138.32911217500023,38.18195221600003],[138.34815514400023,38.192816473000036],[138.35670006600017,38.20359935100011],[138.40186608200023,38.24119700700011],[138.42855879000015,38.256293036000116],[138.4694116550002,38.313177802000055],[138.4780379570001,38.31956614799999],[138.48951256600006,38.322455145000035],[138.51417076900023,38.32306549700017],[138.52003014400006,38.31850820500013],[138.51929772200006,38.30744049700009],[138.50709069100017,38.24144114800008],[138.48658287900005,38.18130117400007],[138.44385826900012,38.102240302000084],[138.43816165500002,38.0834821640001],[138.43751061300006,38.063788153000175]]],[[[139.2212833990001,38.43764883000016],[139.21664472700016,38.437567450000174],[139.21574954499997,38.44159577000015],[139.21762129000015,38.444769598],[139.22282962300002,38.44944896000011],[139.22413170700023,38.45567454600008],[139.2221785820001,38.460557359000134],[139.22934004000004,38.4646263690001],[139.23080488399998,38.467067776000064],[139.23568769600016,38.47048574400007],[139.24073326900012,38.478949286],[139.24463951900006,38.48371002800009],[139.2505802740002,38.48562246300007],[139.25196373800011,38.48948802300005],[139.25831139400012,38.49119700700005],[139.25896243600008,38.48309967700014],[139.25806725400017,38.47544993700011],[139.25505618600008,38.46653880400008],[139.24683678500017,38.45506419500013],[139.24268639400023,38.44855377800003],[139.23682701900012,38.44635651200004],[139.22315514400023,38.43764883000016],[139.2212833990001,38.43764883000016]]],[[[139.74896894755884,38.359519355234156],[139.7629215837641,38.354610093780806],[139.79160200432895,38.35641876891107],[139.80560631737765,38.35435171226176],[139.8465857277491,38.330115465156624],[139.85526736909375,38.32231232385472],[139.86224368719647,38.314379991343614],[139.86922000529913,38.30071157507918],[139.87118371006014,38.28590627725289],[139.8636389511768,38.265726629979966],[139.85526736909375,38.2520323761933],[139.8444153183124,38.24087026614991],[139.80808678607625,38.2185202094402],[139.79366906097837,38.21193146406584],[139.77816613206133,38.20857249622374],[139.75548017766815,38.207590644292864],[139.7163611192702,38.209916083360596],[139.70147830617898,38.20908926016118],[139.68737064034272,38.202061266114626],[139.67915408699153,38.187566025751394],[139.66458133406124,38.07194000952383],[139.6445308779977,38.041347561041206],[139.64184370282467,38.029281114331994],[139.64391076127256,38.0011949729696],[139.6436007020109,38.00010976825125],[139.63507409119634,37.97969757698165],[139.63243859286675,37.96946564382445],[139.62954471211881,37.945332750406166],[139.62003624937338,37.921975003343775],[139.61740075104373,37.90957265895112],[139.6194161317491,37.895775051477514],[139.63104332888648,37.87929026973022],[139.65398766479885,37.85890391688231],[139.68830081632953,37.84296173839353],[139.7246293476662,37.820379136787764],[139.685665318,37.78035573992544],[139.66561486193646,37.76384511975654],[139.59533491427484,37.680439358189815],[139.54799930162645,37.638323066256575],[139.53714725174436,37.62437042915205],[139.53327151906538,37.61367340800139],[139.53575198776397,37.60364818041917],[139.53869754535552,37.597498683717376],[139.54412356984685,37.58866201454036],[139.5495495952375,37.577293198921936],[139.55285688713573,37.563082180298366],[139.55606082624612,37.51814952198278],[139.5535803566481,37.50649648732299],[139.54350345312182,37.50386098899345],[139.51544315018126,37.5089769560217],[139.502834101113,37.50755585451908],[139.4803548522947,37.50225902033752],[139.46717736244537,37.50122549156312],[139.41953169233378,37.50334422505587],[139.40387373288652,37.496161201378314],[139.39519209244125,37.48840973602056],[139.38139448496761,37.46081452107332],[139.3710591981235,37.45838572831876],[139.34072513205913,37.461822211425996],[139.3259973485988,37.461279609066665],[139.2635722190827,37.44732697196214],[139.2257450709782,37.44691356081212],[139.2087952012375,37.44112580021546],[139.19556603364546,37.429343574346476],[139.18853803869948,37.41812978835905],[139.186781041312,37.408440457560985],[139.18879642111804,37.399009508282134],[139.19732303283163,37.38978526547761],[139.20383426294094,37.37957916894349],[139.20817508361327,37.36733185508113],[139.20817508361327,37.35459361390416],[139.1939123881463,37.29658681942625],[139.18833133402396,37.283512682364474],[139.16011600235166,37.24077627190751],[139.15556847610426,37.22589345971535],[139.1594958838281,37.213697821797055],[139.17251834494564,37.196076158487884],[139.17840945922913,37.18956492837877],[139.18740115803715,37.189668281166334],[139.19499759286455,37.19230377949587],[139.20429935093418,37.192097073021515],[139.2100354346875,37.18548249012481],[139.23101606673814,37.14930898751986],[139.23520185777957,37.13990387576335],[139.2362870633972,37.129051825881064],[139.23458174015522,37.11556427677],[139.23458174015522,37.09068207541752],[139.24062788317033,37.03949656851192],[139.23923261919,37.027921048217806],[139.23132612510048,37.00094594999557],[139.22698530532764,36.961775213855006],[139.2145829609349,36.94565216731367],[139.20073367661794,36.950974839916896],[139.1901916850983,36.9519308543254],[139.17789269439234,36.95410126376238],[139.1675574084476,36.96022492114311],[139.15649865119175,36.988285224083896],[139.15138268416356,36.99489980698051],[139.14316613171164,37.000170802740385],[139.14177086773137,37.000739244420586],[139.1360347839782,37.003633124269314],[139.12921349460717,37.00818065051662],[139.1245626155724,37.01345164627649],[139.11634606312046,37.024613756319766],[139.11231530170986,37.0289287385704],[139.10451216040795,37.035569158989446],[139.09195478728347,37.03923818609344],[139.08001753088442,37.03657685024139],[139.07226606732522,37.02660329770403],[139.06311933798716,37.00905915055928],[139.05660810787785,37.000997625939604],[139.05397261044763,36.998723862815964],[139.0336120951221,36.986993312891016],[138.97397749176778,36.97198131038921],[138.96519249943438,36.967407944820835],[138.9605416203996,36.957356878816896],[138.95961144441267,36.927177843282934],[138.96395226508494,36.913457750175084],[138.96472741144092,36.90167552340672],[138.95868126842586,36.894440822885755],[138.92514326415042,36.88612091674686],[138.91708174042995,36.87847280507596],[138.9146012717314,36.869326077536485],[138.91057051032092,36.843229478457616],[138.90328413295643,36.83627899787747],[138.8901066431071,36.82666718234465],[138.83672488834296,36.8108283548447],[138.82246219287597,36.803593655223],[138.81419396358055,36.77902151133368],[138.80814782056538,36.767833563767894],[138.79414350841628,36.757808336185846],[138.76902876216766,36.750160224514744],[138.7440173687066,36.74742137339764],[138.72267500234946,36.74917837258387],[138.67952518074256,36.73065237081023],[138.66681277888657,36.76323436157652],[138.66960330594773,36.82258474409072],[138.66681277888657,36.83583974920511],[138.6576143736044,36.84997325346281],[138.64800255807157,36.85806061470562],[138.60459435404633,36.886482651952846],[138.5815466662456,36.90854848872182],[138.57446699355697,36.92296621381972],[138.55942915263327,36.98926707601477],[138.55524336159195,37.00063589073382],[138.5530729512557,37.002082831557416],[138.53586469909672,37.010041002490325],[138.51937991824863,37.01355499906397],[138.49969119739094,37.015389513515245],[138.4813977396141,37.01417511668832],[138.4242436058577,37.001669420407396],[138.38207563708093,36.9861664896918],[138.36574588406543,36.97740733488054],[138.35303348220955,36.96601268173994],[138.32357791618776,36.92560171214923],[138.29717125874666,36.91495636694283],[138.28626753112164,36.907669990477714],[138.2776375666203,36.89531932202904],[138.27376183484083,36.88405386009755],[138.27066124941715,36.85837067306808],[138.26394331283367,36.85082591418457],[138.2521610860654,36.84865550384849],[138.2342810412371,36.856045234000376],[138.2227055200436,36.858706569852345],[138.2154191426794,36.85976593704835],[138.20813276621428,36.85769888039904],[138.17847049371827,36.84436636001949],[138.16405276862045,36.83974131940643],[138.1460176941612,36.837131659498525],[138.1004390806991,36.835478013999236],[138.08534956293195,36.833178412453876],[138.07356733616356,36.82664134392293],[138.05806440634714,36.81044078211637],[138.0442151229295,36.80718516706186],[138.01196902894756,36.825762843880185],[138.00742150270017,36.83160228132017],[138.00561282756988,36.8387853049979],[138.00928185377452,36.86358999288389],[138.00835167868698,36.87433869087788],[138.00545779793916,36.882916978535675],[137.99848147983656,36.89041006147515],[137.98933475229703,36.89697296842779],[137.97331505764387,36.903639228167904],[137.95874230381438,36.905990506556705],[137.94261925727304,36.90699819600992],[137.92959679615515,36.910873927789524],[137.91249189678368,36.918211981997345],[137.8990043476724,36.92110586184607],[137.88474165310473,36.92213939151965],[137.87523318856088,36.92092499379346],[137.86872195935084,36.919245509872454],[137.86050540599982,36.91534394057042],[137.85321902863532,36.90916860634617],[137.8488782088622,36.90095205299487],[137.8479480328754,36.89242544218048],[137.8499634135808,36.873718574152875],[137.84531253544523,36.8613679057042],[137.8371993348815,36.8480353871234],[137.80107750911978,36.80338694874875],[137.78790001837112,36.79424022120919],[137.77534264524698,36.78736725499492],[137.73265791163342,36.77480988187055],[137.6947790866855,36.911959133407336],[137.68454715442775,36.92591177051186],[137.67167972204166,36.934955146163034],[137.63736657141024,36.95066478155444],[137.61674767456557,36.969216619951126],[137.61456389487736,36.975108174165584],[137.68327884200014,36.987982489000146],[137.80754467900007,37.0308052380001],[137.89673912900005,37.057521877000156],[137.9993741320002,37.11105409800017],[138.05339603000007,37.13011302300005],[138.07683353000007,37.14972565300012],[138.09750180400025,37.171059352],[138.16443255600015,37.16169930800005],[138.20695325900024,37.16920530200018],[138.24489497900012,37.183789445000016],[138.32510269600007,37.23104347200017],[138.43751590900015,37.32203684800008],[138.550629102,37.377915757000025],[138.57797285200016,37.40289948100012],[138.5968302050001,37.43529360200007],[138.6225396070001,37.47754346900014],[138.65973457800018,37.524432604000125],[138.7182723320001,37.564846096000124],[138.74659264400023,37.596869208000115],[138.76563561300023,37.63467031500009],[138.80942573500013,37.760771879000075],[138.8270238700002,37.797286966000044],[138.85767662900005,37.82782623900009],[138.93039446900005,37.8749231770001],[139.05988081300004,37.945941670000096],[139.06819343600014,37.955093852000104],[139.0913391500002,37.954658308000134],[139.13246598800018,37.95882893100004],[139.215943141,37.98993395400011],[139.23906219500012,38.00315458200011],[139.30453535200004,38.04193756700012],[139.40805097700016,38.13190338700012],[139.42514082100004,38.15127187700013],[139.43238366000006,38.169134833],[139.46216881600006,38.37498607000005],[139.47282962300008,38.41250234600007],[139.49268639400006,38.45416901200004],[139.52995853000007,38.50800202000006],[139.54871793192686,38.545003113482736],[139.54892947761326,38.544960232029055],[139.5623136739368,38.54224721933376],[139.6533158712306,38.50979441977667],[139.6802392926094,38.50416168881084],[139.69372684082103,38.49940745698858],[139.7017883654406,38.49439484274784],[139.70132327744736,38.486643378289344],[139.69961795510463,38.47822012026235],[139.69884280784927,38.46734223105916],[139.6999280125676,38.451761785977695],[139.696207310419,38.41553660742851],[139.70054813019217,38.39887095852795],[139.70938480026828,38.38768301006296],[139.7216321150302,38.37703766485636],[139.73455122336034,38.36794261326095],[139.74896894755884,38.359519355234156]]]]}},{"type":"Feature","properties":{"iso_3166_2":"JP-06","name":"Yamagata","name_alt":null,"name_local":"山形県","type":"Ken","type_en":"Prefecture","region":"Tohoku","postal":"YT","region_code":"JPN-THO"},"geometry":{"type":"Polygon","coordinates":[[[139.96275434813464,39.0982339538339],[139.97365807486017,39.09937083629504],[139.9845101256417,39.10169627536277],[139.99489708932919,39.10603709603518],[140.01215701743246,39.109809475027305],[140.02414594887642,39.108362535102884],[140.03520470613233,39.105106920048286],[140.06858768077677,39.077149969895146],[140.10429609628773,39.05738373557091],[140.12620690342578,39.048469550229555],[140.15054650331842,39.04500722870063],[140.16511925714792,39.04526561111902],[140.1780383645788,39.04118317286506],[140.18454959468795,39.034336045971685],[140.1949365583754,39.026739610244846],[140.21069786971094,39.019995836138946],[140.2858354028815,39.00831696215806],[140.31968346641884,39.00718008149556],[140.34278283106283,39.0038469511758],[140.4050529318473,38.97565745702602],[140.4211759792879,38.963875230257656],[140.43326826441887,38.939742336839345],[140.44892622296675,38.91540273694673],[140.4793636418185,38.89220001951523],[140.53290042531432,38.881709703040286],[140.54266727137752,38.85752513277865],[140.5771354507405,38.822230130216354],[140.5951188501548,38.79024241775335],[140.61604780536186,38.76543772986727],[140.61821821479873,38.75556753191606],[140.61635786372437,38.74740265630754],[140.60891645672905,38.736395575895074],[140.60674604729218,38.73231313674185],[140.6045756369561,38.71040233050317],[140.60597090093637,38.686372788973074],[140.6036454609693,38.67195506387509],[140.59899458193433,38.659785265277776],[140.59108808784492,38.64955333122123],[140.58194136030545,38.64327464510879],[140.56798872320104,38.64175018991932],[140.55212405817872,38.64404979146468],[140.54111697776625,38.642137763547],[140.53439904208216,38.63118235907859],[140.5346057476571,38.61916758921282],[140.5379130386558,38.607385362444546],[140.5488684431241,38.58464773210716],[140.55429446761553,38.56777537673227],[140.55491458613915,38.52436717450553],[140.55837690586947,38.50808909833319],[140.56519819613987,38.49651357713989],[140.57403486531678,38.488658758994546],[140.5820447121937,38.4800287953926],[140.5879358255778,38.465714423082176],[140.5850419457292,38.45289866843879],[140.57263960223582,38.4295409213764],[140.55972049390567,38.39478852027398],[140.55227908691035,38.38579682146613],[140.54313235937082,38.37938894324512],[140.52251346162694,38.35771068010382],[140.5119714701073,38.3331126977927],[140.50308312408686,38.3187208120159],[140.48277428560476,38.29518219690087],[140.47435102757777,38.28174632373384],[140.4682015317752,38.267819525950415],[140.46138024330355,38.244849352515615],[140.46308556474696,38.208210761017824],[140.46215538965947,38.19079580328372],[140.45905480423573,38.17513784383647],[140.4507865740411,38.15214183197995],[140.44070966961556,38.13945526854576],[140.4138896019236,38.11441803576372],[140.39652632103292,38.09116364238818],[140.37880130403687,38.078709622051406],[140.36066287679023,38.06863271672648],[140.34484988771214,38.06506704420869],[140.30857303321886,38.06165639952317],[140.29503380816368,38.05659210933837],[140.28232140540848,38.04511994093255],[140.27705040874935,38.03018545189704],[140.2695573258099,37.964246324008684],[140.27043582585264,37.925850735123305],[140.26738691637308,37.90670461752407],[140.26506147730527,37.87231395072823],[140.26707685801057,37.83105032041601],[140.27374311685128,37.79955353436807],[140.2692472683467,37.780536607078744],[140.26118574372714,37.768986925206434],[140.23095503134965,37.74741201395324],[140.22268680205428,37.74332957569939],[140.21447024960236,37.74059072548158],[140.20330813955889,37.73849783041055],[140.19245608877753,37.738937079082916],[140.18222415562025,37.74035818148491],[140.17256066324398,37.74307119418029],[140.16170861156314,37.74229604782428],[140.14930626806972,37.73849783041055],[140.13147789918565,37.7268447939521],[140.11737023334956,37.722607326966624],[140.10429609628773,37.72265900291069],[140.09390913260034,37.727361558788886],[140.07205000230567,37.745474148513125],[140.06104292189332,37.7522179235184],[140.04915734323674,37.756041978454476],[140.03634158679472,37.75717886001635],[140.007609491185,37.754336656111775],[139.99923790910213,37.754284980167625],[139.99055626775748,37.75653290486966],[139.97923912988193,37.761984767782764],[139.9655448751958,37.77294017225117],[139.94559777191955,37.79994110799578],[139.93236860612626,37.81159414355494],[139.91655561704806,37.81453970024691],[139.90430830318564,37.80805430855949],[139.88999393087516,37.80466950139632],[139.87821170500615,37.80552216211808],[139.85015140206553,37.81185252507396],[139.82560509659794,37.81149078986809],[139.80638146373354,37.80598725011146],[139.79067182834217,37.805754706114755],[139.77609907361335,37.809268704487124],[139.76478193573774,37.81645172816468],[139.72462934766622,37.82037913678772],[139.6883008163295,37.842961738393484],[139.65398766479882,37.85890391688227],[139.63104332888645,37.87929026973018],[139.61941613174906,37.89577505147747],[139.61740075104376,37.90957265895108],[139.62003624937336,37.921975003343704],[139.62954471211873,37.945332750406095],[139.63243859286672,37.96946564382441],[139.63507409119632,37.97969757698158],[139.64360070201081,38.00010976825121],[139.64391076127254,38.00119497296964],[139.6418437028246,38.02928111433195],[139.64453087799762,38.041347561041135],[139.66458133406127,38.071940009523786],[139.6791540869915,38.18756602575144],[139.6873706403427,38.202061266114555],[139.7014783061789,38.20908926016119],[139.71636111927023,38.209916083360525],[139.75548017766806,38.20759064429282],[139.7781661320613,38.208572496223695],[139.79366906097835,38.2119314640658],[139.80808678607627,38.21852020944016],[139.84441531831231,38.24087026614987],[139.85526736909378,38.25203237619323],[139.8636389511767,38.26572662998001],[139.8711837100601,38.285906277252934],[139.86922000529904,38.300711575079134],[139.86224368719644,38.31437999134354],[139.85526736909378,38.322312323854675],[139.84658572774913,38.33011546515658],[139.80560631737762,38.35435171226172],[139.79160200432898,38.35641876891103],[139.76292158376407,38.354610093780735],[139.74896894755886,38.35951935523411],[139.73455122336026,38.36794261326099],[139.7216321150301,38.37703766485632],[139.70938480026825,38.387683010062915],[139.7005481301921,38.39887095852791],[139.69620731041903,38.415536607428464],[139.69992801256763,38.45176178597765],[139.69884280784925,38.46734223105912],[139.69961795510454,38.47822012026239],[139.70132327744733,38.4866433782893],[139.70178836544062,38.49439484274777],[139.693726840821,38.499407456988536],[139.68023929260931,38.50416168881088],[139.65331587123052,38.509794419776625],[139.56231367393684,38.54224721933372],[139.54892947761323,38.5449602320291],[139.54871793192683,38.54500311348269],[139.58008873800014,38.60687897300005],[139.5992151490001,38.648254087000026],[139.6270589990001,38.68121429300004],[139.71615644600007,38.7456729190001],[139.747406446,38.77895742400011],[139.7738443330001,38.817116774000056],[139.81527369900004,38.941062635],[139.8575639610001,39.03228377100004],[139.8673056450001,39.06222210900012],[139.87403405000015,39.09845612200007],[139.88062584700003,39.11473216400012],[139.8808549493155,39.115106310035316],[139.88100223206732,39.11510631010816],[139.8856531111021,39.11510631010816],[139.96275434813464,39.0982339538339]]]}},{"type":"Feature","properties":{"iso_3166_2":"JP-42","name":"Nagasaki","name_alt":null,"name_local":"長崎県","type":"Ken","type_en":"Prefecture","region":null,"postal":null,"region_code":null},"geometry":{"type":"MultiPolygon","coordinates":[[[[129.78126061300023,32.55255768400009],[129.77515709700006,32.546210028000175],[129.77670332099999,32.565293687000164],[129.78166751400025,32.566961981000176],[129.7896427740001,32.56521230700018],[129.79070071700008,32.563015041000185],[129.79004967500012,32.55874258000007],[129.7862248060001,32.553859768],[129.78126061300023,32.55255768400009]]],[[[128.90316816500015,32.56004466400016],[128.90007571700008,32.56004466400016],[128.89014733200005,32.564683335],[128.89885501400025,32.57139720300013],[128.90357506600006,32.572495835],[128.90316816500015,32.56004466400016]]],[[[128.84115644599999,32.600246486000074],[128.8389591810002,32.59495677299999],[128.82618248800006,32.598822333],[128.82545006600006,32.601629950000145],[128.83285566500004,32.60594310100005],[128.84115644599999,32.600246486000074]]],[[[129.75635826900012,32.65171946800014],[129.75342858200005,32.649115302000055],[129.75001061300006,32.655829169000114],[129.74406985800024,32.66095612200003],[129.7476505870002,32.66636790600016],[129.75684655000006,32.66282786700019],[129.75635826900012,32.65171946800014]]],[[[129.7853296230002,32.69192129100007],[129.78012129000004,32.6896019550001],[129.7736108730002,32.69733307500009],[129.7705998060002,32.69993724200019],[129.7701929050002,32.70197174700003],[129.76823978000007,32.70477936400009],[129.76490319100006,32.705755927000055],[129.76026451900012,32.71572500200013],[129.77263431100002,32.70945872599999],[129.78012129000004,32.70062897300012],[129.7853296230002,32.69192129100007]]],[[[128.60238691500015,32.72317129100013],[128.5978296230002,32.70945872599999],[128.589691602,32.72007884300014],[128.59498131600017,32.73224518400012],[128.6026310560002,32.74001699400013],[128.61028079500014,32.73191966400019],[128.600840691,32.72943756700006],[128.60238691500015,32.72317129100013]]],[[[129.00464928500017,32.76211172100001],[129.00619550900004,32.756415106000034],[129.00692793100015,32.753078518],[129.00001061300023,32.75108470300016],[128.98918704500014,32.75372955900015],[128.9859318370001,32.74876536700019],[128.98780358200005,32.74502187700007],[128.98633873800011,32.74249909100014],[128.98259524800008,32.74176666900003],[128.98096764400023,32.74424876500014],[128.97673587300014,32.745266018],[128.96973717500023,32.746771552000055],[128.96517988400004,32.74502187700007],[128.96615644600016,32.75433991100003],[128.97852623800011,32.759670315000065],[128.98316491000006,32.75958893400009],[128.98658287900005,32.76487864800008],[128.9850366550002,32.77732982],[128.98764082099999,32.78839752800003],[128.99154707099999,32.79173411700005],[128.9996037120002,32.78860097900018],[129.00302168100004,32.77883535400004],[129.00586998800006,32.76886627800015],[129.00464928500017,32.76211172100001]]],[[[128.84229576900023,32.75946686400012],[128.8497827480002,32.74274323100009],[128.84206871299997,32.70386139100016],[128.85522575700017,32.68886442000009],[128.87842693200005,32.67392482500004],[128.89371185700023,32.65761750500009],[128.90113366000006,32.64691803600006],[128.90113366000006,32.64598216400019],[128.89926191500015,32.642523505],[128.8809311370002,32.64235931100008],[128.857899157,32.64340912400009],[128.81771562400004,32.634589588],[128.81548846500007,32.646810135000024],[128.7932235040001,32.65249258000007],[128.78809655000006,32.64850495000009],[128.77963300900015,32.646795966000084],[128.77588951900012,32.642523505],[128.77222741000006,32.63190338700004],[128.77515709700018,32.62714264500015],[128.78012129000004,32.62482330900018],[128.79495874300002,32.6100934200001],[128.79222837900008,32.597941535000146],[128.790200827,32.586384515000034],[128.77311026499999,32.571665843000076],[128.75538170700023,32.580511786000145],[128.73604181900012,32.60349384100009],[128.7124129570001,32.60431549700003],[128.66285241000017,32.60154857000008],[128.6526310410001,32.59107501300018],[128.61854433500005,32.609536275],[128.6004388930002,32.61417790899999],[128.60381873200006,32.63059803500015],[128.61060631600006,32.642523505],[128.61353600400017,32.65021393400009],[128.61817467500012,32.65965403900013],[128.62427819100017,32.66730377800015],[128.63184655000023,32.66986725500006],[128.63306725400017,32.665472723000065],[128.63624108200023,32.643744208],[128.63868248800017,32.635158596000096],[128.63965905000023,32.641262111000074],[128.65267988400004,32.66791413000011],[128.65430748800023,32.677964585],[128.65455162900017,32.68886953300016],[128.65349368600002,32.69961172100007],[128.6506453790001,32.70929596600003],[128.6479598320001,32.71385325700008],[128.64503014400012,32.717962958000115],[128.64258873800023,32.722398179000024],[128.64226321700002,32.7280134140001],[128.6440535820001,32.73330312700007],[128.65040123800023,32.74453359600007],[128.64176757200008,32.76138397300012],[128.6509395940001,32.77541308200013],[128.66081790500002,32.78278229400003],[128.67904707100004,32.782904364],[128.68573849700024,32.77091567000015],[128.699652891,32.743771302000155],[128.70536494800004,32.747461232000106],[128.72184869000003,32.75428343600005],[128.74317467500006,32.75828685099999],[128.77922382800003,32.776625290000155],[128.78412547900004,32.78818120000007],[128.80849038900013,32.79990841200005],[128.81202233200023,32.782416083000115],[128.81080162900005,32.774888414000046],[128.81055748800006,32.766058661],[128.8276880550002,32.761902974000165],[128.84229576900023,32.75946686400012]]],[[[128.68165123800011,32.80886465100009],[128.67701256600017,32.80170319200015],[128.6739201180002,32.80438873900012],[128.67571048300007,32.8096784530001],[128.68165123800011,32.80886465100009]]],[[[128.90853925900004,32.801336981000034],[128.90723717500012,32.79401276200004],[128.8948673840001,32.78172435100008],[128.88233483200005,32.76528554900007],[128.87533613399998,32.76349518400009],[128.86646569100006,32.76496002800015],[128.84791100400005,32.774888414000046],[128.84009850400005,32.77757396000014],[128.83521569100017,32.78766510600009],[128.83594811300011,32.81899648600013],[128.8346460300002,32.82705312700007],[128.83725019600004,32.83380768400012],[128.84620201900023,32.83486562700007],[128.85694420700023,32.830023505],[128.86345462300002,32.81883372599999],[128.86622155000012,32.80735911700005],[128.86988366000006,32.801092841000084],[128.87387129000004,32.79873281500012],[128.87501061300006,32.80174388200014],[128.87419681100008,32.804348049000126],[128.87338300900015,32.807847398000135],[128.87077884200008,32.816066799000126],[128.86622155000012,32.82538483300006],[128.86296634200008,32.835272528000175],[128.86817467500023,32.837836005],[128.89226321700008,32.823716539000046],[128.89975019600016,32.81830475500003],[128.90284264400023,32.81415436400006],[128.90853925900004,32.801336981000034]]],[[[128.95541425900015,32.863104559000035],[128.95801842500023,32.841498114000146],[128.95443769599999,32.83071523600013],[128.94695071700014,32.82802969000015],[128.94459069100017,32.82339101800012],[128.94776451900023,32.819810289000074],[128.94939212300008,32.81338125200013],[128.94507897200006,32.804348049000126],[128.94044030000012,32.80442942900011],[128.93848717500006,32.812933661000145],[128.93197675899998,32.81712474200016],[128.92302493600008,32.81806061400006],[128.92058353000002,32.820746161000145],[128.924082879,32.82461172100015],[128.92400149800002,32.82965729400017],[128.920176629,32.83502838700004],[128.91570071700008,32.83885325700005],[128.90992272200018,32.84243398600002],[128.89576256600017,32.856431382],[128.88965905000006,32.85814036700019],[128.88314863399998,32.85594310099999],[128.88070722700016,32.86261627800015],[128.8908797540001,32.870917059000035],[128.90894616,32.86644114800008],[128.92432701900023,32.85150788000011],[128.92945397200018,32.84979889500012],[128.92676842500006,32.86220937700013],[128.92896569100017,32.864691473000065],[128.93767337300008,32.860785223000065],[128.94214928500006,32.86517975500006],[128.94336998800023,32.87628815300009],[128.946543816,32.880194403000175],[128.95118248800023,32.876450914000046],[128.95313561300011,32.87421295800006],[128.95541425900015,32.863104559000035]]],[[[129.60206139400012,32.88092682500012],[129.59278405000023,32.878322658000016],[129.59253991,32.88405996300018],[129.59929446700008,32.88857656500015],[129.60206139400012,32.88092682500012]]],[[[129.19182376400025,32.919094143000095],[129.18791751400025,32.916286526000036],[129.1841740240002,32.92076243700011],[129.19450931100002,32.92426178600009],[129.19182376400025,32.919094143000095]]],[[[128.95207767000014,32.9168968770001],[128.94857832100016,32.90444570500007],[128.93425540500007,32.91071198100012],[128.931407097,32.914862372000144],[128.93181399800014,32.92027415600002],[128.93506920700005,32.924180406000104],[128.94231204500002,32.92446523600013],[128.94670657599997,32.92084381700009],[128.95207767000014,32.9168968770001]]],[[[129.02947024800014,32.891750393],[129.0299585300002,32.88861725500014],[129.02816816500004,32.85565827000006],[129.02409915500007,32.848049221000124],[129.01791425899998,32.848049221000124],[129.01742597700004,32.856675523000135],[129.01368248800006,32.85879140800013],[129.00660241,32.864691473000065],[128.99683678500017,32.86664459800012],[128.98267662900005,32.86225006700012],[128.97754967500023,32.86399974200013],[128.9738061860002,32.869045315000065],[128.969493035,32.87148672100001],[128.96802819100006,32.8736839860001],[128.96412194100006,32.88955312700001],[128.96461022200006,32.89826080900009],[128.97299238399998,32.898504950000145],[128.99170983200017,32.88983795800006],[128.99561608200017,32.89052969000009],[128.99447675900004,32.89533112200017],[128.98878014400023,32.90021393400015],[128.98373457100004,32.90664297100007],[128.98226972700016,32.91242096600003],[128.97966556100008,32.91648997599999],[128.97934004000004,32.92023346600003],[128.98267662900005,32.923244533000016],[128.98471113399998,32.92609284100014],[128.984629754,32.929185289000046],[128.9924422540001,32.929429429],[129.00961347700004,32.92450592700011],[129.02068118600008,32.91669342700014],[129.02458743600008,32.908636786],[129.02784264400012,32.89980703300013],[129.02947024800014,32.891750393]]],[[[129.59815514400012,32.94065989799999],[129.60206139400012,32.93748607000013],[129.6017358730002,32.93834056200002],[129.60336347700004,32.93996816600004],[129.60596764400012,32.93838125200001],[129.60547936300011,32.93968333500011],[129.60547936300011,32.94122955900015],[129.60588626400013,32.94310130400011],[129.60808353000013,32.94257233300014],[129.6112573580002,32.943426825000145],[129.61540774800014,32.94122955900015],[129.62517337300008,32.93809642100008],[129.62517337300008,32.928452867000104],[129.6163029310002,32.916286526000036],[129.60051516999997,32.921616929],[129.59221438900008,32.94065989799999],[129.59400475400017,32.94558340100015],[129.59620201900017,32.94676341400016],[129.59848066500015,32.94798411700019],[129.59864342500012,32.94647858300014],[129.59815514400012,32.94065989799999]]],[[[129.18987063900008,33.01976146],[129.1958927740002,33.01504140800007],[129.18978925900004,33.00731028900016],[129.17839603000007,33.00731028900016],[129.1748966810001,33.00999583500014],[129.1773380870002,33.016058661000145],[129.1841740240002,33.015773830000015],[129.18710371200015,33.018011786],[129.18987063900008,33.01976146]]],[[[129.3536076180002,33.02191803600009],[129.35214277400016,33.00039297100007],[129.3418888680002,33.005072333000086],[129.33733157599997,33.009059963000155],[129.34408613400004,33.01906972900004],[129.3536076180002,33.02191803600009]]],[[[129.2461857430001,33.02285390800007],[129.24691816499998,33.01504140800007],[129.2552189460001,33.02081940300003],[129.2594507170002,33.01850006700009],[129.25684655000012,33.01548899900017],[129.2526147800002,33.00792064000002],[129.25570722700016,33.00320058800013],[129.25188235800024,32.99607982000008],[129.24586022200006,32.99229564000014],[129.2400822270001,32.989813544000114],[129.23633873800023,32.99201080900009],[129.23959394599999,32.99681224200019],[129.23796634200008,32.99730052299999],[129.23487389400006,32.99839915600005],[129.22421308700004,32.996975002000156],[129.2232365240001,33.00039297100007],[129.22803795700005,33.00731028900016],[129.23186282599997,33.012884833000086],[129.24146569100017,33.01976146],[129.2461857430001,33.02285390800007]]],[[[129.60751386800004,33.06386953300007],[129.62199954500002,33.061224677],[129.62891686300011,33.063015041000156],[129.63502037900017,33.06236399900003],[129.63298587300008,33.057806708000086],[129.62777754000015,33.05414459800012],[129.62785892000014,33.05162181200002],[129.62997480600004,33.048692124000084],[129.6289982430001,33.04474518400009],[129.62558027400004,33.03819407800002],[129.61052493600008,33.028469143000066],[129.60783938900025,33.0244408220001],[129.5879826180001,33.02570221600011],[129.58920332099999,33.02195872600008],[129.5865991550002,33.01569245000003],[129.58139082099999,33.011175848000065],[129.56869550900004,33.00551992400007],[129.56495201900012,33.00108470300002],[129.5594181650001,32.99730052299999],[129.5481876960001,32.99823639500006],[129.54086347700016,33.002386786],[129.53907311300011,33.005682684000035],[129.53581790500007,33.00816478100016],[129.539805535,33.009304104000094],[129.5558374360002,33.00775788000006],[129.55827884200002,33.01109446800008],[129.566172722,33.0149193380001],[129.56674238399998,33.01788971600003],[129.5635685560002,33.019232489],[129.56031334700018,33.02252838700004],[129.5593367850001,33.02688222900004],[129.56120853000007,33.02989329600014],[129.5675561860002,33.03009674700009],[129.57634524800008,33.028143622000144],[129.5826115240002,33.03017812700007],[129.59669030000023,33.05190664300015],[129.60401451900023,33.057481187000135],[129.60523522200018,33.060980536000145],[129.60751386800004,33.06386953300007]]],[[[129.6808374360002,33.14150625200001],[129.67994225400017,33.13491445500013],[129.67367597700004,33.13678620000009],[129.6721297540001,33.13894277600009],[129.6724552740002,33.14305247600005],[129.6808374360002,33.14150625200001]]],[[[129.54810631600012,33.147080796000026],[129.54810631600012,33.13491445500013],[129.53988691499998,33.13617584800015],[129.53020267000014,33.13060130400014],[129.52149498800023,33.13585032800002],[129.51254316500004,33.13678620000009],[129.50326582100016,33.14008209800012],[129.50530032600003,33.14248281500009],[129.5136011080002,33.14297109600007],[129.51840254000015,33.14427317900008],[129.5260522800002,33.146144924000126],[129.5298771490002,33.14992910400015],[129.53663170700023,33.150539455000015],[129.54232832100004,33.15241120000009],[129.54810631600012,33.147080796000026]]],[[[129.09927084900008,33.03568710900008],[129.09725354000014,33.01810575300014],[129.09799238400015,32.98826732000008],[129.10971113400015,32.98289622600011],[129.16962821600018,33.00581653600001],[129.18280727800018,32.98468553900001],[129.17595462300014,32.966986395],[129.1563250530002,32.958490107],[129.13721764400006,32.938177802000055],[129.1175434940001,32.93584108099999],[129.10035241,32.919012762000094],[129.09253686500003,32.906607937],[129.0905507800002,32.89147978700002],[129.09848066500015,32.87514883000016],[129.09799238400015,32.86847565300009],[129.09657225200024,32.85694237600008],[129.0861922540001,32.85724518400009],[129.06791971900006,32.861182834000104],[129.06149503700024,32.84838424200005],[129.06869550900015,32.839178778000175],[129.06853274800008,32.82591380400005],[129.06495201900012,32.81781647300012],[129.0457228280001,32.82209273200009],[129.04712975400005,32.841457424000154],[129.04041432000022,32.86272819599999],[129.0414753840001,32.89599958800015],[129.04781951700008,32.909964614],[129.033050977,32.933335679],[129.02426191500004,32.937892971000124],[128.98878014400023,32.94415924700017],[128.97942307000008,32.94760914500016],[128.98146031200022,32.960351967000136],[128.9980757020002,32.96653417900016],[129.0204204190001,32.980624687],[129.03503841200015,32.96740447400005],[129.05445397200006,32.979315497000144],[129.04258414900008,33.00015967200012],[129.04862219400016,33.03960279600015],[129.0652106050002,33.043953982000104],[129.06764512499998,33.01911582900014],[129.07773711800021,33.02039796300009],[129.08399498800011,33.02338288000014],[129.08432050900004,33.043198960000055],[129.08099664400018,33.056781847000096],[129.0858752780001,33.07620750500014],[129.10172462800003,33.0829730060001],[129.10661909900003,33.10118815400007],[129.09854704900013,33.114491157000046],[129.09626241000004,33.12537451900012],[129.10818029800024,33.16668808900009],[129.1176668650002,33.158859227000065],[129.11638737100012,33.140655876],[129.11212829800004,33.131534918000014],[129.10859376800025,33.122417884000086],[129.11590807200005,33.1139754040001],[129.1239111050002,33.10917292300003],[129.11831008100003,33.08853075900005],[129.11196658400016,33.070308784000034],[129.10271233400024,33.05449343500011],[129.09927084900008,33.03568710900008]]],[[[128.90316816500015,33.16608307500003],[128.8985294930002,33.165798244000186],[128.89698326900006,33.170599677000084],[128.89942467500012,33.173529364],[128.90316816500015,33.16608307500003]]],[[[129.59278405000023,33.19285716400013],[129.5931095710001,33.183539130000085],[129.59026126400013,33.18581777600015],[129.58806399800008,33.18463776200004],[129.59221438900008,33.17796458500008],[129.59221438900008,33.16933828300007],[129.5822046230002,33.16111888200008],[129.58098392000002,33.16543203300007],[129.58806399800008,33.170721747000144],[129.5861108730002,33.174465236000074],[129.57894941500015,33.17979564000014],[129.57691491000006,33.18402741100006],[129.58122806100002,33.191758531000076],[129.58570397200018,33.1947289080001],[129.59278405000023,33.19285716400013]]],[[[129.13868248800023,33.18724192900011],[129.1329044930001,33.157985744000186],[129.1229761080002,33.16172923400005],[129.12240644600004,33.16795482],[129.12240644600004,33.17165761900013],[129.11931399800002,33.17479075700011],[129.11801191500004,33.19830963700015],[129.1197208990002,33.21275462400003],[129.13046308700004,33.20563385600015],[129.13664798300013,33.196437893],[129.1389266290001,33.1933861350001],[129.14348392000014,33.18976471600014],[129.13868248800023,33.18724192900011]]],[[[129.0264591810002,33.20689524900017],[129.02214603000013,33.19904205900009],[129.01425214900016,33.19973379100004],[129.01457766999997,33.21153392100011],[129.02247155000023,33.213405666000156],[129.0264591810002,33.20689524900017]]],[[[129.06194095100003,33.2102318380001],[129.06731204499997,33.20982493700011],[129.08448326900012,33.214056708000115],[129.09571373800011,33.211981512000094],[129.0939233730002,33.20844147300012],[129.08806399800008,33.20791250200013],[129.08383222700004,33.20563385600015],[129.08236738399998,33.201931057000124],[129.08562259200002,33.19721100500011],[129.09074954500014,33.1947289080001],[129.09262129000004,33.19216543200018],[129.09115644600016,33.18850332200013],[129.07732181100008,33.18768952000012],[129.0612085300002,33.19033437700001],[129.05713951900012,33.18602122600011],[129.05119876400008,33.182766018000066],[129.0460718110002,33.18581777600015],[129.04363040500007,33.19245026200012],[129.04070071700014,33.19407786700005],[129.032969597,33.19489166900014],[129.029063347,33.19961172100007],[129.03215579500002,33.20538971600003],[129.036387566,33.20937734600001],[129.04102623800023,33.20966217700014],[129.0455835300002,33.21775950700005],[129.0490014980002,33.219387111000074],[129.06194095100003,33.2102318380001]]],[[[129.14958743600002,33.26902903900019],[129.13428795700005,33.258612372000115],[129.12728925899998,33.24750397300009],[129.11915123800006,33.246527411],[129.10320071700008,33.249172268000095],[129.09213300900004,33.25543854400014],[129.085785352,33.26007721600017],[129.0797632170002,33.261297919000086],[129.0750431650001,33.259914455000015],[129.07618248800011,33.26878489800005],[129.089121941,33.28327057500009],[129.10377037900005,33.28896719000009],[129.11312910200016,33.29140859600004],[129.12826582100016,33.301581122000144],[129.13550866000017,33.29987213700015],[129.14332116000017,33.284816799000126],[129.15015709700018,33.276516018000066],[129.14958743600002,33.26902903900019]]],[[[129.6768734760001,33.36241888800005],[129.7010078850001,33.35300693100005],[129.7441637460001,33.36431425700012],[129.8074650400001,33.34813060099999],[129.81454436463432,33.331246004800775],[129.8101957540309,33.32509796769709],[129.79479617700204,33.31724315045112],[129.7641003766311,33.288226834001264],[129.75820926324687,33.27910594308479],[129.7594494975963,33.268202216359256],[129.7666841981173,33.25610993122835],[129.7981034689,33.216396592728486],[129.80321943592824,33.20629384988122],[129.80647505098275,33.196682034348484],[129.8150016617973,33.18595917387684],[129.82921268132023,33.17508128557286],[129.86218224481482,33.159862575697346],[129.90517703679083,33.14986318653693],[129.91933637857093,33.14428213151517],[129.93013675340845,33.132086492697496],[129.93587283716184,33.11846975417576],[129.93540775006775,33.10741099691997],[129.93091189976442,33.09896190047128],[129.915408969948,33.086740424131264],[129.9171142931901,33.078317166104355],[129.92517581601103,33.06878286403803],[129.99716108601527,33.01718394598241],[130.01576460215475,32.99976898914748],[130.03219770705854,32.98754751190809],[130.0595345395873,32.97323314139642],[130.10340783070686,32.959952296960935],[130.20410127959255,32.94357262887702],[130.20378665500007,32.928900458000115],[130.1885362940001,32.915321158],[130.163596061,32.90929081300011],[130.14913025100012,32.896413044000084],[130.13463981600003,32.889044178000105],[130.1154077480002,32.88027578300016],[130.10531660200016,32.87592194200006],[130.12231510100017,32.868816108000104],[130.13252880200017,32.85593935700014],[130.15363495200003,32.842457332],[130.17828428900012,32.8424949530001],[130.19500237200023,32.84494011200009],[130.24358790200003,32.87528409700015],[130.30728451900004,32.8762989750001],[130.33941978699997,32.85657931100015],[130.35124759200002,32.833929755],[130.37224368600008,32.79340241100006],[130.37484785200016,32.78017812700013],[130.37578209400007,32.74788443800004],[130.3737062170002,32.73896888899999],[130.35499108200005,32.717230536],[130.3509363310002,32.70406338500008],[130.36082701600006,32.687963369000144],[130.34170370900003,32.667257674000055],[130.30557751,32.65143396800006],[130.268230677,32.65036133400004],[130.25904566300002,32.64386571100012],[130.25993899800008,32.63271719000015],[130.25391686300023,32.62482330900018],[130.2365080210001,32.622476706000086],[130.23154564,32.61001434800012],[130.22307901800016,32.60588090300014],[130.1984120440001,32.60297819100005],[130.18148028400006,32.59232724600004],[130.16598697300006,32.592955657000076],[130.1730538790001,32.60363378100011],[130.16956158300005,32.61909223],[130.15548756000024,32.625654336000096],[130.14704924400016,32.63399204700012],[130.12945734900015,32.64113420200006],[130.128792608,32.66131741900007],[130.12813256,32.68387054600008],[130.14222326700005,32.68206490400014],[130.15350770000012,32.68619748900012],[130.16692510400006,32.69803794700006],[130.1774802260002,32.70517956500005],[130.19013168300003,32.71410604900002],[130.20132314600008,32.724250206000036],[130.2103138240001,32.7332498410001],[130.20758542900015,32.75216234500006],[130.19583342700017,32.75739113400006],[130.18681992200018,32.76206462600011],[130.18287194100012,32.7690290390001],[130.18604576900017,32.77435944200009],[130.19023316200006,32.783481734000176],[130.17842736700007,32.79292178700008],[130.14809900800006,32.795353716000065],[130.13821426500013,32.78884735300012],[130.12622206300014,32.78887009200007],[130.09378935499998,32.79486030900007],[130.06416680700013,32.78481126800013],[130.05004571000003,32.77236437400002],[130.03241165700004,32.75934986500012],[130.00844579100013,32.75462632199999],[129.99080803500013,32.74691678000009],[129.97037983800007,32.74456321900014],[129.96267180600015,32.752894191000124],[129.96201159100022,32.76180925300004],[129.95850841299998,32.76478227299999],[129.94932582400023,32.7576612160001],[129.9548908950001,32.745171077000165],[129.9421362830001,32.728521850000064],[129.91676459900023,32.69827854900008],[129.9034436420001,32.681137185000054],[129.89492938400022,32.662689399],[129.87445290399998,32.64898869200006],[129.85544474200006,32.64008608000002],[129.84127669600016,32.63941524900004],[129.8377245930001,32.63166779],[129.8322856010001,32.61580479700014],[129.80854332200013,32.59755228000007],[129.78582955400006,32.58310535600005],[129.78290880300008,32.573503108000025],[129.77656135300018,32.57645720100011],[129.763146868,32.579976042000126],[129.74961151099998,32.57269832500005],[129.74035124000014,32.568442387000076],[129.73400490800012,32.580920387],[129.7495901690002,32.59171044200018],[129.76168735000024,32.59598029900006],[129.77519728400003,32.60085152000012],[129.78297457600004,32.60741488500015],[129.79416252400003,32.632314333000025],[129.8046153490001,32.647683737000094],[129.81449596100006,32.662551104],[129.8180835100001,32.67743817500006],[129.8138718150001,32.68337935000001],[129.80324928400015,32.67799558400016],[129.79688259100024,32.684506210000094],[129.79692255500007,32.692244529000064],[129.8089597970002,32.694068048000034],[129.8153195470001,32.701797723000126],[129.82595416600006,32.70480813600015],[129.834378031,32.69412163700004],[129.84569353600014,32.70127403300013],[129.85906009200002,32.724514065],[129.82379517000007,32.72198462400017],[129.82398522200006,32.73607005400014],[129.80372155000023,32.772284247000144],[129.79330488400015,32.78017812700013],[129.78467858200023,32.78489817900014],[129.77865644600016,32.79100169500013],[129.77637780000018,32.803290106000176],[129.7710067070001,32.8139509140001],[129.75450898700004,32.818482657000075],[129.7443432810002,32.80988554],[129.73271004500012,32.805570175000085],[129.7210349420001,32.82707413800013],[129.69809003999998,32.839544989],[129.68702233200023,32.85480377800015],[129.67839603000007,32.87042877800006],[129.67465254000004,32.88051992400001],[129.6733504570001,32.89240143400015],[129.66968834700006,32.904974677000055],[129.6613061860002,32.914740302],[129.6518660820001,32.92279694200012],[129.63843013700014,32.926546363000014],[129.63112936300004,32.95653358600005],[129.63240266500023,32.979106667000096],[129.6462691950002,32.98956329800011],[129.65351883600025,33.004253288000186],[129.64972081700014,33.017049060000105],[129.65186151400005,33.03355786700003],[129.66065830000005,33.039696591000094],[129.6634167340002,33.069023976000054],[129.68161222900008,33.094092267000136],[129.72019752700024,33.07896768700009],[129.73471113400004,33.06024811400012],[129.73536217500023,33.05784739800008],[129.73422285200004,33.049058335000026],[129.73471113400004,33.04661692900008],[129.73796634200008,33.04612864799999],[129.7443368410002,33.05152376200009],[129.75015446500018,33.057039056000164],[129.7552662950001,33.055216089000126],[129.75966533900007,33.0478894380001],[129.75312015100016,33.041761967000085],[129.73863191000024,33.01911825200007],[129.73578382200006,33.00384361900002],[129.7416637690001,32.991035481000054],[129.75183863700025,32.995939633000106],[129.76632809800017,33.017953982],[129.79695900000016,33.010061728],[129.81230757300003,32.99480358000007],[129.82327699500016,32.97953752800014],[129.81600930400023,32.97096745100008],[129.8138449190001,32.96179569800013],[129.81608896700007,32.937947697000126],[129.8146693040002,32.92265535000003],[129.80667695500009,32.91469654700002],[129.80082747500015,32.92386666000009],[129.79567396600024,32.94779418000009],[129.7869448060001,32.94780487100009],[129.78993525000024,32.91224538900015],[129.80379470800008,32.902460108000085],[129.8074772800002,32.88594190900001],[129.79439983400007,32.87492070200001],[129.81481435200013,32.86331302600014],[129.82283367199997,32.85843758800017],[129.83158612900004,32.85050825100011],[129.84178867900008,32.844410601000064],[129.84543955299998,32.838308484000024],[129.8505281490002,32.84137051100005],[129.85488454600014,32.847485752000026],[129.86870212600016,32.85301349600017],[129.8745141320002,32.86096322200014],[129.88320558400008,32.87569270700011],[129.93560964700006,32.860488941000156],[129.98787790900005,32.84171406100016],[130.00314754200022,32.84537871600004],[129.98569111600014,32.86308717000013],[129.93122442100017,32.92889427000013],[129.92972526500003,32.957641312000035],[129.93918371700013,32.97232342400018],[129.94760175900015,32.995062567],[129.94562264200025,33.01575771400012],[129.91208162100006,33.03650814800007],[129.88144366600014,33.062762999000185],[129.85301131300005,33.05416733900013],[129.8340697390001,33.04313491700019],[129.82385938500013,33.043118812],[129.82235552400002,33.06267999000006],[129.79751505900006,33.07730904400016],[129.78658933900024,33.07056414200004],[129.77495184000023,33.058313960000035],[129.76109609900007,33.05706266500006],[129.74647953500002,33.06559011900008],[129.74244225400005,33.07636139500009],[129.73322558500004,33.10163252100007],[129.73906641500005,33.101034589000065],[129.74919681100008,33.09813060100005],[129.74558543700002,33.1163347600001],[129.74628823800012,33.12489568800011],[129.76014485700014,33.12981531600012],[129.75867661200007,33.13894149100018],[129.74773003700003,33.13952432900008],[129.72852623800023,33.12230052300005],[129.7236446410001,33.13277525000014],[129.7214375570001,33.14557295600015],[129.72285634600004,33.15840396900016],[129.709764185,33.16257034400009],[129.71216881600006,33.141058661000116],[129.70801842500006,33.119208075000174],[129.70411217500012,33.11180247599999],[129.696862257,33.114265208000106],[129.68074700600008,33.11487864500005],[129.67348960600006,33.10386878300001],[129.66651451900012,33.10126373900012],[129.66233194300017,33.126511172],[129.68360436300023,33.13104889500012],[129.68702233200023,33.142238674000126],[129.6832788420002,33.152329820000105],[129.67432701900006,33.160223700000174],[129.66325931100008,33.16600169500005],[129.65284264400023,33.17015208500008],[129.656097852,33.17894114800005],[129.656097852,33.184881903000175],[129.65267988399998,33.19025299700003],[129.64551842500023,33.19745514500006],[129.63803144599999,33.19277578300013],[129.6281030610002,33.19179922100007],[129.61744225400005,33.19464752800012],[129.60010826900017,33.20831940300015],[129.59009850400017,33.21112702],[129.5641382170002,33.21112702],[129.55214434600018,33.22583873400011],[129.56334175499998,33.25549040800017],[129.56534239400017,33.27206736000012],[129.5738202470002,33.27683511400009],[129.58091237300002,33.2750844130001],[129.5914984900002,33.2834101590001],[129.58934295200018,33.28991462600014],[129.584325775,33.301145664],[129.57146659700018,33.320639601000025],[129.57628043000014,33.34789650300009],[129.5804127600001,33.37100726900003],[129.5924152790001,33.38111521000015],[129.6206160820001,33.35927969],[129.64437910200004,33.362372137000094],[129.6731846810001,33.39853911700011],[129.67960253200013,33.38967253400013],[129.6768734760001,33.36241888800005]]],[[[129.55568420000023,33.41080491100017],[129.5621633010002,33.366393867000156],[129.55587394100021,33.35314538100006],[129.54202815300008,33.335676701000025],[129.52752846200022,33.32347747300015],[129.53831700300023,33.31559461200011],[129.52634014200012,33.30338426900015],[129.51434189400018,33.29804494000014],[129.514386228,33.28801229300002],[129.50114810099998,33.28003244000014],[129.50247802800018,33.26525992000008],[129.4930951260001,33.245163286000135],[129.44660473600018,33.198519605000044],[129.41259095300003,33.17831786000009],[129.3760213100002,33.16971922700007],[129.35808353000007,33.17694733300003],[129.34250066400003,33.1796201800001],[129.3449601670002,33.19019663600007],[129.34986902400013,33.21346751500012],[129.36070093200013,33.19871806800002],[129.38478198600004,33.183493173],[129.40015709700006,33.18569570500007],[129.40650475400017,33.194037177000055],[129.40308678500017,33.19765859600001],[129.3960067070001,33.202582098000065],[129.38466500200005,33.20409987500007],[129.37765688400006,33.21463952800012],[129.38200542000018,33.22891994300012],[129.39396140600016,33.239525906000054],[129.41676916100008,33.2369296050001],[129.4084318000001,33.253823673000014],[129.40641102400005,33.27495079100005],[129.43726510800005,33.29667988000007],[129.44089618799998,33.32526007500003],[129.44266269100015,33.348066089000085],[129.49512950000022,33.35829457300004],[129.50830966200024,33.38209177600011],[129.51591417800014,33.37839513000016],[129.52291622400006,33.36837711800011],[129.53930970000013,33.37948754900013],[129.5234559190002,33.39056654500011],[129.52532080700004,33.40492725000003],[129.55568420000023,33.41080491100017]]],[[[129.68181399800008,33.42523834800015],[129.68555748800011,33.407782294000086],[129.6808374360002,33.41364166900003],[129.68311608200023,33.41775136900016],[129.68254642000002,33.41856517100008],[129.68091881600017,33.422267971000124],[129.68181399800008,33.42523834800015]]],[[[129.43360436300011,33.356675523000106],[129.42416425899998,33.352321682000124],[129.40967858200023,33.35264720300013],[129.40617923300024,33.36436595300013],[129.4112248060001,33.396266994000044],[129.4198511080002,33.411932684000035],[129.42139733200023,33.41758860900002],[129.42180423300013,33.42654043200004],[129.42457116000017,33.435899156000076],[129.43116295700017,33.44065989799999],[129.43417402400004,33.43903229400014],[129.43523196700014,33.43431224200005],[129.43108157599997,33.424953518],[129.4318953790001,33.41950104400017],[129.4314884770001,33.41388580900018],[129.43132571700014,33.40928782800013],[129.43376712300008,33.40468984600001],[129.43474368600002,33.39634837400003],[129.4322208990002,33.38601308800013],[129.43360436300011,33.356675523000106]]],[[[129.54013105600004,33.44643789300012],[129.54493248800023,33.44220612200003],[129.53752688900025,33.44228750200001],[129.53565514400006,33.439764716000084],[129.53500410200004,33.43724192900008],[129.53191165500007,33.436102606000034],[129.528575066,33.43569570500013],[129.5255639980002,33.436712958],[129.52149498800023,33.433986721000124],[129.51286868600008,33.4302025410001],[129.51221764400012,33.42523834800015],[129.50603274800002,33.42523834800015],[129.5070093110002,33.438015041000185],[129.517832879,33.44082265800013],[129.52458743600002,33.449204820000105],[129.52637780000012,33.453558661],[129.53142337300008,33.45278554900007],[129.5330509770001,33.449204820000105],[129.54013105600004,33.44643789300012]]],[[[129.72689863400004,33.45909251500002],[129.72722415500007,33.45014069200009],[129.7154240240001,33.46385325700011],[129.7256779310002,33.46080149900003],[129.72689863400004,33.4604352890001],[129.72689863400004,33.45909251500002]]],[[[129.78980553500017,33.43227773600002],[129.78899173300024,33.42861562700007],[129.78012129000004,33.42727285400018],[129.76897220099997,33.429917710000055],[129.76408938900013,33.42877838700004],[129.7598576180001,33.42409902600012],[129.75814863399998,33.418361721000124],[129.75562584700018,33.416530666000156],[129.75171959700018,33.415961005],[129.7476505870002,33.41144440300003],[129.73829186300006,33.40700918200015],[129.72673587300008,33.40997955900018],[129.7207951180002,33.417466539000046],[129.72510826900023,33.42344798400016],[129.73568769599999,33.4310570330001],[129.74154707100004,33.43903229400014],[129.75188235800013,33.453192450000174],[129.75261478000007,33.45579661700016],[129.74691816499998,33.46458567900014],[129.74878991000006,33.469102281000104],[129.75285892000002,33.47101471600014],[129.76872806100002,33.46295807500012],[129.77165774800008,33.45949941600013],[129.7735294930002,33.45595937700013],[129.7735294930002,33.45384349200013],[129.7710067070001,33.45091380400011],[129.76954186300023,33.44737376500002],[129.77027428500017,33.44432200700014],[129.78158613400015,33.43740469000012],[129.78980553500017,33.43227773600002]]],[[[129.55486087300002,33.49982330900018],[129.55591881600017,33.493963934000035],[129.57341556100002,33.49607982000005],[129.57642662900005,33.48834870000006],[129.5680444670002,33.478501695000105],[129.55445397200006,33.47345612200009],[129.53939863400004,33.47516510600009],[129.5268660820001,33.48045482000008],[129.51905358200023,33.4781761740001],[129.51644941500004,33.47353750200007],[129.51197350400017,33.47296784100011],[129.50318444100017,33.47370026200004],[129.50668378999998,33.483099677000055],[129.524668816,33.4975446640001],[129.54175866000017,33.507310289000046],[129.55176842500023,33.506903387000065],[129.55486087300002,33.49982330900018]]],[[[129.64071699300004,33.73725006700015],[129.64144941499998,33.73371002800015],[129.63388105600004,33.734645901000036],[129.62891686300011,33.73232656500009],[129.6268009770001,33.74241771000014],[129.63705488400004,33.74673086100013],[129.64039147200006,33.744045315000065],[129.64372806100008,33.741725979000094],[129.64071699300004,33.73725006700015]]],[[[129.76220277400014,33.82313843700017],[129.7628717910001,33.81234364600006],[129.76678701100005,33.80209537200015],[129.781095119,33.79239255600008],[129.79688561300023,33.78644440300015],[129.79127037900005,33.78497955900009],[129.7819116550002,33.78115469000009],[129.77637780000018,33.77968984600004],[129.77637780000018,33.77342357000008],[129.79957116,33.76483795800006],[129.79965253999998,33.751044012000065],[129.78386478000002,33.73818594000012],[129.76037880300024,33.73730452000002],[129.7350640350002,33.73673856400008],[129.72276735300008,33.71674819700006],[129.7210392590001,33.69773997599999],[129.71045983200023,33.70083242400007],[129.69095668100024,33.71561246200004],[129.67729361500002,33.72909541000017],[129.6811607020002,33.74421752800011],[129.6707632470001,33.750139093000044],[129.65712690899997,33.74255478300002],[129.649304171,33.756039813000044],[129.646658083,33.77277290600016],[129.6769311860002,33.76072825700011],[129.68702233200023,33.75918203300016],[129.68702233200023,33.766017971000096],[129.66028335100012,33.78359193100012],[129.65826924799998,33.80357374700016],[129.65693388100007,33.81545368899999],[129.67840180699997,33.81493097400009],[129.67314449900002,33.83221792800002],[129.67895207600023,33.84898507700008],[129.6867199220001,33.859795866000084],[129.68864750300023,33.871145815000105],[129.7006942070001,33.86155833500008],[129.76726321700008,33.844549872000115],[129.76804010200024,33.83665025900011],[129.76220277400014,33.82313843700017]]],[[[129.39096113400015,34.29930247600008],[129.38860110800013,34.29132721600011],[129.360118035,34.27000560100005],[129.35670006600017,34.27281321800011],[129.35263105600015,34.289862372000144],[129.3536076180002,34.29368724200016],[129.35726972700016,34.298000393000066],[129.3648380870002,34.30023834800015],[129.37256920700023,34.29909902600012],[129.37631269600016,34.30101146000008],[129.3831486340001,34.30353424700009],[129.39096113400015,34.29930247600008]]],[[[129.224052602,34.29344308800002],[129.2306722920001,34.29336287400007],[129.23871754000007,34.299287051000036],[129.2482202480002,34.30044179900001],[129.26204317900013,34.30776139300018],[129.2752883100001,34.307596814000064],[129.2707872390001,34.31532030700005],[129.26892495000018,34.32246424500006],[129.2801969870001,34.32287172800004],[129.28938532900023,34.31782388700016],[129.30246202400022,34.30778735000008],[129.30143578800013,34.28809728200012],[129.31252838900016,34.279756376000094],[129.3167839,34.294468719000164],[129.342583158,34.293051839000086],[129.34710276200022,34.28697774700014],[129.34296047100023,34.278277529000135],[129.3256099060002,34.27138467800002],[129.31807550400006,34.258349633000094],[129.32105260400024,34.240796492000115],[129.3248032170001,34.2292526240001],[129.30938369900005,34.21905214800016],[129.2974639830002,34.21865848400007],[129.29802122700002,34.21317660300009],[129.30257932300006,34.20928496000006],[129.2997137360002,34.19782318000004],[129.29809006700023,34.18196436600006],[129.29721196100004,34.170476062000134],[129.29449413700016,34.16667814600014],[129.28784828500014,34.16512018200011],[129.28373507900008,34.15750473300007],[129.28351905200023,34.14600476600005],[129.2765874400002,34.129111206000104],[129.2645831670002,34.123786830000185],[129.26242352800014,34.114496337000034],[129.25109020100015,34.10757029000011],[129.24829683900023,34.09992685800016],[129.2358575110002,34.10076336000019],[129.23180011400015,34.094814056000146],[129.22042147100015,34.088877923000084],[129.21606240500014,34.09833929200006],[129.2107307100001,34.09996089100004],[129.19830716400023,34.110991656000024],[129.19030802600005,34.1148107420001],[129.1776290280002,34.10892999900007],[129.17163425900006,34.10680681200007],[129.17035364400024,34.1468156830001],[129.17880296200005,34.16976520200002],[129.175880289,34.19550913500014],[129.1804997080002,34.22721701300016],[129.18925958300005,34.234227385000125],[129.18882185600003,34.249552909000116],[129.195885,34.27299251300009],[129.1985345410002,34.316228084000116],[129.20736082700014,34.32927727400015],[129.2252449850001,34.32740336900015],[129.2284614390002,34.32078103500005],[129.22435607200006,34.31261085300004],[129.224052602,34.29344308800002]]],[[[129.4645605850001,34.70080530600002],[129.47066369700022,34.69268493700004],[129.4807235040001,34.683986721000124],[129.48775113000025,34.67639689],[129.48327784600022,34.66269661200003],[129.4775793690001,34.657035871000076],[129.4691199590002,34.652558845],[129.47814236700006,34.65072063800007],[129.48780182800007,34.64600565000002],[129.48827771500012,34.63567767100001],[129.48091280400004,34.61990957500008],[129.472422722,34.616766669000086],[129.46192467500023,34.621893622000115],[129.4526473320001,34.61945221600017],[129.46290123800011,34.60911692900008],[129.47820071700008,34.59711334800015],[129.47537364000013,34.58845104699999],[129.47310177600016,34.57933246000012],[129.46424106500004,34.55427396300014],[129.44608318900006,34.51477564],[129.402326374,34.48164673200007],[129.37947278100015,34.45262297300009],[129.3842879570001,34.424017645],[129.36183086700024,34.40548574800012],[129.35946395400018,34.390621507],[129.37550622400013,34.394416032],[129.39318101000006,34.41080021800009],[129.39442173700016,34.40333191200007],[129.388597794,34.38965888300014],[129.3843115320001,34.383416319],[129.38814520100007,34.366755092000076],[129.39958743600008,34.35504791900017],[129.40796864500024,34.35157990099999],[129.40075593500003,34.33792425400016],[129.38605282200004,34.331258264],[129.3791610040001,34.324652411],[129.36824161399997,34.30743171200008],[129.34383322200003,34.300314315000136],[129.32451188300004,34.304593338000146],[129.30546399500005,34.32487545400009],[129.3209047600001,34.333849042000125],[129.34506369500016,34.32724397800003],[129.34700270800013,34.35585198900016],[129.33459571400013,34.36059135700016],[129.31620389800017,34.342496496000095],[129.30510374700012,34.34320609200002],[129.30405895900017,34.362122712000044],[129.30493826400019,34.372424179000106],[129.30932224300003,34.38440191000011],[129.29738425500003,34.37710499100014],[129.28744395200025,34.36576828200005],[129.29339848800007,34.34907806600013],[129.28635873699997,34.34400826400004],[129.27199211700022,34.356219282],[129.24829130400022,34.35192546000009],[129.2289130230001,34.355601426000035],[129.2353838000001,34.368132348000174],[129.25972666300012,34.369552777000095],[129.27234911399998,34.37569660700014],[129.27375144500004,34.41293237800012],[129.2685686250002,34.43305128800016],[129.27708909300023,34.441527051000136],[129.28686405500017,34.443112446000114],[129.2916898660002,34.44075623400012],[129.29738949600008,34.44754637200016],[129.31086745200005,34.46051106800003],[129.30889545800002,34.46684104200004],[129.2933275930001,34.45332664000016],[129.28073429900022,34.45064666500009],[129.27604412399998,34.4621884940001],[129.28902402900005,34.48723729400008],[129.30493076700012,34.52028727200003],[129.32611919000024,34.53543877000003],[129.32554584200014,34.542326534000054],[129.308456188,34.56038743000006],[129.2909447430001,34.55607171200002],[129.2891069140002,34.56986674800011],[129.30335920299999,34.58687697000015],[129.30784427,34.6034634950001],[129.32330009600005,34.64807215700013],[129.33656962500018,34.64841143800014],[129.36096825500013,34.64800679100013],[129.3783374340001,34.64485176400005],[129.39037028500005,34.65447130000017],[129.40966199400006,34.675172826000065],[129.42574516500017,34.677801186000025],[129.418228469,34.685392005000054],[129.423304881,34.695070890000025],[129.43861542400012,34.69371319700004],[129.45061995200004,34.70100212400014],[129.4645605850001,34.70080530600002]]]]}},{"type":"Feature","properties":{"iso_3166_2":"JP-46","name":"Kagoshima","name_alt":null,"name_local":"鹿児島県","type":"Ken","type_en":"Prefecture","region":"Kyushu","postal":null,"region_code":"JPN-KYS"},"geometry":{"type":"MultiPolygon","coordinates":[[[[129.2179468110002,29.135362046000026],[129.21957441500004,29.126654364000146],[129.21029707100016,29.134385484000134],[129.20150800900004,29.138495184000092],[129.1928817070001,29.14691803600006],[129.19564863400015,29.15879954600011],[129.20354251400013,29.15806712400017],[129.220469597,29.1571312520001],[129.21924889400012,29.14907461100016],[129.2173771490002,29.14529043200004],[129.21892337300008,29.141587632],[129.2179468110002,29.135362046000026]]],[[[129.61231530000023,29.44334544500005],[129.59961998800006,29.44334544500005],[129.59156334700006,29.4501000020001],[129.5874129570001,29.458238023000106],[129.5913192070001,29.467962958000058],[129.59815514400012,29.472357489000146],[129.60108483200023,29.471340236000074],[129.60352623800006,29.469549872000087],[129.60808353000013,29.46922435100008],[129.61068769600004,29.465562242000104],[129.61540774800014,29.455226955000015],[129.61231530000023,29.44334544500005]]],[[[129.7438257170002,29.622300523000135],[129.7210392590001,29.606146552000084],[129.71290123800017,29.62929922100004],[129.71143639400012,29.642523505000057],[129.71485436300011,29.654527085000083],[129.74594160200004,29.66103750200007],[129.753754102,29.6454125020001],[129.7438257170002,29.622300523000135]]],[[[129.85098067800018,29.886729695000056],[129.87533613400015,29.8783226580001],[129.8795679050002,29.87913646],[129.88404381600006,29.87889232000005],[129.88868248800006,29.877508856000176],[129.89356530000023,29.87474192900011],[129.8974185120002,29.846915495000175],[129.92725670700023,29.825873114000117],[129.92212975400005,29.823146877000156],[129.92042076900023,29.819647528000147],[129.8634018920002,29.82460653000014],[129.85234765200013,29.839234318000123],[129.84018475400015,29.849729430000124],[129.83277226500005,29.873077651000173],[129.85098067800018,29.886729695000056]]],[[[129.551524285,29.893622137000065],[129.53988691499998,29.889878648000106],[129.5330509770001,29.89350006700009],[129.52767988400004,29.902329820000134],[129.528575066,29.908921617000104],[129.53541100400005,29.909857489],[129.54330488400004,29.908148505],[129.55014082100004,29.90387604400017],[129.55445397200006,29.897528387000037],[129.551524285,29.893622137000065]]],[[[129.94800866000006,29.95856354400003],[129.9409285820001,29.953192450000145],[129.92381173300012,29.957920034000082],[129.91333333100008,29.960901639000113],[129.90308678500006,29.97085195500007],[129.900645379,29.972560940000093],[129.89975019600004,29.97565338700015],[129.9011336600001,29.98069896],[129.90357506600006,29.98436107000005],[129.912364129,29.991888739],[129.90902754000015,29.999335028000175],[129.91342207100016,30.00031159100014],[129.92198954500006,30.00472988100016],[129.92713547100007,29.993404422000097],[129.93415344000002,29.982101624000066],[129.94369550900015,29.96527741100006],[129.94532311300006,29.961615302000112],[129.94800866000006,29.959458726000108],[129.94800866000006,29.95856354400003]]],[[[130.49895073600024,30.467962261000153],[130.52369225400005,30.44965241100006],[130.56782501700005,30.435941711000012],[130.59958849400013,30.412458198000152],[130.63867817600013,30.40266076900015],[130.67457116,30.374579169000143],[130.6694442070001,30.33966705900012],[130.64714603000007,30.290513414000188],[130.603751051,30.25246851800013],[130.57727971400018,30.235905859000113],[130.54682984500008,30.231416228000157],[130.51771967100004,30.227492394000123],[130.485977453,30.225777010000044],[130.43771320800013,30.238970153000153],[130.42713993800024,30.25553593700009],[130.4106338930002,30.29155631900015],[130.38626403800018,30.339605661000107],[130.37901254000022,30.365875685000148],[130.37624650800015,30.394435997000144],[130.38648522200018,30.398138739],[130.42336102800002,30.398968251000056],[130.441172722,30.422308661],[130.46118241000025,30.441141568000106],[130.46711892599998,30.457225267000055],[130.48834512500017,30.457026279],[130.49895073600024,30.467962261000153]]],[[[130.1650506890002,30.4898900780001],[130.19101626800003,30.47617226199999],[130.20230578800007,30.481901060000084],[130.22006269599999,30.4715843770001],[130.2428670000002,30.463611804],[130.26214412700008,30.4470323850001],[130.2621568440001,30.435023779000105],[130.24063399200017,30.434935680000095],[130.23184544100005,30.42354163300014],[130.21246764200023,30.420690741000087],[130.19308209900024,30.439563337],[130.19438650700025,30.452148094000066],[130.1903808230002,30.461299148000066],[130.17311500100007,30.45442186800007],[130.16310837600005,30.468716573000123],[130.15177683600004,30.477863163],[130.14176604600019,30.489301081000136],[130.1650506890002,30.4898900780001]]],[[[130.86500084700006,30.74774811400009],[130.85466556100002,30.725612697000102],[130.84839928500017,30.727077541000156],[130.84156334700006,30.727484442000062],[130.83814537900005,30.727484442000062],[130.83855228000007,30.736965236000074],[130.84164472700004,30.74526601800015],[130.84066816500015,30.751125393],[130.85149173300024,30.7606468770001],[130.85775800900004,30.76654694200012],[130.86101321700008,30.75238678600003],[130.86500084700006,30.74774811400009]]],[[[130.302582227,30.808457749000027],[130.30884850400005,30.804063218000138],[130.31755618600002,30.804063218000138],[130.32211347700016,30.793198960000055],[130.3107202480002,30.78038157800013],[130.30193118600008,30.781846421000083],[130.28931725400017,30.779160874000112],[130.2784123060001,30.779974677000112],[130.27784264400012,30.77171458500014],[130.27393639400012,30.77440013200011],[130.26522871200015,30.77883535400018],[130.25904381600017,30.781642971000124],[130.25969485800013,30.782863674000154],[130.26351972700004,30.788560289000046],[130.2671004570001,30.794134833000143],[130.27385501400013,30.79246653900013],[130.28679446700008,30.80211009300011],[130.2957462900001,30.805975653000118],[130.302582227,30.808457749000027]]],[[[130.4422306650001,30.811835028000147],[130.44662519600016,30.804266669000114],[130.44353274800008,30.799709377000156],[130.41985110800024,30.807847398000078],[130.41049238400004,30.808457749000027],[130.40316816500004,30.80613841400016],[130.40040123800023,30.811550197000102],[130.40780683700015,30.810166734000134],[130.4088647800002,30.813869533000073],[130.41863040500002,30.816270249000027],[130.42611738400004,30.819037177],[130.43580162900017,30.813462632000082],[130.4422306650001,30.811835028000147]]],[[[131.03556375600013,30.557209431],[131.01791169000003,30.55108809800005],[131.00340350800016,30.551166622000082],[130.9940341170002,30.53257178200012],[130.9826388590001,30.519305321000147],[130.9804740110002,30.497095505000132],[130.96696052800021,30.479399958000087],[130.9678993060002,30.464294822000014],[130.96475337600012,30.456319105000105],[130.97295382600024,30.449170034000034],[130.97803086800005,30.437596801],[130.97176863900003,30.42608701200008],[130.9696385780002,30.415438636000104],[130.9777970910002,30.40028023399999],[130.9632821280001,30.38614366800006],[130.96217717500022,30.372808183000146],[130.94365060900023,30.374681186000046],[130.92408287900017,30.36953359600001],[130.90651933000018,30.366014516000078],[130.8910196090001,30.355421322000055],[130.88581760500008,30.343850664000158],[130.87038107900005,30.343904295000144],[130.8673456280001,30.353699646000067],[130.85711789299998,30.36619154600008],[130.86027567600016,30.37952507300018],[130.86551539500024,30.397292703000076],[130.8625715100002,30.423947003000123],[130.85339754700013,30.440830762000147],[130.84938214600007,30.46126404200008],[130.85149508200018,30.470143740000182],[130.8617714440002,30.465662831000074],[130.87000225800014,30.463860979000103],[130.87627834200012,30.480704794000033],[130.90113980700008,30.503691978000134],[130.930221199,30.540859645000083],[130.94214928500017,30.56981028900016],[130.95093834700006,30.595038153000033],[130.95127378600003,30.610018201000045],[130.94837684900014,30.641109393000093],[130.9433085870002,30.654460150000105],[130.94543043900015,30.664215375000182],[130.93929969700005,30.672251498000108],[130.9527968900001,30.685495816000028],[130.96634534600005,30.70144146200009],[130.985131827,30.729775881000037],[130.98523937100006,30.74135231100017],[130.99970311700022,30.745686335000116],[131.00813866600018,30.76786485800001],[131.006257128,30.7892467570001],[131.02717589000022,30.81937162100006],[131.0392358730002,30.831447658000016],[131.04525800900004,30.836859442000062],[131.05201256600006,30.840236721000068],[131.06153821600006,30.840587948000106],[131.0624069840001,30.82452899499999],[131.07359469399998,30.799581581000055],[131.08793357200008,30.78260629900008],[131.07120798000008,30.76930179900016],[131.07096896599998,30.73732987800004],[131.078937331,30.699084278],[131.0537605950001,30.661867794],[131.05780289700024,30.64233795000014],[131.05761514300016,30.611269028000052],[131.05131930700006,30.597092024000162],[131.03784798300003,30.589171336000092],[131.03769896100002,30.57229418700014],[131.03556375600013,30.557209431]]],[[[129.43384850400005,30.844549872000172],[129.42945397200006,30.840887762000037],[129.42823326900023,30.846421617000047],[129.430918816,30.848211981000034],[129.43384850400005,30.844549872000172]]],[[[129.93946373800023,30.81342194200009],[129.92774498800023,30.81342194200009],[129.911957227,30.819769598000036],[129.91041100400005,30.821966864],[129.9098413420002,30.825873114],[129.90398196700002,30.834418036000116],[129.90821373800017,30.83844635600009],[129.915863477,30.84194570500007],[129.92554772200006,30.849595445000105],[129.93213951900012,30.851752020000035],[129.93995201900012,30.848944403000147],[129.94629967500023,30.84471263200014],[129.95826256600017,30.836981512000037],[129.95980879000004,30.828680731000148],[129.9503686860002,30.81932200700011],[129.93946373800023,30.81342194200009]]],[[[129.44532311300006,31.17755768400012],[129.43685957100016,31.17405833500011],[129.4356388680002,31.179185289000046],[129.4405216810001,31.186061916000043],[129.44410241000017,31.186590887000122],[129.44507897200006,31.190334377000156],[129.44361412900017,31.19310130400011],[129.44507897200006,31.194932359000106],[129.44613691499998,31.199652411],[129.45370527400016,31.199652411],[129.4487410820001,31.188218492000047],[129.4487410820001,31.1841087910001],[129.4517521490001,31.180690822000187],[129.44532311300006,31.17755768400012]]],[[[130.16635175900004,31.35297272300012],[130.16203860800013,31.349758205000157],[130.15902754000004,31.352036851000136],[130.15886478000007,31.35618724200016],[130.16480553500017,31.362046617000104],[130.16936282600014,31.36102936400006],[130.16635175900004,31.35297272300012]]],[[[129.71924889400012,31.637355861000017],[129.69597740599997,31.621447336000116],[129.67769407500023,31.629699673000076],[129.65937367500018,31.641934705000054],[129.6553814330001,31.65978483800005],[129.67629765500024,31.666966426000144],[129.69060286800018,31.700198056000104],[129.716644727,31.730373440000093],[129.731700066,31.73761627800009],[129.75359134200002,31.74380117400007],[129.76775149800008,31.75934479400017],[129.77670332099999,31.779527085000026],[129.78321373800011,31.799627997000144],[129.79086347700004,31.784409898000078],[129.79859459700006,31.76365794499999],[129.79957116,31.74542877800009],[129.78638756600006,31.73761627800009],[129.77613366000006,31.729478257],[129.7417098320001,31.676174221000124],[129.72934004000015,31.644232489000117],[129.71924889400012,31.637355861000017]]],[[[129.83179772200006,31.78066640800013],[129.82992597700016,31.773342190000122],[129.82064863400004,31.778265692],[129.8164982430001,31.78030019700013],[129.8150333990002,31.78851959800012],[129.81413821700002,31.794826565000065],[129.81877688900025,31.805690822000045],[129.82455488400004,31.8146019550001],[129.8336694670002,31.816921291000043],[129.8372501960001,31.817735093000167],[129.84278405000012,31.814805406000133],[129.8424585300002,31.810085354000037],[129.84131920700023,31.80259837400017],[129.84652754000004,31.79918040600016],[129.84017988400004,31.795762437000135],[129.83432050900015,31.794501044000057],[129.83008873800023,31.791245835],[129.82992597700016,31.785671291000185],[129.8336694670002,31.782538153000118],[129.83179772200006,31.78066640800013]]],[[[129.86451256600017,31.875555731000176],[129.9020288420002,31.848130601000136],[129.90992272200018,31.84568919499999],[129.9127710300002,31.85187409100014],[129.908457879,31.86180247600008],[129.91342207100016,31.86774323100009],[129.92855879000015,31.869696356000034],[129.93336022200006,31.867824611000074],[129.92847741000017,31.863918361000074],[129.92774498800023,31.8595238300001],[129.92969811300011,31.853420315],[129.92807050900015,31.846502997000115],[129.92847741000017,31.84039948100012],[129.93116295700023,31.836371161000145],[129.93148847700016,31.833482164000102],[129.9292098320001,31.826727606000176],[129.92221113400004,31.81981028900016],[129.9127710300002,31.81948476800015],[129.90333092500006,31.81806061400009],[129.88990319100012,31.81073639500009],[129.87598717500012,31.811265367000075],[129.8686629570001,31.81842682500009],[129.86329186300023,31.820868231000034],[129.85906009200002,31.823675848000093],[129.85743248800011,31.82855866100006],[129.85377037900017,31.835150458000115],[129.84742272200006,31.84341054900004],[129.84652754000004,31.85089752800009],[129.85352623800011,31.855169989],[129.85043379000004,31.85740794499999],[129.83952884200008,31.85366445500013],[129.83179772200006,31.84373607000005],[129.82422936300011,31.84227122599999],[129.82056725400005,31.845526434000035],[129.82032311300011,31.85187409100014],[129.82309004000015,31.863023179],[129.83179772200006,31.87352122600005],[129.84498131600017,31.88060130400011],[129.86451256600017,31.875555731000176]]],[[[130.61087039595205,32.15702973123702],[130.67448408387324,32.112226264130825],[130.71236290882112,32.0909097361954],[130.70011559495865,32.06703522429622],[130.71096764484096,32.04964610408446],[130.7211995788974,32.04106781732584],[130.783883090832,31.954845689377166],[130.8027966662331,31.935053615731746],[130.8237772973844,31.91960236275891],[130.84703169165928,31.909525458333277],[130.8734383491005,31.88756297525113],[130.8811898126597,31.870225531882895],[130.8763839048934,31.82444021284546],[130.8810347839282,31.801340847302285],[130.88909630674928,31.790230414102425],[130.89700280173795,31.78426178635233],[130.9654740742691,31.76067149529335],[130.97601606668812,31.747209783704605],[131.002371047286,31.723516139858063],[131.00764204304588,31.71364594190665],[131.0102258654314,31.705946153392304],[131.0108976581004,31.69605011612002],[131.01260298134255,31.686309109377888],[131.01663374185378,31.675922145690507],[131.03585737471818,31.645355536528868],[131.04722619033632,31.637268175286025],[131.0711007022355,31.633624985704458],[131.10076297383213,31.619413967081],[131.10696414557893,31.617889512790825],[131.11580081565515,31.616726792807313],[131.12634280807416,31.616959336804015],[131.1560050796708,31.61274770824015],[131.1747636254411,31.60026784948174],[131.18623579294749,31.586831977214004],[131.19181684796925,31.57466217681805],[131.19150678870736,31.564120185298307],[131.18732099766592,31.540943305389263],[131.18664920499694,31.5250011260011],[131.181378209237,31.51177195930852],[131.1553849629456,31.478414822186252],[131.152904494247,31.47389313436075],[131.15064537914046,31.471340236031565],[131.13038170700023,31.469427802000084],[131.10938561300006,31.464544989],[131.07178795700005,31.449611721000153],[131.05689537900005,31.439642645000063],[131.04525800900004,31.42747630400008],[131.02807477500008,31.401785761000113],[131.01361073600006,31.363069850000144],[131.02545128600016,31.35409522499999],[131.05958092500012,31.344875393000095],[131.08334394600004,31.338446356000176],[131.10401451900012,31.328843492000104],[131.10738759400024,31.317184411000156],[131.10438183500005,31.309449248000178],[131.08298623699997,31.29705597000016],[131.07421690500004,31.282104405000112],[131.09259076700013,31.276050664000152],[131.12474719500014,31.28834554600003],[131.1321139440001,31.279513102000024],[131.060249739,31.225314840000138],[131.03295089700012,31.22752444600009],[131.0081594020002,31.221082284000047],[131.00660241000017,31.199774481000176],[130.99708092500018,31.186590887000122],[130.97999108200023,31.15599192900011],[130.96859785200016,31.141750393],[130.95622806100002,31.13117096600014],[130.940684441,31.12132396000011],[130.92400149800008,31.11298248900006],[130.90723717500023,31.10691966400016],[130.87068066200007,31.096018518000122],[130.8452254570001,31.08991120000009],[130.81951105400006,31.08726047400016],[130.79235710500015,31.077847115000125],[130.77379645200008,31.06548277200001],[130.76758873800006,31.056463934000035],[130.72542805000003,31.047039567000084],[130.69488036000004,31.018824916000185],[130.67794304400005,31.005010434000056],[130.65772202600007,31.003191200000103],[130.6633394100002,31.069506364000134],[130.68897545700005,31.09015534100014],[130.72868899800008,31.111558335],[130.74268639400023,31.12128327000012],[130.76478445300003,31.18650933200003],[130.75394057400015,31.203882653000093],[130.78036911500024,31.242514662000033],[130.789670147,31.275148674000135],[130.79664629800018,31.325345784000078],[130.7952516060001,31.344425107000134],[130.78272545700005,31.372788804000137],[130.76954186300023,31.402411200000174],[130.74732506600017,31.435492255000113],[130.70341738600015,31.459304551000017],[130.69252519000017,31.48557201000004],[130.70533287900017,31.52875397300012],[130.69556725400005,31.5458031270001],[130.63689212300014,31.55524323100012],[130.61947675900015,31.56427643400012],[130.60938561300011,31.56631094000015],[130.59831790500007,31.573431708],[130.59088884600007,31.58598791100009],[130.61389305800017,31.612066478000102],[130.6378780590001,31.62259469100009],[130.66228274800008,31.617865302000112],[130.68783613400015,31.61945221600014],[130.711680535,31.614406643000038],[130.72234134200008,31.59731679900007],[130.71924889400017,31.570705471000124],[130.72266686300006,31.56342194200012],[130.7360132170002,31.559475002000127],[130.74903405000006,31.559719143000066],[130.75863691500015,31.563788153000033],[130.77637780000023,31.579901434000092],[130.7990014980002,31.611721096000124],[130.81031334700018,31.650946356000148],[130.80453535200004,31.687241929000052],[130.77637780000023,31.710272528000033],[130.73796468800018,31.708438590000085],[130.68604576900023,31.725531317],[130.644786004,31.71474844],[130.61304772200006,31.68235911700019],[130.61011803500006,31.672308661000116],[130.60621178500006,31.646633205000157],[130.60222415500007,31.638251044000086],[130.57496178500017,31.611273505000142],[130.56763756600006,31.600734768000095],[130.5584416020001,31.56631094000015],[130.54224694100006,31.541734117000132],[130.52914472700016,31.51325104400003],[130.51807701900012,31.472398179],[130.51612389400006,31.45331452],[130.52051842500023,31.43244049700003],[130.55046634200002,31.3751488300001],[130.5626733730002,31.334377346000124],[130.57349694100012,31.3146019550001],[130.58912194100017,31.306219794000057],[130.60287519599999,31.301988023000106],[130.62368198400011,31.275646770000137],[130.6603296230002,31.271429755],[130.66195722700004,31.258612372000144],[130.65007571700008,31.223700262000037],[130.64665774800008,31.206935940000037],[130.63982181100008,31.186468817000147],[130.62330162900017,31.178859768],[130.6036889980002,31.172349351000108],[130.58643639400012,31.155422268000123],[130.5735783210001,31.167425848000065],[130.56251061300023,31.166937567000062],[130.55079186300023,31.162420966000028],[130.5367944670002,31.162176825000174],[130.52173912900017,31.16868724200016],[130.516856316,31.175441799000012],[130.51612389400006,31.189520575000145],[130.50660241000017,31.212795315000065],[130.4948022800002,31.227240302000112],[130.45114447600005,31.249388072000144],[130.29737389400012,31.253729559000178],[130.27507571700008,31.25299713700015],[130.24878991000006,31.244126695000105],[130.22220471400013,31.246299862000157],[130.21205593,31.260865751000082],[130.20871522600007,31.279282515000133],[130.20309321400023,31.293824192],[130.1929524180001,31.315156593000083],[130.17938199500006,31.32778106900004],[130.19072152900006,31.326789327000043],[130.20659505900008,31.32481915000001],[130.20777428500006,31.336615302000027],[130.19654381600006,31.35419342700014],[130.17025800900004,31.377020575000145],[130.14063561300006,31.397650458000086],[130.1189884770001,31.408636786000145],[130.14503014400023,31.4200707050001],[130.15308678500017,31.422267971000096],[130.16236412900005,31.421942450000145],[130.1754663420002,31.417303778000033],[130.18409264400012,31.416083075000117],[130.19597415500007,31.412054755000142],[130.21517988400004,31.391058661],[130.22828209700018,31.38129303600006],[130.24488366000006,31.40485260600012],[130.29326812900004,31.44470403200016],[130.3047602330001,31.47663418000009],[130.31706790500007,31.4930687520001],[130.32846113400004,31.52903880400008],[130.33448326900012,31.56240469000015],[130.32447350400005,31.58673737200003],[130.33765709700018,31.607896226000108],[130.336192254,31.626166083],[130.32545006600012,31.642075914000102],[130.29737389400012,31.669989325000145],[130.2592879570001,31.72085195500007],[130.24626712300014,31.72964101800015],[130.19971764400012,31.753729559000178],[130.18409264400012,31.758693752000127],[130.18181399800002,31.768255927000112],[130.17143062700003,31.79013665700016],[130.18100019600004,31.82697174700003],[130.19031873800012,31.835088246000126],[130.22282962300008,31.82444896000011],[130.235118035,31.819525458000143],[130.20785566500004,31.843695380000057],[130.19700374200025,31.85848542800015],[130.2147297910001,31.88561847400011],[130.220437744,31.92959451500009],[130.21391755000005,31.950174432000054],[130.2051266440001,31.971670373000066],[130.1941024100001,31.980902411],[130.18995201900023,31.986029364000117],[130.17410608700018,31.998755987],[130.17299366000017,32.017449556000045],[130.186307185,32.026795814000096],[130.20404812200005,32.04828530800002],[130.20404738700003,32.07258078500003],[130.1798608730002,32.09345123900006],[130.20679772200006,32.12067291900014],[130.24830162900017,32.13373444200012],[130.27865644600004,32.10053131700012],[130.29851321700002,32.105861721000096],[130.31959069100006,32.11823151200012],[130.33187910200004,32.12860748900012],[130.33513431100008,32.135199286],[130.34465579500008,32.161769924000126],[130.34465862896903,32.161778425075354],[130.3448401230731,32.161706447794344],[130.3453568870108,32.161215522278454],[130.35589887942976,32.15302480734904],[130.3826155952336,32.12646312117609],[130.39331261638407,32.118375759034066],[130.40788537021368,32.11372487999928],[130.42437015196097,32.11341482253603],[130.44979495657194,32.11884084702753],[130.47186079334082,32.12723826843127],[130.52550092962431,32.139847317499786],[130.5387300972162,32.146151842033944],[130.55268273342145,32.14997589786931],[130.5635347842028,32.15400665928],[130.57438683498438,32.160672919019945],[130.5897864120134,32.16346344698057],[130.61087039595205,32.15702973123702]]]]}},{"type":"Feature","properties":{"iso_3166_2":"JP-47","name":"Okinawa","name_alt":null,"name_local":"沖縄県","type":"Ken","type_en":"Prefecture","region":"Okinawa","postal":null,"region_code":"JPN-OKN"},"geometry":{"type":"MultiPolygon","coordinates":[[[[123.79509524800008,24.040757554000137],[123.78174889400006,24.039089260000125],[123.760020379,24.04511139500012],[123.75766035200016,24.053819078000018],[123.766856316,24.060370184000092],[123.78345787900017,24.062404690000122],[123.80290774800008,24.06061432500006],[123.80746504000004,24.050767320000105],[123.79509524800008,24.040757554000137]]],[[[124.02458743600008,24.22138092700014],[124.01351972700004,24.213771877000013],[124.00432376400025,24.215155341000084],[123.9981388680001,24.222438869000186],[123.99447675900015,24.235703843000024],[123.99708092500023,24.246771552000055],[124.00619550900004,24.24595774900014],[124.01311282600014,24.241929429],[124.02133222700004,24.241034247000087],[124.02873782600003,24.234361070000134],[124.02458743600008,24.22138092700014]]],[[[124.09734134200002,24.309230861000017],[124.089610222,24.304877020000035],[124.08187910200004,24.310044664000102],[124.078868035,24.31940338700015],[124.08269290500002,24.328233140000023],[124.09197024800008,24.328558661000116],[124.10067793100009,24.320013739000032],[124.10222415500019,24.314683335000055],[124.09734134200002,24.309230861000017]]],[[[123.99765058700021,24.329982815],[123.99927819100006,24.321763414000102],[123.99154707100004,24.319606838000098],[123.98576907600014,24.323228257000082],[123.97966556100008,24.324652411000145],[123.97209720100003,24.32453034100017],[123.96648196700014,24.32615794500019],[123.958262566,24.326931057000095],[123.95403079500008,24.32884349200016],[123.9639591810002,24.33421458500011],[123.96566816500004,24.34137604400017],[123.96876061300011,24.346828518],[123.981211785,24.347194729000122],[123.99765058700021,24.329982815]]],[[[123.79127037900017,24.409613348000065],[123.81470787900005,24.391750393],[123.83472741,24.395493882000054],[123.87208092500018,24.390122789000188],[123.9104923840001,24.37954336100013],[123.93441816500015,24.367499091000028],[123.93604576900017,24.341457424000154],[123.91553795700011,24.306830145000063],[123.87305748800023,24.258246161],[123.85124759200019,24.256984768],[123.74577884200019,24.281236070000162],[123.68344160200004,24.28530508000013],[123.66822350400005,24.29661692900011],[123.68376712300002,24.323472398000106],[123.68767337300002,24.32050202],[123.69092858200011,24.31883372599999],[123.69800866000006,24.315985419000143],[123.70704186300017,24.32868073100009],[123.71753991000006,24.323675848000065],[123.72925866,24.31574127800009],[123.7423608730002,24.319728908000073],[123.74805748800006,24.329575914000102],[123.75318444100017,24.364447333000115],[123.76531009200008,24.401109117000047],[123.766856316,24.409409898000106],[123.76986738400004,24.418361721000153],[123.77686608200011,24.419745184000035],[123.78492272200006,24.416083075000174],[123.79127037900017,24.409613348000065]]],[[[123.00261478000019,24.474310614],[123.01636803500011,24.469794012000065],[123.01823978000007,24.459295966000084],[123.01107832100004,24.44769928600006],[122.99838300900015,24.439520575000145],[122.98780358200011,24.443304755000085],[122.94752037900005,24.439520575000145],[122.93864993600019,24.44424062700007],[122.93816165500019,24.45482005400011],[122.944590691,24.466253973000065],[122.95557701900017,24.47313060099999],[122.96794681100019,24.471177476000136],[123.00261478000019,24.474310614]]],[[[124.26050866000017,24.445257880000113],[124.25391686300011,24.401800848000093],[124.24187259200019,24.363714911],[124.21192467500012,24.337103583000058],[124.17701256600012,24.33299388200011],[124.14031009200019,24.34198639500012],[124.12224368600008,24.360581773000106],[124.14307701900023,24.3849144550001],[124.13257897200018,24.391994533000158],[124.12875410200016,24.40355052299999],[124.12273196700008,24.41429271],[124.10572350400011,24.419094143000095],[124.08863366000006,24.42194245000003],[124.07789147200006,24.428452867000104],[124.07837975400005,24.435492255],[124.09522545700023,24.439520575000145],[124.1017358730002,24.446600653000118],[124.11231530000018,24.463364976000136],[124.11622155000018,24.467474677],[124.12916100400017,24.46938711100013],[124.1329858730002,24.464016018000095],[124.13445071700008,24.456773179000052],[124.13990319100017,24.45319245000009],[124.14795983200023,24.44635651200015],[124.15650475400005,24.441636460000055],[124.16781660200004,24.439520575000145],[124.19125410199999,24.440008856000034],[124.20215905000006,24.44220612200003],[124.21192467500012,24.446966864000117],[124.22242272200018,24.46100495000009],[124.23031660200016,24.479152736000074],[124.24024498800017,24.494859117000047],[124.25660241000017,24.501613674000097],[124.26840254000015,24.51044342700014],[124.30062910199999,24.569891669000086],[124.31446373800011,24.587307033000158],[124.32129967500012,24.59027741100006],[124.32911217500012,24.58356354400003],[124.33228600400017,24.571030992000104],[124.32691491,24.561183986000103],[124.31902103000002,24.553045966000084],[124.30909264400023,24.534857489],[124.27393639400017,24.487941799000154],[124.26050866000017,24.445257880000113]]],[[[124.70826256600006,24.630723374000112],[124.70175214900004,24.629909572000187],[124.69133548300024,24.63108958500011],[124.67855879000004,24.63654205900015],[124.67628014400023,24.651963609000077],[124.68938235800013,24.666896877000127],[124.70508873800011,24.66925690300009],[124.71989993600008,24.66124095300013],[124.72584069100017,24.64655182500006],[124.71713300900004,24.635036526000093],[124.70826256600006,24.630723374000112]]],[[[124.70411217500012,24.748317776000093],[124.70785566500015,24.737127997000087],[124.6973576180001,24.741481838000155],[124.68864993600019,24.74457428600006],[124.68742923300024,24.755113023000106],[124.69613691500015,24.75450267100014],[124.70045006600017,24.75014883000007],[124.70411217500012,24.748317776000093]]],[[[125.20525149800002,24.80499909100017],[125.16814212300014,24.80097077],[125.15064537900017,24.804348049000126],[125.14014733200011,24.81639232000005],[125.14112389400006,24.828599351000108],[125.14966881600012,24.831935940000122],[125.15756269600016,24.833807684000092],[125.15967858200011,24.844427802000055],[125.16358483200005,24.854641018000095],[125.17701256600017,24.85639069200009],[125.19450931100002,24.850287177],[125.20289147200018,24.846258856000034],[125.21078535200016,24.83698151200015],[125.217051629,24.81659577],[125.20525149800002,24.80499909100017]]],[[[125.35824629000004,24.782619533000158],[125.36557050900015,24.779933986000074],[125.38721764400023,24.782171942000062],[125.40463300899998,24.778387762000037],[125.42628014400006,24.768866278000033],[125.44483483200011,24.756740627000127],[125.45264733200011,24.744940497000172],[125.44402103000019,24.73720937700007],[125.42351321700002,24.73224518400012],[125.38379967500012,24.726955471000124],[125.29965253999998,24.725653387000037],[125.25879967500023,24.733384507000054],[125.25684655000012,24.75169505400011],[125.261485222,24.763861395],[125.27393639400023,24.820013739],[125.27475019600016,24.856431382000082],[125.27100670700023,24.86782461100013],[125.26026451900012,24.885199286000116],[125.26246178500011,24.884344794000114],[125.27442467500023,24.882228908000016],[125.28516686300023,24.877346096000124],[125.29021243600008,24.873928127000042],[125.29444420700011,24.869574286000116],[125.30225670700011,24.857570705000015],[125.314219597,24.82990143400012],[125.32162519600004,24.816880601000108],[125.32667076900023,24.81073639500015],[125.35824629000004,24.782619533000158]]],[[[125.25294030000012,24.929103908000158],[125.2574162120001,24.918443101000108],[125.25261478000019,24.919338283000016],[125.25098717500023,24.919256903000033],[125.25058027400016,24.91530996300004],[125.23755944100017,24.934027411000116],[125.24577884200008,24.935899156000076],[125.25294030000012,24.929103908000158]]],[[[123.60629316500027,25.738999742000132],[123.60466556100013,25.738755601000165],[123.60043379000004,25.73936595300013],[123.60279381600017,25.745469468000024],[123.60629316500027,25.738999742000132]]],[[[123.59424889400034,25.75279368700005],[123.59302819100006,25.744370835],[123.58863366000017,25.75153229400003],[123.59424889400034,25.75279368700005]]],[[[123.55990644600004,25.756822007000196],[123.55819746200021,25.754339911000088],[123.55559329500008,25.75755442899994],[123.55990644600004,25.756822007000196]]],[[[123.5289005870001,25.761786200000145],[123.51148522200029,25.758083401000093],[123.51392662900017,25.769110419000143],[123.5314233730002,25.773342190000065],[123.5374455090001,25.773260809000092],[123.54533938900036,25.761786200000145],[123.5289005870001,25.761786200000145]]],[[[123.62045332099999,25.774481512000122],[123.62045332099999,25.773586330000214],[123.61801191500015,25.774481512000122],[123.62045332099999,25.774481512000122]]],[[[123.59530683700021,25.801906643000066],[123.59546959700018,25.797267970999954],[123.59237714900016,25.79743073100009],[123.59530683700021,25.801906643000066]]],[[[131.25245201900006,25.819037177],[131.241465691,25.818752346000068],[131.230723504,25.8216820330001],[131.2120874360002,25.82904694200009],[131.21273847700016,25.841457424000012],[131.22120201900012,25.85569896000011],[131.23609459700006,25.87205638200014],[131.24105879000004,25.875677802],[131.24708092500012,25.876857815000122],[131.25513756600006,25.87498607000005],[131.27711022200018,25.858384507],[131.27051842500006,25.8536644550001],[131.26417076900023,25.846340236000074],[131.2592879570001,25.83722565300009],[131.25733483200023,25.82709381700012],[131.25245201900006,25.819037177]]],[[[124.56885826900017,25.896226303999967],[124.56771894600027,25.89443594],[124.56527754000015,25.89573802300005],[124.56682376400019,25.898423570000134],[124.56885826900017,25.896226303999967]]],[[[123.6730249360003,25.92869700699994],[123.67204837300014,25.92747630400011],[123.6717228520001,25.92975495],[123.6730249360003,25.92869700699994]]],[[[123.68303470100003,25.920030015000222],[123.6758732430001,25.918158270000063],[123.67269941500004,25.92682526200015],[123.67920983200017,25.93077220300013],[123.68458092500035,25.924627997000144],[123.68580162900017,25.922796942],[123.68303470100003,25.920030015000222]]],[[[131.31657962300002,25.923081773000106],[131.30958092500023,25.922756252000013],[131.301524285,25.926743882000082],[131.2908634770001,25.938666083000115],[131.28972415500007,25.95136139500009],[131.3020939460001,25.953192450000145],[131.32129967500023,25.947699286000116],[131.327891472,25.937079169000086],[131.32227623800011,25.92706940300009],[131.31657962300002,25.923081773000106]]],[[[127.361094597,26.164007880000057],[127.35352623800006,26.15399811400009],[127.34538821700008,26.15827057500009],[127.34278405000023,26.170233466000028],[127.34229576900006,26.17999909100017],[127.34262128999998,26.18573639500012],[127.34620201900006,26.206366278000147],[127.35417728000002,26.218939520000063],[127.36410566500004,26.221340236000103],[127.36963951900023,26.214585679000052],[127.37077884200019,26.210028387000122],[127.37086022200018,26.20319245000009],[127.36793053500006,26.19061920800003],[127.36361738400015,26.177557684000035],[127.361094597,26.164007880000057]]],[[[127.94597415500007,26.251898505000113],[127.93946373800006,26.239528713000183],[127.93474368600008,26.243841864],[127.93262780000023,26.250555731000034],[127.93401126400013,26.25202057500009],[127.9368595710001,26.256537177000055],[127.94084720100014,26.262030341000084],[127.94507897200018,26.26076894700016],[127.94597415500007,26.251898505000113]]],[[[127.98910566499998,26.35846588700015],[127.97820071700019,26.354803778000118],[127.96770267000014,26.359686591000084],[127.97299238400004,26.376410223],[127.97763105600004,26.379746812000135],[127.98707116000017,26.38405996300004],[127.9904077480002,26.380357164000102],[127.98869876400019,26.374782619000186],[127.99382571700019,26.372503973000036],[127.99520918100009,26.36721426000004],[127.98910566499998,26.35846588700015]]],[[[126.79517662900011,26.305609442],[126.78891035200004,26.30345286700019],[126.78239993600008,26.30451080900015],[126.77540123800006,26.308539130000113],[126.77003014400012,26.31419505400011],[126.76783287900005,26.32054271000014],[126.75993899800002,26.334418036000116],[126.741465691,26.34170156500015],[126.71998131600017,26.346991278000033],[126.70362389400006,26.355292059000092],[126.69776451900023,26.369045315000037],[126.70679772200006,26.37913646],[126.72364342500023,26.38597239800002],[126.74170983200005,26.389715887000037],[126.75212649800008,26.390692450000117],[126.76986738400015,26.388006903000033],[126.78711998800023,26.380072333000058],[126.80144290500007,26.367661851000136],[126.81006920700023,26.351874091000084],[126.81031334700018,26.342515367000047],[126.80738366000017,26.332586981000148],[126.80209394599999,26.32355377800006],[126.79574629000015,26.317124742000132],[126.79371178500006,26.31289297100001],[126.7950952480002,26.308905341000028],[126.79517662900011,26.305609442]]],[[[127.24415123800011,26.586411851000108],[127.23682701900006,26.579169012000094],[127.22706139400023,26.579535223],[127.21485436300006,26.57746002800009],[127.20883222700016,26.581976630000142],[127.21485436300006,26.592922268],[127.22217858200005,26.598944403000118],[127.23275800900004,26.600775458],[127.2423608730002,26.596747137000122],[127.24415123800011,26.586411851000108]]],[[[127.80982506600017,26.735419012000037],[127.81120853000007,26.706976630000113],[127.78565514400006,26.70258209800012],[127.75855553500006,26.71287669500005],[127.75464928500006,26.728583075000117],[127.76880944100017,26.734035549000154],[127.79574629000004,26.731512762000037],[127.80982506600017,26.735419012000037]]],[[[128.3097436860002,26.704738674000126],[128.30811608200017,26.700873114000117],[128.30420983200005,26.701320705000015],[128.29997806100008,26.70258209800012],[128.296641472,26.701320705000015],[128.26441491000017,26.65241120000003],[128.24333743600008,26.63328685100008],[128.21713300900004,26.62563711100013],[128.17221113400004,26.623480536000116],[128.1588647800002,26.618801174000012],[128.15162194100017,26.612453518000095],[128.142832879,26.601752020000063],[128.13526451900017,26.590073960000055],[128.13209069100012,26.58124420800003],[128.13502037900005,26.57794830900015],[128.14087975400017,26.576727606000148],[128.14576256600006,26.573431708000115],[128.14519290500007,26.56411367400007],[128.14177493600008,26.556586005000113],[128.13835696700008,26.554022528000118],[128.13306725400017,26.55320872599999],[128.10873457099999,26.545152085000055],[128.09034264400023,26.542669989000117],[128.07162519599999,26.544012762000037],[128.05591881600006,26.550482489000117],[128.03638756600006,26.527329820000162],[127.98414147200006,26.478461005],[127.97201582100016,26.471869208000115],[127.95997155000023,26.470851955000157],[127.950938347,26.466701565000037],[127.94727623800006,26.451157945000105],[127.94027753999998,26.447739976000108],[127.87061608200011,26.44741445500007],[127.85987389400012,26.445624091000084],[127.85173587300008,26.44122955900012],[127.83887780000023,26.425238348],[127.84302819100017,26.417466539000102],[127.85474694100017,26.412990627000127],[127.86475670700005,26.406480210000055],[127.86980228000019,26.39345937700007],[127.87338300900015,26.364813544000086],[127.87826582100004,26.351874091000084],[127.8888452480002,26.33909739800005],[127.91016686300023,26.323065497000144],[127.91993248800011,26.30963776200015],[127.90186608200005,26.304999091000056],[127.88209069100006,26.310736395],[127.8615014980002,26.319403387000094],[127.84083092500012,26.32391998900006],[127.8282983730002,26.316229559000035],[127.77751712300008,26.23334381700012],[127.77100670700017,26.216498114000117],[127.76840254000015,26.197658596000068],[127.77540123800023,26.185126044000086],[127.79151451900012,26.185492255],[127.80990644600016,26.189195054000137],[127.82357832099999,26.186753648000106],[127.81421959700006,26.165920315000122],[127.79688561300006,26.139715887000094],[127.77572675900015,26.12177155200014],[127.75489342500006,26.125311591000028],[127.74170983200023,26.115627346000068],[127.72535241000006,26.089585679],[127.71013431100008,26.08437734600001],[127.65170332100016,26.08437734600001],[127.65707441500004,26.12177155200014],[127.63591556100002,26.191351630000142],[127.63819420700011,26.214748440000122],[127.658457879,26.212347723000093],[127.67774498800023,26.230617580000157],[127.69263756600012,26.25625234600004],[127.70020592500023,26.276109117000132],[127.71827233200005,26.274074611000103],[127.73129316500015,26.28937409100014],[127.73910566500015,26.30923086100016],[127.74187259200019,26.32054271000014],[127.73861738400015,26.341457424000012],[127.72437584700006,26.385443427000112],[127.72071373800011,26.406480210000055],[127.7225041020001,26.42991771000011],[127.73129316500015,26.439886786000116],[127.74773196700008,26.44183991100006],[127.78109785200004,26.44122955900012],[127.793711785,26.442694403000175],[127.80518639400023,26.44757721600014],[127.81006920700023,26.45799388200014],[127.81373131600017,26.45799388200014],[127.82878665500019,26.48305898600013],[127.83057701900006,26.4884300800001],[127.86426842500006,26.505682684000092],[127.90267988399998,26.516424872000115],[127.93751061300023,26.53213125200007],[127.96021569100017,26.56411367400007],[127.96241295700005,26.581976630000142],[127.95590254000015,26.59479401200015],[127.94060306100019,26.602484442],[127.89429772200006,26.609279690000122],[127.88559004000015,26.620184637000094],[127.88477623800023,26.635687567],[127.88575280000012,26.653509833],[127.87794030000012,26.686590887000037],[127.87826582100004,26.694525458],[127.88542728000019,26.69611237200003],[127.91993248800011,26.694525458],[127.96461022200006,26.697170315000093],[127.98731530000012,26.692938544000143],[128.00123131600017,26.68024323100009],[127.99952233200005,26.671820380000057],[127.99252363399998,26.663275458000115],[127.98853600400005,26.652980861000017],[127.99561608200005,26.63922760600009],[128.00440514400023,26.634751695000134],[128.014903191,26.634833075000117],[128.05738366000017,26.64476146000011],[128.11109459700006,26.67401764500012],[128.10328209700018,26.69122955900015],[128.11133873800011,26.703436591000028],[128.15235436300011,26.731512762000037],[128.15699303500006,26.73712799700003],[128.1619572270001,26.75714752800009],[128.169200066,26.761175848000065],[128.17611738400004,26.762518622000144],[128.17945397200006,26.76585521],[128.18799889400023,26.78050364799999],[128.2259220710001,26.800970770000063],[128.23462975400017,26.813950914000046],[128.23853600400017,26.832424221000068],[128.25440514400012,26.864406643000066],[128.25505618600002,26.886297919000114],[128.33139082100016,26.81342194200009],[128.337657097,26.79694245000009],[128.33334394600004,26.79303620000009],[128.33025149800002,26.78725820500013],[128.32984459700006,26.780340887000037],[128.334239129,26.77301666900003],[128.337657097,26.76430898600013],[128.33334394600004,26.756659247000115],[128.32683353000002,26.75047435100005],[128.32341556100013,26.746039130000085],[128.3097436860002,26.721177476000108],[128.3088485040001,26.71775950700011],[128.3097436860002,26.704738674000126]]],[[[127.95346113400015,26.913845119000044],[127.94817142000008,26.911281643000123],[127.93710371200021,26.91282786700016],[127.92611738400015,26.917141018000066],[127.91976972700004,26.92206452000012],[127.9181421230002,26.925197658000016],[127.92099043100004,26.934637762000037],[127.91854902400021,26.94216543200018],[127.92619876400025,26.95128001500008],[127.9458927740001,26.951605536],[127.95639082100016,26.941026109000134],[127.95313561300011,26.923325914000046],[127.95346113400015,26.913845119000044]]],[[[128.45484459700012,27.02875397300015],[128.44857832100016,27.02069733300003],[128.43140709700006,27.02167389500009],[128.41089928500017,27.030585028000033],[128.4060978520001,27.035101630000085],[128.40154056100002,27.03693268400015],[128.39625084700018,27.04075755400008],[128.39625084700018,27.049017645000063],[128.401621941,27.050726630000057],[128.40870201900006,27.05084870000003],[128.41570071700008,27.059759833000058],[128.42896569100017,27.066473700000117],[128.44434655000023,27.06256745000003],[128.45167076900023,27.054144598000065],[128.454356316,27.047512111000017],[128.45484459700012,27.02875397300015]]],[[[127.95215905000023,27.01829661700016],[127.92579186300023,27.00975169500005],[127.93572024800002,27.025091864],[127.98707116000017,27.078599351000108],[127.99537194100006,27.091742255000085],[128.00098717500023,27.091742255000085],[127.99317467500023,27.06671784100014],[127.97575931100008,27.039740302],[127.95215905000023,27.01829661700016]]],[[[128.66976972700016,27.421087958000058],[128.6557723320001,27.410142320000162],[128.64047285200016,27.384670315000093],[128.630707227,27.375677802000055],[128.61817467500012,27.37970612200003],[128.61312910200016,27.36432526200018],[128.604746941,27.36180247600008],[128.59546959700006,27.363918361000074],[128.58741295700023,27.362046617000104],[128.57447350400005,27.353338934000035],[128.55990644599999,27.350734768000123],[128.54542076900023,27.35374583500014],[128.53248131600006,27.362046617000104],[128.52686608200023,27.37189362200003],[128.52515709700006,27.384670315000093],[128.52613366,27.397162177],[128.5288192070001,27.40643952000015],[128.53386478000013,27.41526927300002],[128.53842207100016,27.417629299000154],[128.54656009200008,27.41787344],[128.56153405000012,27.420396226000108],[128.60027103000007,27.415350653000175],[128.61882571700008,27.41559479400003],[128.63526451900023,27.423773505000113],[128.65040123800023,27.434719143],[128.7006942070001,27.454820054000052],[128.70248457099999,27.451605536],[128.70281009200014,27.450751044000086],[128.70346113400015,27.450425523000078],[128.70687910200016,27.448635158000073],[128.69760175900004,27.435736395000063],[128.66976972700016,27.421087958000058]]],[[[128.24341881600006,27.85724518400012],[128.24154707100016,27.84536367400007],[128.23226972700004,27.852850653000033],[128.2298283210001,27.868963934000092],[128.236582879,27.866522528000147],[128.23853600400017,27.86090729400017],[128.24341881600006,27.85724518400012]]],[[[128.96070397200006,27.685777085],[128.94703209700012,27.68138255400011],[128.92945397200018,27.686712958000086],[128.92188561300011,27.700913804],[128.91928144600004,27.715562242000104],[128.91635175900004,27.722357489000117],[128.89454186300023,27.72821686400009],[128.8908797540001,27.741888739000032],[128.89926191500015,27.769517320000105],[128.87891686300017,27.824774481000034],[128.88428795700023,27.83685944200012],[128.88851972700004,27.853176174000154],[128.89454186300023,27.89130280200014],[128.8999129570001,27.895900783000073],[128.91521243600008,27.900336005000142],[128.94703209700012,27.914129950000145],[128.96550540500002,27.894354559000035],[128.9773055350001,27.836615302],[128.98878014400023,27.81110260600009],[128.99952233200023,27.802801825000117],[129.0131942070001,27.79523346600017],[129.02466881600006,27.78607819200009],[129.02963300899998,27.77326080900015],[129.02426191500004,27.756577867000104],[129.00025475400017,27.727728583],[128.98951256600017,27.707464911000088],[128.976328972,27.69550202000015],[128.96070397200006,27.685777085]]],[[[129.22974694100017,28.038600979000037],[129.23625735800024,28.035101630000057],[129.25790449300004,28.035915432000152],[129.26579837300002,28.034979559000178],[129.26889082100004,28.031642971000153],[129.2676701180001,28.017116604000122],[129.26531009200002,28.012396552000112],[129.26002037900017,28.006293036000116],[129.24317467500018,28.018866278000118],[129.2326766290001,28.02248769700016],[129.2145288420002,28.021755276000036],[129.21159915500007,28.023057359000134],[129.20744876400013,28.031642971000153],[129.2076929050002,28.042263088000098],[129.21159915500007,28.048854885000154],[129.2159123060001,28.051459052000084],[129.22388756600006,28.046210028000175],[129.22974694100017,28.038600979000037]]],[[[129.1583764980002,28.01902903900016],[129.1504826180002,28.014960028000118],[129.1466577480002,28.015326239000117],[129.14543704500002,28.031398830000015],[129.15129642000014,28.04840729400017],[129.16073652400016,28.062119859000106],[129.16846764400023,28.066392320000105],[129.17156009200002,28.063462632],[129.17147871200004,28.058172919000114],[129.17448978000007,28.05255768400012],[129.16944420700023,28.04189687700007],[129.16757246200004,28.032782294000086],[129.164317254,28.025010484000077],[129.1583764980002,28.01902903900016]]],[[[129.2215275400001,28.17601146000014],[129.2325952480002,28.170721747000172],[129.269297722,28.174872137000094],[129.26392662900017,28.16738515800013],[129.2560327480002,28.15916575700014],[129.25049889400006,28.151027736000046],[129.25180097700016,28.143784898000106],[129.26417076900012,28.134711005],[129.28777103000007,28.12518952],[129.29664147200018,28.119574286],[129.32553144600004,28.123480536],[129.34734134200008,28.10691966400013],[129.35043379000015,28.086493231000148],[129.32398522200018,28.07859935099999],[129.30640709700006,28.094142971000096],[129.30347741,28.09601471600014],[129.30079186300023,28.100531317000033],[129.29517662900005,28.09906647300015],[129.2905379570001,28.09516022300015],[129.29037519600016,28.092922268000066],[129.29070071700008,28.08881256700012],[129.2854110040001,28.08148834800012],[129.27914472700004,28.07709381700012],[129.27613366000006,28.08201732000019],[129.27361087300014,28.08331940300009],[129.26392662900017,28.096340236000074],[129.26303144600016,28.099107164000046],[129.25180097700016,28.100002346000124],[129.23064212300008,28.09666575700011],[129.2214461600001,28.099107164000046],[129.21810957100016,28.106105861000017],[129.21599368600008,28.13084544500019],[129.21412194100017,28.140082098000065],[129.18702233200017,28.174994208000086],[129.1808374360002,28.190252997000144],[129.19581139400023,28.19546133000013],[129.22771243600008,28.19525788],[129.2215275400001,28.17601146000014]]],[[[129.99545332100016,28.29092031500015],[129.97820071700008,28.28375885600012],[129.95655358200005,28.28481679900007],[129.9135848320001,28.29710521000011],[129.97559655000018,28.343247789000046],[130.01832116000017,28.3646507830001],[130.03028405000012,28.373480536000145],[130.03101647200006,28.35651276200015],[130.02149498800023,28.331284898000106],[130.00766035200016,28.306545315000122],[129.99545332100016,28.29092031500015]]],[[[129.7210392590001,28.434881903000033],[129.71599368600008,28.429144598000065],[129.70850670700005,28.428778387000065],[129.70053144600004,28.42999909100017],[129.69385826900017,28.428697007000082],[129.68165123800011,28.421087958000115],[129.63941491000017,28.40534088700015],[129.62525475400005,28.402736721000068],[129.6193139980002,28.400783596000124],[129.6168725920002,28.396470445000134],[129.61524498800017,28.38959381700012],[129.611175977,28.383124091000113],[129.60189863400015,28.380316473000065],[129.58155358200017,28.370672919000086],[129.55396569100006,28.32843659100017],[129.53345787900017,28.31883372599999],[129.53003991000017,28.314764716000028],[129.49887128999998,28.287502346000124],[129.48731530000018,28.28253815300009],[129.461192254,28.291693427000084],[129.4474389980002,28.29092031500015],[129.45484459700018,28.277248440000037],[129.44776451900012,28.266302802000055],[129.4396264980002,28.259019273000135],[129.43043053500006,28.254095770000063],[129.420176629,28.249945380000142],[129.43165123800023,28.241034247000087],[129.45687910200004,28.225734768000123],[129.46794681100008,28.215765692000147],[129.41521243600008,28.185736395],[129.40650475400017,28.1844750020001],[129.40154056100013,28.16331614799999],[129.38868248800011,28.16282786700019],[129.37110436300017,28.16722239799999],[129.35181725400005,28.160549221000124],[129.3644311860002,28.154038804000137],[129.37452233200005,28.140041408000073],[129.37940514400023,28.12596263200011],[129.37598717500023,28.119574286],[129.36573326900012,28.12319570500007],[129.33757571700014,28.147528387000037],[129.2866317070001,28.177923895],[129.28028405000006,28.190497137000094],[129.2814233730002,28.20482005400008],[129.28077233200005,28.218573309000092],[129.269297722,28.22943756700009],[129.25635826900012,28.214667059000092],[129.24244225400005,28.214300848000093],[129.20785566500015,28.22943756700009],[129.17359459700018,28.236070054000052],[129.15894616000017,28.240627346000096],[129.145762566,28.249945380000142],[129.145762566,28.256170966000084],[129.1544702480002,28.260321356000034],[129.16285241000006,28.262640692],[129.17139733200005,28.261664130000113],[129.18051191500015,28.256170966000084],[129.20883222700004,28.264227606000034],[129.2413843110002,28.25633372600005],[129.27084394600016,28.25535716400016],[129.29037519600016,28.284084377000127],[129.25367272200006,28.284572658000016],[129.239512566,28.290350653000175],[129.22771243600008,28.304592190000093],[129.24146569100017,28.31256745000006],[129.25245201900012,28.321519273000078],[129.26392662900017,28.32884349200016],[129.28825931100002,28.333075262000094],[129.29566491,28.336371161000116],[129.31625410200016,28.350165106000034],[129.33057701900023,28.363714911],[129.33130944100017,28.366034247000172],[129.35726972700016,28.368353583000115],[129.38062584700006,28.366766669000086],[129.39958743600008,28.37173086100013],[129.41334069100017,28.393296617000075],[129.4323022800002,28.38690827000012],[129.45093834700018,28.39203522300015],[129.46615644600016,28.404852606000176],[129.47535241000006,28.421291408000073],[129.48243248800011,28.411037502000156],[129.49268639400012,28.404852606000176],[129.50440514400012,28.39988841400013],[129.51636803500006,28.393296617000075],[129.53345787900017,28.430487372000144],[129.56080162900017,28.451117255000085],[129.626231316,28.48273346600014],[129.61394290500007,28.447984117000104],[129.61646569100017,28.43854401200018],[129.63249759200008,28.434881903000033],[129.6440535820001,28.439764716000113],[129.65430748800011,28.45213450700014],[129.6733504570001,28.48273346600014],[129.6725366550002,28.487616278000033],[129.66879316500015,28.495062567],[129.66724694100006,28.50299713700015],[129.67310631600017,28.50983307500009],[129.68775475400017,28.508978583],[129.69800866,28.494859117000047],[129.70753014400012,28.462144273000135],[129.71143639400012,28.455633856000034],[129.71729576900023,28.45026276200018],[129.72169030000012,28.444037177000112],[129.7210392590001,28.434881903000033]]]]}},{"type":"Feature","properties":{"iso_3166_2":"JP-10","name":"Gunma","name_alt":null,"name_local":"群馬県","type":"Ken","type_en":"Prefecture","region":"Kanto","postal":null,"region_code":"JPN-KNT"},"geometry":{"type":"Polygon","coordinates":[[[139.21458296093488,36.945652167313625],[139.21737348889536,36.929503282350595],[139.22646854139003,36.92498159452492],[139.24698408364856,36.92017568585922],[139.27163374190366,36.91955556913413],[139.35958702971755,36.90203725771326],[139.34026004496508,36.87175486939171],[139.3363843122861,36.86007599541085],[139.33917483934732,36.84870717979251],[139.35064700685388,36.83656321871763],[139.3607239121788,36.82953522377153],[139.3682686710623,36.823049832084024],[139.36894046373146,36.81429067637359],[139.3666150246636,36.80827037178025],[139.35932864819853,36.800363877690785],[139.35204227083415,36.79026113484349],[139.34212039603938,36.78054596652311],[139.33261193329406,36.76907379811726],[139.3288912293467,36.75656810183642],[139.3304415220586,36.71930939451295],[139.32568729113552,36.70465912541829],[139.31276818280537,36.67634044005919],[139.30718712778372,36.658925483224465],[139.30594689343434,36.64474030212324],[139.31204471239346,36.63215709147664],[139.3413452496835,36.61536225046743],[139.35374759317693,36.60970368108005],[139.36366946797148,36.60662893317871],[139.4234074241133,36.60045359985375],[139.43586144355078,36.595105088828745],[139.4458866720322,36.58593252196826],[139.44764367121843,36.57270335527568],[139.44454308489537,36.56151540770986],[139.43865197241058,36.55151601854945],[139.42712812716127,36.54358368603826],[139.41891157381013,36.532705796835074],[139.4164311060107,36.52588450836333],[139.41178022697585,36.51813304300546],[139.40309858563114,36.50810781542333],[139.39705244441478,36.498444322147805],[139.39302168210486,36.48748891947804],[139.39079959492528,36.47508657508541],[139.3835648953036,36.45906688133147],[139.3783972523313,36.443848172355246],[139.36320437997813,36.42227326110205],[139.356073033144,36.41514191336856],[139.34506595273155,36.402016100362744],[139.34088016169005,36.39571157492921],[139.33777957626643,36.38883860871482],[139.33653934101773,36.37912344039444],[139.3383996929914,36.368555610453086],[139.34351566001965,36.35855622039318],[139.35374759317693,36.348065903918325],[139.3835648953036,36.32346792340596],[139.3913163597622,36.31098806374817],[139.40077314656344,36.30036855696332],[139.42356245284492,36.279103704972044],[139.44051232258568,36.268484199086544],[139.4548783708401,36.268845934292415],[139.46826256716372,36.27300588601284],[139.4823702329998,36.27515045792728],[139.5028341011129,36.27437531247068],[139.5886686554341,36.2601126170037],[139.60546349464448,36.25241282848927],[139.63848473498257,36.22574778952884],[139.6537292832798,36.20313935040073],[139.67403812086252,36.15221222591353],[139.61001102089187,36.17944570655408],[139.56308882119208,36.19096955000467],[139.51420291583196,36.1928299019784],[139.4730684758295,36.178076280096235],[139.44423302563365,36.19631806102967],[139.41250369738776,36.21174347648025],[139.378603957007,36.222492174474326],[139.30429324793505,36.228228258227546],[139.23241132981906,36.242180895331984],[139.1987182959126,36.254428209194515],[139.19277550658433,36.25760630988327],[139.17763431197386,36.258381456239164],[139.1380501646833,36.270602932579266],[139.11185021371642,36.2708613140984],[139.10823286435522,36.26874258150494],[139.0896293482158,36.249028022225446],[139.0496317888759,36.19649892818293],[139.04436079311614,36.18665456775415],[139.04229373556734,36.1757250035061],[139.04229373556734,36.16440786383191],[139.04074344285556,36.14975759473725],[139.0337671247529,36.13867300085829],[139.0182125180932,36.128906154795175],[138.95702762292638,36.1111294618552],[138.85827396117435,36.07273387296985],[138.7827230168537,36.0351651072838],[138.7642745303453,36.03216787374831],[138.75073530529005,36.02718109792934],[138.74143354722042,36.019868883042534],[138.73569746256788,36.01209158016232],[138.73228681878163,36.00188548452749],[138.73213178915074,36.000696926122174],[138.73182173078823,35.999560045459674],[138.71642215375937,35.98105988210784],[138.700919223943,35.96953603775788],[138.62784874922033,36.01702667913793],[138.61451622884078,36.031030992186516],[138.61188073141057,36.042089749442425],[138.61467125937116,36.051882433027856],[138.61560143355933,36.06255361575671],[138.61265587776654,36.084257717319815],[138.61389611211592,36.10497996695187],[138.61327599539084,36.116400458514335],[138.6021138862468,36.12534048137812],[138.58950483627922,36.13249766753333],[138.57539717044307,36.14347890952408],[138.57028120341482,36.15334910747529],[138.56811079307863,36.16549306944955],[138.57555219917458,36.169549669281764],[138.59260542170284,36.16978221327855],[138.60025353427318,36.17621592902191],[138.60469770683375,36.18637034781332],[138.60469770683375,36.20497386305334],[138.5950858913008,36.226988022978816],[138.58857466029224,36.254970812453024],[138.58702436668113,36.270215358951674],[138.59281212817717,36.27941376423385],[138.6115189962046,36.290446682168664],[138.62211266456785,36.30011017544419],[138.6298641299257,36.31065216696393],[138.63265465698686,36.32390717207832],[138.6295540706638,36.332252915739446],[138.6283138372138,36.33744639713345],[138.6236629581789,36.38395518748192],[138.61482628810273,36.400284938698945],[138.60097700378566,36.411679591839714],[138.5837687516265,36.416898912554814],[138.56904096906544,36.41839752932245],[138.55415815597405,36.41757070612323],[138.54051557813142,36.41410838549365],[138.5141089206901,36.40434153943053],[138.4992261093974,36.40230032030357],[138.48170779797653,36.403359687499574],[138.46413781061142,36.39811452926213],[138.450650263299,36.397571926003565],[138.43840294763788,36.400284938698945],[138.40858564730974,36.4186817492633],[138.38889692555267,36.43452057496461],[138.38062869715662,36.44847321206913],[138.37680464132114,36.46782603614264],[138.37897505075796,36.48314809790642],[138.38378095942375,36.502733465976604],[138.39897382997822,36.54552155237775],[138.40470991373155,36.57037791620789],[138.41132449842684,36.58076487899589],[138.41912763882942,36.59084178342155],[138.42408857622678,36.59929087987015],[138.4278609561182,36.60794668189382],[138.4306514831793,36.61812693910696],[138.43654259656353,36.62543915489309],[138.44692955935164,36.63091685622791],[138.4842916203619,36.63848745443241],[138.49390343589482,36.645773830897525],[138.4988643741915,36.6561091168422],[138.49674563979943,36.671069444299405],[138.4992261093974,36.68205068629007],[138.50744266184927,36.68887197476184],[138.51829471173153,36.69251516434332],[138.54185916616763,36.69812205688734],[138.57973799021602,36.701584378416385],[138.60345747338363,36.70654531491434],[138.61358605375335,36.71264313387354],[138.6295540706638,36.71822418889522],[138.6609216664017,36.72416697822342],[138.67952518074247,36.73065237081019],[138.72267500234943,36.74917837258383],[138.74401736870658,36.7474213733976],[138.76902876216764,36.7501602245147],[138.7941435084162,36.757808336185775],[138.8081478205654,36.76783356376791],[138.81419396358052,36.77902151133364],[138.8224621928759,36.80359365522304],[138.83672488834287,36.81082835484463],[138.89010664310706,36.82666718234461],[138.90328413295634,36.83627899787743],[138.91057051032084,36.84322947845766],[138.91460127173133,36.86932607753644],[138.91708174042992,36.878472805075916],[138.92514326415034,36.886120916746904],[138.95868126842578,36.894440822885684],[138.96472741144083,36.90167552340668],[138.9639522650849,36.91345775017504],[138.9596114444126,36.92717784328289],[138.9605416203995,36.95735687881685],[138.9651924994343,36.96740794482079],[138.97397749176776,36.97198131038917],[139.03361209512207,36.98699331289106],[139.0539726104476,36.99872386281601],[139.05660810787788,37.00099762593965],[139.06311933798708,37.009059150559324],[139.0722660673252,37.02660329770407],[139.0800175308844,37.03657685024143],[139.0919547872835,37.0392381860934],[139.10451216040786,37.03556915898946],[139.11231530170977,37.028928738570414],[139.11634606312037,37.02461375631981],[139.1245626155723,37.01345164627642],[139.1292134946071,37.00818065051658],[139.13603478397812,37.00363312426927],[139.14177086773134,37.00073924442063],[139.1431661317116,37.000170802740314],[139.15138268416354,36.99489980698047],[139.15649865119178,36.98828522408385],[139.16755740844758,36.96022492114315],[139.1778926943923,36.95410126376234],[139.19019168509823,36.95193085432544],[139.20073367661786,36.95097483991691],[139.21458296093488,36.945652167313625]]]}}]}
\ No newline at end of file
diff --git a/viz-lib/src/visualizations/choropleth/maps/usa-albers.geo.json b/viz-lib/src/visualizations/choropleth/maps/usa-albers.geo.json
new file mode 100644
index 000000000..2d3d13a36
--- /dev/null
+++ b/viz-lib/src/visualizations/choropleth/maps/usa-albers.geo.json
@@ -0,0 +1 @@
+{"type":"FeatureCollection","features":[{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-37.234577658947664,42.42305144937504],[-38.784869254483475,42.52617515068762],[-40.821491912220374,42.66703942418085],[-43.216763290047105,42.839625066021696],[-45.56072716424567,43.01233522835387],[-46.538175226511676,43.08955633160228],[-46.6177589120615,43.05738064153352],[-48.23345722196269,43.183261000037284],[-50.109743107180634,43.340412258518924],[-52.40725562614251,43.540504349825184],[-52.65069038701232,43.57951142612157],[-54.47932958715376,43.74507991483814],[-55.73300624460669,43.852502825925285],[-56.9654127029659,43.968087215455974],[-59.47341198213282,44.19242807378208],[-62.38038055042575,44.47219881571612],[-62.48386084323597,44.51548585059443],[-65.71647001771628,44.82048411587307],[-67.5048813366632,45.019192915399955],[-67.95841571959816,45.027894457441185],[-68.76653618898702,45.13675348007],[-68.97418089510765,45.124516625112186],[-70.4811571129134,45.28082894466711],[-70.86627676112258,45.3771927038873],[-72.21237114457928,45.5183957061764],[-72.37254577993053,44.849779228508325],[-72.63669976978649,43.626570796806],[-72.77560308200106,42.84692105176968],[-73.28828807352137,40.45063917558032],[-73.40151502879577,39.84505711229115],[-73.87439037819183,37.50407454855722],[-74.13631972475936,36.1576828777831],[-74.44256184642381,34.59230711509369],[-74.72989914360193,33.082599456695036],[-75.02552976760673,31.61537016081338],[-75.55878313374993,28.718537400695144],[-76.12242569123185,25.550444220481076],[-76.28398527909648,24.658013578848355],[-76.69636591983853,22.29343437643702],[-73.81972542251606,21.854014498111205],[-72.43169180677559,21.66220935240622],[-71.20716311425856,21.50792059068772],[-68.75892383687957,21.179028575911232],[-67.21012892403772,20.99168531302167],[-66.14937212144588,20.85133770303588],[-63.37771496347499,20.4930575128233],[-61.551479664287534,20.275157217139913],[-60.8367305258635,20.20016346781668],[-59.26929550047583,20.01429319404913],[-56.56858251529825,19.711234146408312],[-55.305687574094705,19.575618365847927],[-53.30418577750853,19.351015399427133],[-52.31716901737298,19.24645572814525],[-51.65431238331545,19.15696277903088],[-50.3124971612377,19.00736048014103],[-48.53497843202123,18.830570914072386],[-46.48869548711621,18.643306715049064],[-43.90485516831376,18.408579862527656],[-42.681102830587875,18.324642497628123],[-39.637481438049264,18.070139517390814],[-39.39076578897901,20.750077180286173],[-39.27587610992219,22.04539643209445],[-39.0789588593283,24.183827365674798],[-38.92487776386826,25.8043948932116],[-38.725341846856516,27.930908990784204],[-38.62525963784572,28.940691393061947],[-38.42089975162439,31.046166356157094],[-38.1776121869848,33.557716725082756],[-37.982732639546064,35.464426137922366],[-37.823232677634316,36.95800419534266],[-37.67532564637129,38.3695839830172],[-37.51612977447475,39.848442779957004],[-37.29964610900672,41.77605794596337],[-37.234577658947664,42.42305144937504]]]},"properties":{"name":"Wyoming","ns_code":"01779807","geoid":"56","usps_abbrev":"WY","fips_code":"56"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[86.0203417031575,20.26334600887488],[86.3576828522193,18.32655101657395],[86.89369984619013,15.206710156230184],[87.0892439286871,14.04077807509085],[90.1925781747983,14.539213121281538],[92.67748223760837,14.95807147531828],[94.98246814466799,15.366730831821236],[97.23264519825273,15.762965166709657],[98.73118402790978,16.028249449454353],[100.94729202537096,16.4319416473696],[103.22721468466341,16.840284606182554],[105.95618524632485,17.361106714327057],[108.48955891895352,17.86618255147349],[110.50741534163748,18.26920992772743],[112.34975158979492,18.650546356829768],[112.42844151920987,18.666657043059057],[112.48155272207383,18.91447266458286],[112.61292384595062,19.179403594401926],[112.78408256181218,19.37837366103872],[112.97736474959864,19.52229975310984],[113.3624134230362,19.674483799978663],[113.81816964895312,19.697833632565867],[114.21033256534885,19.588752782427065],[114.58593025771071,19.993365950532837],[114.89434386354408,20.057925048777648],[115.14415392161564,20.196292861405333],[115.26849250496733,20.34303913198919],[115.54483560748544,20.47650441955551],[115.55632026138787,20.639118897667363],[115.46054575482466,20.87786683943845],[115.52077468855103,20.991657909164207],[115.7328847126472,21.123117949045692],[115.833389168443,21.363429550769293],[115.9958939714613,21.46852661578317],[116.33366000659103,21.86505327977783],[116.7033770681652,22.06205575074993],[116.81842834159809,22.35097117727565],[117.02398570346605,22.370275085728114],[117.31963881777467,22.608556332272556],[117.30753352264205,22.70353262285802],[117.09999635255255,22.8266340606484],[116.96848532124822,22.998303400779],[116.53271748696623,23.151824014299617],[116.32546868724116,23.41173111710756],[115.88164717803328,23.609448351176596],[115.6394943860357,23.970012991151847],[115.47224516996847,24.013635809187974],[115.29233745699943,23.939193498348875],[115.11262780655908,24.016437626040386],[115.00755539825691,24.226893969462633],[115.01128353747316,24.3878052592151],[114.88664279725484,24.774575575199584],[114.67958892112331,24.905915485249754],[114.48226113009443,24.92120748603816],[114.30123990917106,24.809420774284337],[114.07351902104267,25.09900611363453],[114.02418104697068,25.31976241264672],[114.10642499437441,25.486398410292036],[113.93998181363963,25.58423452211511],[113.98462544637415,25.873063640049985],[113.88470336921932,25.97225878472674],[113.97433863518815,26.163071100443045],[114.15062318384118,26.170957171786206],[114.28316138773887,26.313119427628692],[114.42404578929323,26.71890916575502],[114.43990498793418,26.88869284694525],[113.98089511138157,27.317979291218435],[113.85444823060385,27.542018903386335],[114.03565067072951,27.734127350004282],[114.32385717444805,27.95272109693584],[114.34896809991949,28.131464269144356],[114.48660952538015,28.24094721803975],[114.44271391921411,28.42090216805526],[114.70248790905828,28.665911434985166],[114.84810740899236,28.970455127072242],[114.90369026318061,29.23698348118835],[114.8697965465033,29.413286155187475],[114.94967687349475,29.674189641624427],[115.18496969476226,29.95918116546346],[115.2416899437473,30.102906270853417],[115.53818983339688,30.238673686360286],[115.39065866813282,30.415823281801103],[115.10661556166956,30.573752082310218],[114.92188308944938,30.532761480762275],[114.79505392688901,30.636898530580794],[114.39875402862,30.52921920559912],[114.24617760022508,30.716851768262185],[114.05988498591898,30.75110139513145],[113.85938334206308,30.689526210484843],[113.78298775694043,30.85705237681091],[113.56162890587882,30.968695314484556],[113.49144629138371,31.14702205605463],[113.18093670686518,31.353109888234357],[113.31862431591581,31.45654964098802],[113.1640226659617,31.868516216175674],[113.0620858808108,32.244086907853486],[112.9138356572456,32.33963855822754],[112.7617313713734,32.32760503664408],[112.8001771981824,32.567404750206464],[112.64082552565445,32.606606957725646],[112.60275831551368,32.728377886805966],[112.10039164330409,32.79694821780689],[112.01815527266488,32.704743344412016],[111.72677993855497,32.83543897962435],[111.60650019254712,33.131367044291885],[111.4300247320815,33.16085667411981],[111.09879171388876,33.4098811972223],[109.13358306976,33.04089404776504],[107.89233212508255,32.82402271013328],[105.51011370631115,32.39836914917245],[103.49769983079707,32.067773152687224],[101.99704816222652,31.79253814785182],[100.04243581555562,31.465181245766505],[98.64271619734217,31.221081257463425],[96.84106600538847,30.93715273609976],[96.08556336969,30.80494435603086],[94.40052305705753,30.53970502702343],[92.96374865304895,30.297536192707188],[92.28116997921677,30.20042001259096],[89.86561558220373,29.822187762767697],[88.36735288309217,29.599137575901754],[87.90140459009446,31.886693144972256],[87.7300570204462,32.73002326025765],[86.2392968432793,31.763717443469293],[84.04775290055217,31.03539069631209],[84.46356322924458,28.85786607583704],[85.0444936047889,25.71626757782572],[85.55168732788741,22.920211877217444],[86.0203417031575,20.26334600887488]]]},"properties":{"name":"Pennsylvania","ns_code":"01779798","geoid":"42","usps_abbrev":"PA","fips_code":"42"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[64.46206799465298,6.496961030298087],[64.64592560618182,6.606695784008606],[64.80633040235348,6.840988125885624],[64.99118456090999,6.78358754433464],[65.17616693833833,6.564745365028389],[65.39034458960228,6.513383699916217],[65.50853889167,6.4122794049185785],[65.81492657679011,6.482701231871937],[65.91970361143774,6.619852436268781],[66.15508719583768,6.61321494282005],[66.41508190832232,6.8451335556982045],[66.56056678552913,6.714407787697023],[66.62369401008276,6.418295427073123],[66.73242858691985,6.346631939835574],[67.01976960764912,6.342369318915685],[67.29652347778972,6.196506491784181],[67.50194946256157,5.759523621104794],[67.84261916445017,5.36001133151638],[67.92159840963224,4.900085331597385],[68.03296937064961,4.7649569383932455],[68.35123009001207,4.726732915373601],[68.84242810328963,4.60987361669178],[68.98548859904783,4.628920610519897],[69.3375482133378,4.795542039709238],[70.00637124816502,4.662055377896051],[70.14430106608431,4.424613580389986],[70.47534959762376,4.283278870194467],[70.59068080724636,4.003156958842346],[70.85421728668638,3.9736160552919637],[71.17306180304782,3.8662239827897453],[71.29576750936221,3.958568603523413],[71.31711618691678,4.202985961628573],[71.43224310071408,4.3212738789560765],[71.91052725395694,4.517401728610043],[72.22428625143797,4.35874086165155],[72.73241572572621,4.327158591738465],[73.02844234885508,4.193050948001591],[73.10509980746232,4.005155395598175],[73.28287370483811,3.940782672632556],[73.48790224311638,4.1884646013526785],[73.73890455887198,4.135467861377105],[73.99184450260657,4.198997945965315],[74.08881365318514,4.293662480716848],[74.17413149668951,4.593930260222615],[74.42730292826704,4.756048679416471],[74.58446490122506,5.053484348152193],[74.88708860860315,5.0942375473471255],[75.04565878914997,5.243152934822119],[75.26467207358812,5.354524698109538],[75.39410006021647,5.304526354846226],[75.43409479810408,4.930682930774339],[75.59257705983369,4.611655470896041],[75.69486852627378,4.250532370458052],[75.86133986742134,4.111952932984528],[76.05484144310795,4.040159208891868],[76.39971280083411,4.077195227111696],[76.56336488821118,3.9955741359172494],[76.85909717228465,3.673813116165067],[77.11457246558182,3.5520044022090453],[77.26022528545836,3.2085467658203735],[77.39696573391997,3.1067565190891004],[77.58387618422806,3.126209190092612],[78.27550625057162,3.480806274335099],[78.36353128048276,3.4572049159510616],[78.70819830129304,3.615258480727081],[78.76796845526846,3.985981670863565],[78.74479019499566,4.536143516970425],[78.84429841722034,4.695659762532754],[79.12175515325677,4.706220089044961],[79.33307077767876,4.798673935094019],[79.35659967510733,4.987791072464702],[79.1960293807988,5.363116942360239],[79.21223259414364,5.571268929439613],[79.06420817316067,5.913854432755951],[78.91737601565035,6.0961567947178],[79.06341999977161,6.324202301016678],[79.28187395732323,6.544907347231779],[79.22851364519316,6.9434060788350305],[79.29410014127322,7.025949311584218],[79.43575181960112,7.531168903044372],[79.62309079929533,7.693519252486719],[79.66933736028484,7.915871548956626],[79.83594130169178,7.980133078640402],[80.0078315703817,7.752710571957372],[80.27549152796642,7.7439084517263925],[80.50572092447621,7.417133592435823],[80.40263511236414,7.139219715013213],[80.6263311214322,6.974411057645834],[80.82676066397269,7.2028594075589405],[80.8201995731397,7.399377641746118],[80.96595729399431,7.5468946980576295],[81.14272788895197,7.429023024310303],[81.2952323846153,7.504942621334923],[81.12193951631471,7.705648954275659],[81.16325549485761,8.075036567240168],[80.8528808017183,8.360351496959382],[81.13945890606382,8.598274427441543],[81.17880106991406,8.769033844567373],[81.03263392074864,9.219980424417285],[81.15675069348917,9.518125252170096],[81.32930174643545,9.63039402975487],[81.2702849626114,9.82396666006472],[81.35370287030594,9.96582566633694],[81.95903074337154,10.071075872469708],[81.93242474072284,10.51577519814958],[82.40278190552384,11.091311905102014],[82.69294805945646,10.983810736577935],[82.86161537091422,10.689970844457719],[83.07193300698819,10.745996673921104],[83.4410715436981,11.085322933731263],[83.73993055854814,11.178853926618652],[83.83989932487786,11.46942896491929],[84.0980604601108,11.606354462913146],[84.26708037671752,11.996414089788939],[84.57264802543123,12.444466286258969],[84.98916017293159,12.953771755280922],[85.26697726386686,13.039002898331539],[85.30425878909529,13.271421640743881],[85.27011135769878,13.50634977024208],[85.43232554155162,13.727007053422183],[85.15998255073659,14.035023998874323],[85.3551189933532,14.313101030559633],[85.30108014883443,14.608812068704374],[85.4570058529785,14.788972465349172],[85.32097179449366,15.06305416808998],[85.37961332694384,15.171155490141043],[85.59818075129603,15.160791085044645],[85.51704402781576,15.378522197095213],[85.6176186208716,15.567408953133096],[85.56323358306324,15.826305108751882],[85.58172942467785,16.077470390481672],[85.5025370437139,16.28160865019699],[85.63383496672074,16.48548878964528],[85.59271068727955,16.847513049532846],[85.73827509208398,17.18760390565185],[85.7383087887109,17.397344822869055],[85.90919223223396,17.646110040584944],[85.96471685407607,18.042789962439887],[85.8612530061011,18.23464392961925],[85.86354646343358,18.38654942074748],[85.70478217325606,18.528707553270102],[85.7998409768074,18.60628250652424],[85.76593665990532,18.78548234131167],[85.81399123356661,19.08206063047437],[85.65453775840608,19.26860463645483],[85.56500083930595,19.486910376496308],[85.32989400454318,19.6858800083327],[85.3103149864385,19.825261813458084],[85.47282276757308,20.05169987625275],[85.70287244906785,20.056515597999976],[86.0203417031575,20.26334600887488],[85.55168732788741,22.920211877217444],[85.0444936047889,25.71626757782572],[84.46356322924458,28.85786607583704],[84.04775290055217,31.03539069631209],[81.64985593591807,30.233953918179786],[80.39467354117818,29.835954651263744],[79.25354596799521,28.921574664621325],[78.36359428309183,28.187041926892874],[78.24517580679743,28.17121470717409],[76.87585056320127,27.11245357647014],[74.98836266748613,25.64680605537213],[73.5082357676484,25.455129466236592],[71.29187179868462,26.40408325411446],[70.97395349209883,26.982017074388303],[69.60446643077707,25.348164558723276],[68.07424525413165,25.10989000970587],[65.55589907149322,24.725286921036016],[64.07441029768982,24.51176026584786],[62.34878730805479,24.272303645536002],[62.71681757976824,21.506162424885872],[62.986553126148976,19.39005762118276],[63.2692092386263,17.161307055451946],[63.55954251603414,14.718873077449544],[63.758149871900734,12.77329354099837],[63.89578134364314,11.501048129000212],[64.17054497401708,9.143401607471407],[64.33903817453199,7.532787558595136],[64.46206799465298,6.496961030298087]]]},"properties":{"name":"Ohio","ns_code":"01085497","geoid":"39","usps_abbrev":"OH","fips_code":"39"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-70.06615646820839,-7.199983140779321],[-70.41696558431377,-9.6984640341206],[-70.68518534223044,-11.590768436308707],[-70.9382265162427,-13.388186587584192],[-71.29605605667153,-15.869301677173693],[-71.52733612066665,-17.466140110725757],[-71.7941053760312,-19.316171511465754],[-72.0890521622258,-21.327039620607557],[-72.5130751974101,-24.145700147117658],[-72.85718263319062,-26.375565755857558],[-73.28603790761778,-29.108330784372782],[-73.64139271229433,-31.35232237658829],[-73.94859456101388,-33.19871589178014],[-74.23162123045276,-34.909192966754944],[-74.57934636526043,-36.9299058055318],[-74.8431870617263,-38.422973340792886],[-75.20584300687074,-40.41503614082921],[-75.66672067756258,-42.87870827077865],[-74.25965318454041,-43.021040723792304],[-72.36041798887828,-43.20084707158556],[-70.60259856553182,-43.36805789320576],[-70.18846737172152,-40.99892667135732],[-68.19547843309225,-41.19033157318218],[-65.47932844827046,-41.441545526643814],[-62.95148042814089,-41.66619301729478],[-60.11877282891669,-41.90839834598665],[-60.21299139256785,-41.77086392694232],[-60.391074635530565,-41.73932804647357],[-60.6983005555485,-41.41241564196411],[-60.731545970681054,-41.25462960466579],[-60.560079919540605,-41.04568132475225],[-60.628605077616854,-40.79825282043941],[-60.486531990786126,-40.7002276832302],[-57.53493890768654,-40.93432655062959],[-55.17545508789623,-41.125723278127246],[-53.367431728254395,-41.26867749734346],[-50.7976674670213,-41.457111895520065],[-47.59593062478979,-41.679483766598096],[-45.380024749776325,-41.82453533742719],[-43.28841465475426,-41.953560297268346],[-41.05067528277907,-42.085377021019234],[-39.183416535501486,-42.18978778747151],[-39.06499942679885,-40.97873789125463],[-38.91890577599681,-39.48755482895051],[-38.785012211063425,-38.067669528922025],[-38.65224228164232,-36.67179220592704],[-38.31871434071027,-33.71004562798746],[-38.17054164269268,-32.32517493592396],[-38.01262163867694,-30.881984496177594],[-37.83021059438795,-28.779162187074043],[-37.59656998612709,-26.060917930965182],[-37.39917350316916,-23.65205673675902],[-37.24548351756329,-21.769812299292997],[-37.119183063057974,-20.224301378073704],[-36.91456613305394,-17.678785956695073],[-36.65416668109671,-14.224725853685417],[-36.43045257757133,-14.240447606823222],[-36.16422165377581,-10.736986504068158],[-38.96509412679895,-10.53308834404615],[-40.75368422510607,-10.40416716489011],[-43.68534476498087,-10.185462161406354],[-45.4061527763659,-10.034806046172159],[-47.565332986345396,-9.841132605054584],[-48.648637511446495,-9.72092100147679],[-51.131652327134695,-9.471803807439555],[-54.14510436927682,-9.172408601251224],[-56.33192226014067,-8.94381983253033],[-57.89451012470379,-8.77233624792452],[-57.93017929093201,-8.712987944836321],[-59.21903468185595,-8.565909577948586],[-61.21849623307697,-8.32998402965444],[-62.70294771651034,-8.149849313805525],[-65.61542294127172,-7.791159036737113],[-69.11663339287611,-7.330990650637876],[-70.06615646820839,-7.199983140779321]]]},"properties":{"name":"New Mexico","ns_code":"00897535","geoid":"35","usps_abbrev":"NM","fips_code":"35"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[118.61556646702499,10.932796329643827],[117.28892724536449,10.638673039837714],[116.28857264095097,10.430831770715029],[114.78134545014746,10.16153430152521],[114.23519404399333,12.070079948009354],[113.46694209900181,14.730132793450496],[113.01207230094438,16.28960854584161],[112.4627006754848,18.156026599618144],[112.34975158979492,18.650546356829768],[110.50741534163748,18.26920992772743],[108.48955891895352,17.86618255147349],[105.95618524632485,17.361106714327057],[103.22721468466341,16.840284606182554],[100.94729202537096,16.4319416473696],[98.73118402790978,16.028249449454353],[97.23264519825273,15.762965166709657],[94.98246814466799,15.366730831821236],[92.67748223760837,14.95807147531828],[92.90152752652904,13.654655399490924],[92.88273864707881,13.65144966384187],[93.26409869828908,11.391671411512743],[93.35890840852167,11.392495726190258],[93.57572575785841,11.595460617542976],[93.57950872697701,11.679273624129976],[93.90872113038101,12.115022647641243],[94.35467454769856,12.518951354838338],[94.31534184342591,12.643178471164024],[94.53356586050332,12.737826469704876],[95.02295724902235,13.443643487441271],[95.05763283574585,13.60646669732645],[95.25250011129002,13.644687905047013],[95.81768049025978,13.509207828753857],[95.88179962038565,13.848945352947316],[95.97607751532567,13.865824355578205],[96.29610529216453,14.495831870172832],[96.3311902987459,14.651101559622726],[96.4664696937268,14.834415457738492],[96.9111130336593,14.579040978560169],[97.31862494346862,14.446942450663377],[97.49900063696671,14.512039769206588],[97.81336026710756,14.427561427507927],[98.01407061026242,14.502164393732615],[98.33805948764545,14.501602958873002],[98.57085511814402,14.778422821158474],[98.36857104420092,14.890680378560528],[98.36468765497126,15.037362656058875],[98.58289757107053,14.986099117946777],[98.62547566908785,15.075842096191092],[98.43155457562918,15.283412376253954],[98.73092326589223,15.246762770128532],[98.78173448756891,15.460577177966648],[99.28497959123233,15.398575383274762],[99.3231871447232,15.554002956654282],[99.69066807364987,16.0135123272331],[100.06835609658876,15.98249627139758],[100.48650937987419,15.74625259841723],[100.69872070376707,15.534329906613175],[100.94539361241411,15.632031419811588],[101.3329572526846,15.623320520288347],[101.33259602777174,15.752858799000515],[101.59603748930043,15.731855724796016],[101.6602161966444,15.470174793749905],[101.45820612738939,15.410741292759333],[101.59603037242569,15.084213781594961],[101.80638225554546,14.97320920474158],[101.97220525428978,14.978664790026814],[102.01149778405231,14.751106669750895],[102.11376650336979,14.575491719086282],[102.2952866238383,14.574337596722664],[102.43599934025131,14.368304879957075],[102.3609298375404,14.267802876262053],[102.40817331438667,13.955949457763097],[102.61980388839608,13.906021594134234],[102.85195172971495,13.971644326188752],[103.04188544235926,13.896497218025093],[103.34854898444803,13.903809242564225],[103.44924718779949,13.957582019946177],[103.65622653354558,13.703633358692551],[103.98417499624469,13.629353967900819],[104.1586527947449,13.512474715193989],[104.08419125701731,13.233427759504695],[103.95169115562369,13.16123559173858],[103.89334227214505,12.904001535121626],[103.9788795583627,12.72589643248786],[104.19984253622071,12.667473167947952],[104.35269871072487,12.475921282043297],[104.76735822375218,12.465739464204814],[105.0175638232132,12.519051529224463],[105.58649122524825,12.337500818983386],[105.55752398012893,12.187190189758573],[105.64329033725602,12.064808452571778],[105.91959900414291,12.004873330505683],[106.20849115641765,12.03577091393761],[106.38580292615627,11.863649052603156],[106.7226389247445,12.369760716237415],[107.57852947899858,11.801574062023647],[107.02450930933394,10.962213468970118],[107.10555832374921,10.449941629139829],[106.91377004148188,10.335655864502204],[106.72432058583891,10.134171508578872],[106.70447042222509,9.855101870874512],[106.75802681570752,9.775026681914209],[106.38098125190368,9.580670824623118],[106.18498372412752,9.362784532874336],[106.17692253658599,9.142806962729404],[105.96155155630765,8.4552122797489],[106.0066345139295,8.179100664374609],[106.17493884982565,7.776248319513229],[106.33544775141952,7.572001970673087],[106.61401146600438,7.552027785342525],[106.98629573448682,7.722731291221307],[107.09319283008956,7.905609080569285],[107.37053886973963,7.960236779041609],[107.50704304545368,8.212217099466644],[107.72065366460163,8.132241548419186],[107.8116028498248,7.7896504098989094],[107.7549448201775,7.627205271568506],[107.9603678037902,7.439302838248477],[108.20592913913912,7.319514231146407],[108.34658141031935,6.993806006983769],[108.53957556350498,6.968444504341259],[108.8144942263293,6.820315367767952],[109.00759593996705,6.800503754111768],[109.21310937642242,6.880729891049097],[109.76423944970331,6.9381762491140595],[110.27534463995715,6.949119177250992],[110.41368495631839,6.67352154417733],[110.79292178299136,6.508536736465467],[110.96392881820609,6.201334789340535],[111.26497024178423,6.164431845021574],[111.61778313716428,5.894552790988313],[112.05400179117531,5.8313624280248995],[112.55480126611815,5.646505444821286],[112.71322020741007,5.547140766699677],[113.60353019997696,6.217904783329489],[113.92333528821048,6.2850607463882975],[114.20483340053009,6.291074745864971],[114.21520455624739,6.005390282154803],[115.03224053131896,6.219182814020738],[115.2035100220737,6.469764396734147],[115.56479776441456,6.650970782676073],[115.81570007043307,6.643084432114052],[115.78208881922629,6.78039113526925],[115.86945854147275,6.999974523535072],[117.85676156328286,7.671075057818993],[118.3067932714886,7.778400879750187],[118.43017000233124,8.288457473434317],[118.47982180702137,8.995977095782909],[118.57711373399547,9.728707547808403],[118.65297237335058,9.91093461143703],[118.66978200987265,10.364580916998682],[118.61556646702499,10.932796329643827]]]},"properties":{"name":"Maryland","ns_code":"01714934","geoid":"24","usps_abbrev":"MD","fips_code":"24"}},{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[131.4861100240046,32.68810605048356],[131.4395449685675,32.53192636206991],[131.46149234361283,32.31345047088596],[131.5712463917471,32.14493197354582],[131.9196976739194,32.028057356406435],[132.33986248359287,32.15753877173856],[132.48891936073326,32.32908947071526],[132.4846753077371,32.59831826586743],[132.36946232229883,32.73889932504556],[132.27267242549252,33.00589352785216],[132.0922036456285,33.157154486476465],[131.8391034117813,33.24120409441672],[131.53116347484922,33.04969000764511],[131.4861100240046,32.68810605048356]]],[[[133.9933694062156,34.56384024033656],[133.71219476376652,34.87794423648536],[133.47009238906404,35.43926711892609],[133.4040807229222,35.49478515177352],[133.3422904506853,35.81422141069382],[132.99269650816493,35.82767331505208],[132.5160374603242,36.18793688400782],[132.1305324599862,36.27128638186928],[131.9450790801495,36.490836301138984],[131.94012025331722,36.72372002114902],[131.8496066738795,36.91931555016701],[131.64007796643645,36.8439469635909],[131.410467021794,37.53913536682372],[129.30327410471773,37.03541946101093],[129.44964621865003,36.60799814422786],[130.0017956483847,35.06950927592851],[130.3812406841101,33.684456639040995],[130.1648509582426,33.59971196562281],[130.35340574319244,33.2172399542754],[130.24804048899696,33.059689266235935],[130.05319408964203,33.076378641754495],[130.0212371708676,32.908748720381695],[130.83769658327955,32.33407052452063],[130.6755183267606,32.849822676499784],[130.9367688815405,32.92749711547972],[131.25652753960867,33.082524070874115],[131.6989402644958,33.377776329876056],[132.13736042980818,33.38971165229837],[132.69735956210513,33.7093104945815],[133.26523609309172,34.07358864115884],[133.8456400826091,34.409469766286826],[133.9933694062156,34.56384024033656]]]]},"properties":{"name":"Rhode Island","ns_code":"01219835","geoid":"44","usps_abbrev":"RI","fips_code":"44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-133.8503386459278,59.61639161524287],[-133.85820848342595,59.49590612328396],[-133.80076218718065,59.3881383678777],[-133.57435949502562,59.28131623073686],[-133.50467121372589,59.01255995193285],[-133.51272414060787,58.882154904395605],[-133.6538044000962,58.62626542231719],[-134.02607090827192,58.545528698465375],[-134.21106289366983,58.42050349463959],[-134.2201170408458,58.35193082269085],[-134.08001696136316,58.228809794811035],[-134.14290431856182,58.046324686169584],[-134.28039137847418,57.96930247853839],[-134.46210842147323,57.78578514908697],[-134.4607735047947,57.69330602255175],[-134.29092238121893,57.540943332749904],[-134.47656231700105,57.26556268235969],[-134.57782860144536,57.202919620631626],[-134.71329288602095,57.02522725043807],[-134.71969652037646,56.92409256197777],[-134.89525550523197,56.85691981351788],[-135.046796514151,56.69155152796415],[-135.07304925859034,56.59114057581815],[-135.00370061562998,56.49747628480932],[-135.11839337634635,56.36008852468374],[-135.36743211011745,56.22738655516873],[-135.40289844626716,56.13234641691137],[-135.322585197493,56.0173730126854],[-135.34289183551783,55.91920848633979],[-135.56433189090637,55.69635937801208],[-135.5508766841178,55.58092812039268],[-135.65636930414857,55.433823516771426],[-135.92170633939804,55.24528561630914],[-136.11983725414578,55.03184765487276],[-136.11649955006285,54.92631517128027],[-136.32536583548094,54.64778062490435],[-136.54718230011213,54.41256102354145],[-136.67761272214352,54.361360811348696],[-136.89991591686695,54.05088810914824],[-136.98087514488478,53.807708226826655],[-137.14199478011287,53.6274630836958],[-137.11776920322473,53.52454998450139],[-137.2640107417171,53.381573488518036],[-137.2232113685218,53.28607409229572],[-137.50716048771625,53.02300265062874],[-137.562502126555,52.81734810069872],[-137.79989762273775,52.451960243803114],[-138.09762554682646,52.11274081405611],[-138.36427652541443,51.58839264738756],[-138.45621877370206,51.51890532449278],[-138.5350243001318,51.30952725216313],[-138.80497385007317,50.90252747207282],[-139.35176077176206,50.10982730308441],[-139.70910039825415,49.651782391953304],[-139.86585033346321,49.54290315720891],[-139.89258283951946,49.429777340623886],[-140.10456451064587,49.16703778606352],[-140.59066208955866,48.66932957188749],[-140.90120862381323,48.423951639597604],[-141.1606533808902,48.392564900548365],[-141.53313760484636,48.186948561427236],[-141.60912188515047,47.99812039165499],[-141.55659663752022,47.88504980641215],[-141.67792013632388,47.79567569902882],[-141.74837067738244,47.58204634799522],[-141.91583146323623,47.40975996174591],[-142.07030383571424,47.360465915939734],[-142.20826062610087,47.181411096985265],[-142.2269659188568,47.00856939496967],[-142.49659652233117,46.71588242924857],[-142.86771902378092,46.39566341226914],[-143.14705921267102,46.30184552317174],[-143.357945276409,46.18613815371246],[-143.79774553650955,45.87491797058048],[-143.86526862585234,45.72451266135493],[-143.82379623014182,45.598128984454284],[-143.65342519363827,45.48693983389274],[-143.3608680311438,45.440037403924684],[-143.23439186456338,45.225051836715146],[-143.3002589646115,45.03098418560992],[-143.19322138999405,44.87499704430039],[-143.02931843028063,44.81334993458643],[-143.1449799334055,44.621022720105515],[-143.11910029080852,44.503356040511534],[-143.2627457187185,44.48070858891235],[-143.47421369678472,44.35661288973934],[-143.6419865299713,44.33333124207116],[-143.78719726402477,44.246952831200005],[-143.8506107652136,44.07650309237468],[-143.76151728174634,43.86639793449826],[-143.59557008410977,43.76259553236196],[-143.67130335699517,43.67115523041739],[-143.68007474797645,43.4669574515066],[-143.8000452045957,43.233585232353626],[-143.88922249603928,42.77592667909607],[-143.78177903039983,42.53654926351427],[-143.84628653661642,42.36829832464993],[-143.87346477358375,41.997021745398825],[-143.7748764725037,41.77942498753916],[-143.6076597113233,41.56756840099671],[-142.4611204188709,41.295477701828375],[-140.23021105890652,40.77831344005613],[-140.05691335427923,40.76572425967242],[-139.0969448534485,40.55893143592608],[-138.6609792019808,40.4462493127599],[-137.62262820999211,40.270834995699744],[-137.12689704655835,40.1245999042852],[-136.3623234269235,39.951562193692624],[-135.04782212124658,39.672010804335066],[-133.74073824642883,39.41024770038051],[-132.653014473519,39.16119510404131],[-131.83767972922226,38.961069865163005],[-131.0608259078927,38.78668152979424],[-129.6822992376996,38.46147022410515],[-128.50296282223104,38.19501583694355],[-127.41698749832199,37.96051176421868],[-126.96017070981259,37.84735729797708],[-124.9871767849233,37.42802939101513],[-123.17607574590927,37.04791850023876],[-121.6844942768826,36.74731269520441],[-121.10590985297684,36.64534836904613],[-119.51948064483179,36.3092169118485],[-117.65139533915288,35.915283099073854],[-115.03741613716069,35.38380400562876],[-114.03154824508984,35.20686983880594],[-112.47374468845277,34.91073739831384],[-109.54499330436221,34.35179594748848],[-107.01499254564288,33.88682589611573],[-106.46404420226641,33.78026638811077],[-105.87478092560248,35.93645644097883],[-105.1545324548961,38.48082692622877],[-104.6921617607558,40.08372732755261],[-104.30105399909925,41.39720865640458],[-103.61979656954036,43.62926353878937],[-103.61561042528409,43.73824615623293],[-103.30301538936111,43.89980017688626],[-103.22189303587803,44.129443622808296],[-103.12137095499337,44.13200145191199],[-103.00338620127158,44.45502489515333],[-102.82546862415712,44.623885331530225],[-102.97420866281541,44.794643366406284],[-102.93661451640374,44.977842512500246],[-102.69820928179095,45.013837403699775],[-102.42535492595087,45.25148721250877],[-102.42345519130927,45.383663589225854],[-102.56001716755374,45.47703635859386],[-102.71732103215253,45.5049289144849],[-102.68283247813967,45.74473741557345],[-102.95375974158272,45.81911546605488],[-103.10417573634216,45.75188259694662],[-103.34430514928228,46.031574474262435],[-103.48178606578387,45.95247379623876],[-103.62563466229177,45.977012701257124],[-103.82341391563706,46.20877291339343],[-103.60208381061173,46.36003822942989],[-103.76512834538075,46.58178693664673],[-103.76661774417218,46.696326136256204],[-103.58132936949927,46.821330115410376],[-103.53647238091946,47.09756135015471],[-103.40520390237555,47.11867658257322],[-103.26397524479476,47.25107314587208],[-103.043016885453,47.32996334835393],[-103.01605181510736,47.439780228893675],[-102.8868260584878,47.49550584459218],[-102.8173313553911,47.6373603267232],[-102.66614846514551,47.74280670020851],[-102.61667841818345,47.853694677211976],[-102.39732548417328,48.01147082328849],[-102.23537551250205,48.19025137408067],[-102.00159328835987,48.20863981774457],[-101.63455390654505,48.28941128702149],[-101.59271300657448,48.37520081311834],[-101.34893674241998,48.55154108639806],[-101.06751324847971,48.70856197244175],[-100.89629100378279,48.90243473293274],[-100.94501140556109,49.147402915918356],[-100.83736685505268,49.31886443069326],[-100.52836886882972,49.4576329441944],[-100.3478143330297,49.64644448747876],[-100.06149525014901,49.789067262171194],[-99.790828269545,50.20046963810494],[-99.59379917245694,50.33963863116914],[-99.53295748137555,50.513788979317546],[-99.16079383182831,50.82706870572649],[-99.00508976444887,50.8921515332837],[-98.91362005671911,51.01821752020097],[-98.7199203114458,51.08332781583287],[-98.67145286637954,51.26241006201507],[-98.43923014808503,51.43613338372843],[-98.06116547174709,51.63086620374217],[-98.1107380550883,51.854598741904375],[-98.27447080090356,52.05879795486116],[-98.21164919802338,52.24270393227402],[-98.42764197495399,52.471609788781855],[-98.7685494626916,52.53061182406527],[-98.86831457518072,52.71589909271222],[-99.03670384983627,52.763559423652126],[-99.19224283465542,52.74049345960149],[-99.34412523996022,53.02984336899676],[-99.53744474609252,53.22790843557864],[-99.52449807345116,53.39112308053666],[-99.65519411180787,53.58499338642594],[-101.691203591329,53.87127990504971],[-102.37941560477907,53.96033693072191],[-103.52732086629378,54.12519621948708],[-105.9817612815105,54.46445968345878],[-108.59426227063867,54.83187980576948],[-109.65285970941079,54.97637817018781],[-109.79125177413361,54.909244045088414],[-110.43737054220327,54.805259329873344],[-110.78055668840496,54.833317425101704],[-111.05676395917158,54.92387040992788],[-111.38336336352003,54.94234321142187],[-111.6052602764371,54.925441404957596],[-112.02635557843034,54.96830191126389],[-112.22662896903906,54.95068203534847],[-112.39993935305469,54.98549503910587],[-112.59665543746394,55.08498274966601],[-112.8808795520754,55.04283082528548],[-113.19042230943441,54.882120220924996],[-113.70692915921758,54.91008922985628],[-113.84673855409517,54.93887910026438],[-114.38608636701545,54.93634998022849],[-114.67361188527518,54.962905830954696],[-115.24660897778101,54.882056544138436],[-115.61123542291706,54.88559734276033],[-115.77156990824062,54.862099047682854],[-116.03047573944093,54.748089872545464],[-116.39418433179655,54.78198405922647],[-117.01022472268563,54.7823706570807],[-117.39691272592924,54.820595370292246],[-117.50002285414476,54.86001751133606],[-117.6885954438038,55.05075918873896],[-118.0385188401837,55.13541451574395],[-118.35537528474254,55.056934942157824],[-118.88897141877919,55.01322272836178],[-119.2378409957217,55.004477088485636],[-119.4828554453222,54.9209552061232],[-119.69111040966355,55.01025475758482],[-120.38590693802111,55.08132711416142],[-120.68341633007745,54.96597081747248],[-120.93958678014943,54.991759163272576],[-120.97229504164495,55.27054817928192],[-121.28698046540413,55.38559627782858],[-121.49595474081877,55.49310204314805],[-121.82622329232774,55.49375992049335],[-122.1040318858975,55.57234078073915],[-122.2417206172067,55.67501092615321],[-122.39407998112577,55.72236150057828],[-122.90667206011003,55.710849543479945],[-123.08455027182,55.740330129388454],[-123.42618967138792,55.74765202283844],[-123.76785491627473,55.85395637444821],[-124.0619081047129,55.8439500980345],[-124.33388029241551,55.72483157589509],[-124.86635000232852,55.64832095497419],[-125.07422158008288,55.654457113575255],[-125.39137765019946,55.59902176696066],[-125.80657094722989,55.637352204710666],[-125.91813747092297,55.598992048748016],[-126.27003378394186,55.57027739471496],[-126.57291380035855,55.63729795215453],[-126.63388274438591,55.73569302269658],[-126.75328065474334,55.781944972649086],[-127.05781411821225,55.77926232562888],[-127.50851628723443,55.98727378298148],[-128.08495646748935,56.170175568725135],[-128.43329564803875,56.387177586015],[-128.43838820341188,56.483604202493375],[-128.26248158058482,56.67620580550404],[-128.21611034477448,56.85661818570046],[-128.28247045232592,56.986235780373484],[-128.11754727567933,57.19287748416701],[-128.1546766830405,57.379205232086555],[-128.07088508519053,57.55864579906777],[-128.1442373113732,57.64887747695836],[-128.16569467432342,57.785499330742375],[-128.23678108583408,57.86289716690573],[-128.2564023464232,58.07226536102502],[-128.4930400450816,58.19120821410508],[-128.63277003082533,58.325846621324],[-129.06044777755628,58.590962904958424],[-129.29283171213697,58.640831928092545],[-129.9217127775598,58.566673406925126],[-130.3519770320266,58.63887025760216],[-130.5633518385455,58.80712350711431],[-130.4506287012739,58.97314197545696],[-130.61645853153436,59.150348000802964],[-131.15167507577817,59.18171382906721],[-131.438507556662,59.23670100086436],[-131.63991013813737,59.23492408744335],[-131.85607627982253,59.3399499769877],[-132.06021951024687,59.31475072226461],[-132.5436217350538,59.315883888556094],[-132.8130735313798,59.37203631028614],[-132.96557011394586,59.51311558933344],[-133.25962723946873,59.53678584280185],[-133.8503386459278,59.61639161524287]]]},"properties":{"name":"Oregon","ns_code":"01155107","geoid":"41","usps_abbrev":"OR","fips_code":"41"}},{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[]],[[]],[[]]]},"properties":{"name":"Puerto Rico","ns_code":"01779808","geoid":"72","usps_abbrev":"PR","fips_code":"72"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[31.295089013593266,27.103713553000162],[32.52155476900662,27.157648369977238],[33.817156066254555,27.23623740197722],[34.872672187369986,27.27789428285057],[36.36120355580179,27.360233404879427],[38.48718337071383,27.446401710559925],[39.90115985006474,27.523315905967053],[40.88024096510782,27.563380049999616],[41.79131926350792,27.64416347903055],[43.0368092951476,27.727890656163375],[44.64527192640692,27.85150127751966],[46.094012221873825,27.940797548044877],[48.322146643868074,28.12324540306667],[50.17036245745686,28.272522495195947],[49.78538958062279,29.952026531083973],[49.286773535881906,32.13290739541768],[48.91692561252267,33.64485185636286],[48.83621674825784,35.362100129047796],[48.849785474472924,35.73584214408787],[49.004177820789955,37.284631397999334],[49.09629566034854,38.04232376321015],[49.147608325043485,38.17578785493595],[49.6837123359882,40.140891669866754],[49.64587695484697,40.13809888865439],[50.23275586022013,42.23824805045567],[51.02615864677117,43.348438608511515],[51.32885988867803,43.600700277376305],[52.16340765499934,44.23448120604896],[51.99222072868171,44.29509974044662],[49.5013592685482,45.1049356440445],[47.77295834863797,44.991156904066706],[47.48470209481893,44.505341916201935],[46.83780180774498,43.88754472856755],[46.4115107009268,43.65923518491036],[46.30796150580435,42.997736239794285],[45.191957719334155,43.091901200568884],[45.055913811484075,43.270599531291644],[44.778512941090284,43.42198407920589],[44.79567992940876,43.58623765656174],[44.941117167023414,44.05828909577924],[45.113774765007484,44.29048998332916],[45.043732311613965,44.43416157466776],[44.85245435210603,44.52652607332497],[44.5773811944692,44.302406526390264],[44.393764136546935,44.311522229196605],[44.09772598824687,44.262715323998826],[43.91647320303387,44.33002114496851],[44.06356269690392,44.57789724119396],[43.98833184328351,44.700456374667475],[44.21340221742255,44.86595344811973],[44.29172733446243,45.05131402610465],[44.1865919264344,45.27053631307221],[44.31890531477694,45.56680599968289],[44.0428545453019,45.853382295929784],[44.24316163391212,45.92140092621145],[44.06457986277384,46.09640262560865],[43.92621181102633,46.12043214855423],[43.70304286545991,46.29052679206296],[43.285928053117615,46.282662789112806],[43.109209541002876,46.45702818225335],[42.83966315509113,46.36920619102547],[42.61797832862974,46.379889445397104],[42.40829929722763,46.55703556280667],[42.68578615729823,46.81900658276894],[42.525596454084194,46.8532145629638],[42.49942714902919,47.03893657627347],[42.37950049990607,47.03333352326877],[42.09739161667927,47.14640451005606],[41.852028739693,47.12764778468816],[41.719909890606466,47.19932657845954],[41.494366685987345,47.15257583974933],[41.08065169850329,47.301474210971065],[40.87542162942364,47.24308615694371],[40.66084595382664,47.32197579750872],[40.49914850221931,47.289328828979464],[40.43940436277576,47.396141250478614],[40.15585419097405,47.367550039423776],[39.91737994693348,47.219244392403915],[39.70778710053308,47.21575538972853],[39.59443819521896,47.32763213893424],[39.286146858687765,47.37850262996212],[39.082504549827696,47.313579215881816],[38.72788452904937,47.412761397930545],[37.48771800736876,47.8225520216253],[35.615865747462124,48.07607670354151],[33.32826966166799,48.391477980214034],[32.31666429901804,48.534931951492716],[32.31539065970811,48.640946694472156],[32.098777049409215,48.86788397956371],[31.774512751926572,49.282382032823826],[31.54303639493411,49.2797076636006],[31.294249835693943,49.425987896957935],[31.096770224557307,49.43701723176665],[30.881444575106286,49.398326873274925],[30.753345462133645,49.54308311812171],[31.993864356727865,51.644280612952706],[32.51653994158565,52.51347735517689],[32.6914593661213,52.84830092013629],[31.196055531530874,52.83160876694376],[29.295942850893024,52.80560583108209],[27.677328601024563,52.05845971490952],[26.17401552421586,51.351030829823245],[25.321749939675996,50.93888994579757],[24.88483981933787,50.75361399862922],[23.534616701029805,50.20984114160884],[23.026464445947774,50.01244049188273],[22.84111265036028,49.92025395360462],[22.48845306324833,50.11740607791418],[22.254004120099754,50.06700468475312],[22.219582083847467,49.95865656715873],[22.009234864868407,49.96010232247501],[22.07990907749717,49.83790964985987],[21.914094236219544,49.64728351899211],[21.650616327806333,49.64559653245087],[21.517825264401516,49.711284745741324],[21.57774130407355,48.667519612102595],[21.67289354373347,46.91442579726936],[21.47242950743686,46.83624910416229],[21.409531881692356,46.624249084334146],[21.111103243425756,46.66969554510653],[20.954224052637464,46.61145070616144],[20.81442967785834,46.395783574686185],[20.55150959647546,46.44271761167195],[20.43071592285467,46.284122842929875],[20.005149933736654,46.185940821887954],[19.645050449654573,45.96570291549164],[19.396514930918876,45.63937726865175],[19.438869054620966,45.5603781275989],[19.317558169737833,45.322219191497894],[19.196824723546275,45.2188308378387],[18.907552461208276,45.07821379836368],[18.834128041079076,44.62543756863332],[18.86826391024103,44.35701056384629],[19.173412714758495,44.28996672178723],[19.420751723970092,44.33321160593779],[19.66367488568345,44.20055431622517],[19.66724900070536,44.06412877524926],[19.9117507666094,43.812639096692045],[20.08560606920014,43.699958064219715],[20.077968999392972,43.47810141718307],[19.82004486906774,43.23736252648631],[19.84980309176973,43.148126283572694],[19.667483141129534,42.95611118951166],[19.545749977782517,42.88902064644142],[19.614324944588898,42.525738370298185],[19.546614042800005,42.349010687206714],[19.675276408484045,41.94357163953732],[19.394189412195566,41.70800665874334],[19.610725114412837,41.48207051147134],[19.585144240458398,41.21341992223126],[19.6883409535947,41.0284142550249],[19.582391992073003,40.77010122625181],[19.636044565350506,40.5057229632988],[19.44177589089301,40.01284938875452],[19.83684806485278,39.81877742450687],[20.190026663056774,39.54768049351847],[20.41310697043716,39.419266437448265],[20.4154476013018,39.29230560150185],[20.690050796617772,39.22967519557695],[20.846437026952565,39.03474663073056],[21.390950327792172,39.04065846964225],[21.823739612981118,39.00587169433496],[21.980864911348554,38.92915141614688],[22.08984672213719,38.66533760608337],[22.17632974747136,38.57339438444454],[22.49779998121391,38.3741895719447],[22.997566838176596,38.28584329418501],[23.35966179447737,38.18247452092611],[23.441642124888098,38.11396959552893],[23.847353995940544,37.96426904200924],[24.016236705115162,37.83252096920267],[24.250479892848016,37.36981714746444],[24.226464388232632,37.270087039750784],[24.327828310206485,37.07626099859232],[24.6339096498412,36.87899371100886],[25.19171931768627,36.647795142262716],[25.53750746930195,36.3312598210325],[25.875234665281862,36.135996570683986],[26.263392262703803,36.10206832409163],[26.609304021172644,36.014216538096115],[26.7986372085802,35.803376375599974],[27.01974535358221,35.643039186050544],[27.066939268098132,35.5381345462518],[27.46281560667962,35.147584136670744],[27.593487037896985,34.830411365483],[27.693477771231322,34.731418821946434],[27.592020915847815,34.344148490399995],[27.624172763088477,33.784066266728296],[27.798859940322433,33.62605902574001],[27.775917242334216,33.39463238009364],[27.92765601723543,33.10950255608115],[27.86745746231414,32.86299366831677],[28.031754147211803,32.62722424294913],[28.068803052300847,32.480767332930995],[27.991337963016516,32.29891579759119],[28.064008006431965,32.200210342274445],[28.447266232070852,32.0784367147982],[28.684192232114384,31.878831947987972],[28.841438503458434,31.65442181186268],[28.740678527468997,31.492703540701573],[28.545230058703137,31.31315753621773],[28.37462033920655,30.952759809144972],[28.279119178409097,30.8975852878614],[28.281780060491307,30.489891890014377],[28.31694350556365,30.306149322949565],[28.490268703657076,29.84534944197953],[28.52761571336651,29.480936563693],[28.758349955817714,29.355971423831484],[28.98679048074195,28.57229579890704],[29.06868413057472,28.451236250748636],[29.601955225602257,28.158172964660938],[30.828687323935846,27.9251049521726],[30.924008011619627,27.86625156164734],[31.021382339683505,27.623045359959598],[31.25610002559266,27.330651569250037],[31.295089013593266,27.103713553000162]]]},"properties":{"name":"Wisconsin","ns_code":"01779806","geoid":"55","usps_abbrev":"WI","fips_code":"55"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-2.514240910251004,59.0930468110162],[-3.656066134398899,59.10102835320142],[-6.743866304319884,59.13038254557754],[-9.131192073510674,59.160060309680425],[-12.091610041946453,59.204988250564895],[-14.32832067983332,59.24554687533025],[-15.96932081996025,59.279907119294734],[-18.619943280892553,59.34239980047304],[-21.55950204985034,59.420540017634714],[-23.333677781263916,59.47165711512359],[-26.13171871130318,59.55800356361874],[-27.55254733209258,59.60768319461736],[-29.743353325773867,59.68742967883911],[-32.548688163436076,59.79559311378915],[-34.786523235013895,59.89079855553816],[-34.959251090885886,58.84084449641368],[-35.221144971110206,57.135444477530015],[-35.378820674899764,56.047480593928064],[-35.43052107845807,55.627674548321735],[-35.50695311231086,55.1753631206094],[-35.68648115023779,53.98664740695673],[-35.88879595881776,52.5738490171517],[-36.06701163775746,51.325402443626004],[-36.25964444908887,49.84649416289695],[-36.49208434197749,48.05504201486602],[-36.601311095276046,47.195627540121286],[-35.1141936051611,47.11021496440881],[-33.25309958547422,47.009638280102415],[-31.343564572368198,46.91069195222916],[-29.19599669078322,46.80477536701994],[-27.09753913918916,46.70807056729681],[-25.410848982078694,46.633709601812456],[-23.59819515891553,46.55756959667688],[-21.717346212991128,46.48454771410048],[-20.27619857183955,46.434380822887896],[-18.08146365896906,46.36020675461896],[-15.365269208643562,46.268471281033364],[-13.062862931282208,46.205610516292694],[-10.381834019830912,46.14020928244068],[-8.683204064720615,46.09681846028056],[-6.767051825159562,46.06220706721373],[-4.055748394564249,46.024048986448896],[-2.7805528354880926,46.01281168094331],[0.5081726085095676,45.99068655467205],[0.4416006544472208,46.443393739325835],[0.5602373225255404,46.72266782933081],[0.3961619133026314,47.184574911065475],[0.417072108190286,47.30268025106105],[0.3518479852870505,47.42514239548147],[0.34717285356843175,47.91211802256283],[0.014881392192430341,48.13079467249016],[-0.11350729882314771,48.349203689777454],[-0.22254336620976925,48.418711108950724],[-0.2085683228377623,48.552228245276886],[-0.31306909234893515,48.62595422798637],[-0.3853381571626031,48.923847399841506],[-0.3604512997842686,49.04961701283427],[-0.6045297695882347,49.33056397200346],[-0.6189462640742759,49.53423099981933],[-0.5257899500516574,49.74915319872003],[-0.5516720301971151,50.04046274260632],[-0.6256705711949769,50.15877111102839],[-0.4892844369879443,50.28915062887876],[-0.4941801352770946,50.539307336182105],[-0.40926454098402076,50.62947149412579],[-0.5658838668028204,50.6877211044601],[-0.7717499678844988,51.04196960471558],[-0.6854971699036456,51.23689978917899],[-0.7250013154828518,51.349778436675855],[-0.6744457126057841,51.49108510077976],[-0.7618711897790037,51.70277920807086],[-0.6983888140141886,51.82885560349115],[-0.7819846000218355,51.87831742768142],[-0.7297482677395977,52.04577196863621],[-0.797818284450651,52.299420065234706],[-0.7306109846913699,52.49414143897698],[-0.8364522968376281,52.65415623314273],[-0.7635805970742475,52.68696413109471],[-0.8966908700908015,52.84319291859724],[-0.8466217106203335,52.931677881676585],[-0.8140340832208064,53.17687471062925],[-0.8689036138645797,53.364039054254796],[-0.8083793507302905,53.571913097176996],[-0.9900753432214491,53.77810229127356],[-1.0406657886228197,53.986868488402884],[-1.5407438272238536,54.73512908626708],[-1.6359576402967417,54.79980401487811],[-1.5980046121266376,54.939232373046174],[-1.7763993577440162,55.057482997341396],[-1.844247497902176,55.44789184773539],[-1.9745977363039544,55.55161718226401],[-2.1977227705035807,55.84235907306892],[-2.209631775009159,56.007898773766755],[-2.1209589695903497,56.09134275865352],[-2.1385172378549897,56.20882817600163],[-2.0425939107751665,56.375839617675794],[-2.1095831523296584,56.532014110957846],[-2.0861169756899858,56.61980585484494],[-2.221822286042145,56.70467562745023],[-2.228207458939015,56.78979725872343],[-2.1033599343086897,56.86956957419518],[-2.1851397845439573,57.011779704636474],[-2.1492408897379183,57.088322870864694],[-2.1945631719553176,57.34453033667036],[-2.247808155049092,57.4466774184207],[-2.049753243730531,57.736378843672206],[-1.9318050619431526,57.827994891256864],[-1.9556035746368639,57.94488349710897],[-2.099975593618694,58.08063180043035],[-2.1624871910125267,58.29231907744561],[-2.316896744599685,58.48374481396241],[-2.2632713371150275,58.54777201638002],[-2.3881284110987364,58.662507587206754],[-2.544673563402833,58.902113712374515],[-2.514240910251004,59.0930468110162]]]},"properties":{"name":"North Dakota","ns_code":"01779797","geoid":"38","usps_abbrev":"ND","fips_code":"38"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-121.6844942768826,36.74731269520441],[-122.3545150195674,34.62316191888699],[-123.0495624179153,32.403491180404934],[-123.47449859770224,31.00449693500313],[-123.87509384606707,29.64423757941368],[-124.22591202346189,28.402504712360784],[-124.57452416607735,27.202039771017887],[-125.29479966882506,24.73503295443007],[-125.72438329085857,23.278240948122182],[-125.98430058518477,22.343457905028846],[-126.43105770798756,20.841499870134598],[-126.61506232664622,20.180854160109757],[-127.07792708247742,18.374909099066006],[-125.54145907271865,16.163419789919196],[-124.861097177026,15.18652364784632],[-123.35296097309259,12.986988234095776],[-121.99846930579847,10.984917540347595],[-121.755031689671,10.636963455959537],[-120.3226277158217,8.497234178853809],[-118.21692728970686,5.365692264819126],[-117.52375577896079,4.30281502810857],[-116.61261400100724,2.952157706071371],[-116.07140275413252,2.1234382874526307],[-114.46244223175184,-0.2882601819980282],[-113.37845213637786,-1.9269060996531262],[-112.23134949852958,-3.647186700076669],[-111.76124887651667,-4.368210294186503],[-111.19030713605365,-5.211439664277684],[-109.72552602132556,-7.4046970106968875],[-108.51546033149725,-9.20248864588888],[-106.78608715069849,-11.75420317281139],[-106.07454348134796,-12.814172027768393],[-105.59283122160056,-13.504153237296105],[-103.95635518857927,-15.884671342375682],[-103.9547468422213,-15.74233503596342],[-103.68926941971598,-15.428193693979512],[-103.87800329065054,-15.170740895650214],[-103.74949530950785,-15.086130292789543],[-103.46511409694874,-15.081169407746138],[-103.36875359761396,-14.86217129094591],[-103.29091778912795,-13.742908130845827],[-103.34916792857719,-13.101469253839477],[-103.50106367800551,-12.80315085154365],[-103.51262577600201,-12.417935558765425],[-103.34045560298607,-12.209879355546278],[-103.34804405645531,-11.860260106499497],[-103.2166531358894,-11.682760161572633],[-103.36016213553556,-11.37763323152724],[-103.27059135226342,-11.119497926026362],[-103.3662841596472,-10.933746558594963],[-103.24022250530544,-10.634863281789784],[-103.27127962472096,-10.275829481659759],[-103.14062016110769,-10.100205604872817],[-103.18103684900105,-10.002027053177896],[-102.901109344497,-9.855803619162337],[-103.10228816489881,-9.554091849588364],[-103.07406471020224,-9.429193623378897],[-103.19178349896153,-9.061135973897656],[-103.14090900309125,-8.800049750619609],[-103.02331386679813,-8.724140783996043],[-103.11400788372124,-8.273575264538827],[-102.9735374573064,-8.166913643827721],[-102.67465901916233,-8.193062385748888],[-102.32369107142355,-8.032723044651947],[-102.30006598242925,-8.102790903406197],[-101.99579047134034,-8.021946356483408],[-101.64510524407184,-8.100620501857588],[-101.65750766980236,-8.261820556021087],[-101.37232622862969,-8.238648138257332],[-101.31818712678053,-8.339501774782002],[-101.11417285451137,-8.227259794377257],[-100.882596119104,-8.300390081587215],[-100.67805508822282,-8.640615713462662],[-100.6052440877174,-8.840309554367726],[-100.68350572585013,-8.934350232686866],[-100.4598297410693,-9.086070582045924],[-100.34994986157949,-9.326226524304776],[-100.17133335995302,-9.363574645632715],[-99.94607923288198,-9.321000752720265],[-99.83142468409413,-9.368214141490043],[-99.13323876452229,-8.371689721075727],[-98.98583520622175,-8.296261402047778],[-98.8651226862623,-7.625865259013503],[-98.72704270042878,-6.985690707365453],[-98.31772662452275,-4.66365116894885],[-97.92594531658744,-2.60993149468631],[-97.78373732573543,-1.8128504176916094],[-97.61295303732692,-0.9586691515522047],[-97.13296720415488,1.582863266663138],[-96.80151059674037,3.209502427693635],[-96.56577275765368,4.455012550884487],[-96.20007884154643,6.319406580002536],[-95.96260561367144,7.577772987880608],[-95.36312071260011,10.585608581440296],[-95.19134488283866,11.493019763430844],[-94.50854712544809,14.893870813086018],[-94.15703230386845,16.65913597410227],[-93.77996973480626,18.517237608063823],[-93.24511973773282,21.108090274187937],[-92.65675311457215,23.85396000017576],[-92.14240865724777,26.246061775941115],[-91.76843779713549,27.94955814237814],[-91.23160264150522,30.375076535674733],[-91.0947051057272,31.037517701670165],[-93.29275078279323,31.41412303255641],[-93.96900094680741,31.52191471915314],[-95.03593678533751,31.748734799760364],[-96.20430334539437,31.912657858899273],[-97.61678214331693,32.15818197719285],[-100.5242642068822,32.67530139609796],[-102.44677704993042,33.02674323248517],[-103.0893826266503,33.13511965910285],[-104.31192778132018,33.36581054392819],[-106.46404420226641,33.78026638811077],[-107.01499254564288,33.88682589611573],[-109.54499330436221,34.35179594748848],[-112.47374468845277,34.91073739831384],[-114.03154824508984,35.20686983880594],[-115.03741613716069,35.38380400562876],[-117.65139533915288,35.915283099073854],[-119.51948064483179,36.3092169118485],[-121.10590985297684,36.64534836904613],[-121.6844942768826,36.74731269520441]]]},"properties":{"name":"Nevada","ns_code":"01779793","geoid":"32","usps_abbrev":"NV","fips_code":"32"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[77.76766199990318,-21.098173501567533],[75.5188348739196,-21.43251655954602],[74.83795166476989,-21.521124841791174],[74.84423927188125,-21.557471776139266],[74.09674523107819,-21.64061966151776],[72.43353989249063,-21.843294573020348],[70.80794660775955,-22.022139403687262],[68.0052751159567,-22.341512169884833],[67.17860657418238,-22.428840514878786],[64.22481316338741,-22.773006512299627],[63.42482494774179,-22.843137506469024],[63.86179930676535,-24.354809416419766],[64.18677820422954,-25.381793440605563],[64.72273234144755,-27.019045293040904],[65.35334285155002,-29.03775810334111],[65.8480041532393,-30.583753467405295],[66.36916397872132,-32.17132347335651],[67.08924550741122,-34.3459528649659],[67.57114866541467,-35.72772811820122],[67.77312322829931,-35.889565216242666],[67.73501045815965,-36.07702956021999],[68.01915815585218,-36.248052991669496],[67.90723494684319,-36.332523181840656],[68.10750119120276,-36.481665679220754],[68.06453344133321,-36.583028957532534],[68.1530836744863,-36.76485713830245],[68.31546943926574,-36.897161194283164],[68.22542965486726,-36.979482333880725],[68.38662244849968,-37.1299010688702],[68.50631592508438,-37.33141230299216],[68.7949487424158,-37.513362231384036],[68.94965907399772,-37.66058724153553],[69.05024616124861,-38.01633300778022],[69.18583399420908,-38.04883118728757],[69.18099863135441,-38.50533539445314],[69.07190754408029,-38.61230975807568],[69.10142218738754,-38.73796241118222],[69.53244999377507,-38.83479967797245],[69.76003231829094,-39.038060405353754],[69.61684113609299,-39.27177345283864],[69.36387342240704,-39.30189926695326],[69.43923174763418,-39.416767262986596],[69.17958296188097,-39.51925946743698],[68.9047927631641,-39.816885494550206],[69.04290122177706,-40.05045850423539],[68.99475225613098,-40.28305254478265],[69.04679878793986,-40.47603173541186],[68.90039470203128,-40.77885141860553],[68.93928072988811,-40.84698734010655],[68.65979026224501,-41.34525545176124],[68.7512169315937,-41.565507746882034],[68.71454245174245,-41.745937058577255],[68.89275736397595,-42.00670145172606],[68.88032911038079,-42.19342573483923],[69.11123676274981,-42.36742702417077],[69.15926418407966,-42.46448759337489],[69.35520905914618,-42.566557615849966],[69.39159978990268,-42.81671227629591],[69.5169954666728,-42.97271795561201],[69.39364556014804,-43.3559976366992],[69.45338635393999,-43.50208746311834],[69.35505109869972,-43.900827273710576],[69.43619531077319,-44.08907089212956],[69.42431500046223,-44.26250647022132],[69.30992185918646,-44.422739972031636],[69.4410624763717,-44.61288591342831],[69.39840475097725,-44.731904836499524],[69.47351938350666,-44.9186831221116],[69.61133003072719,-44.94340793318844],[69.79360794514375,-45.12403413274162],[69.89719048375117,-45.165049048518654],[69.9775134221617,-45.33687212833131],[70.0988287079811,-45.43342027703474],[70.19629910032872,-45.69210057800601],[70.20953297766985,-45.82780414208346],[70.3618910502851,-45.872563319718104],[70.36512158559299,-46.00554183064941],[70.6526340487566,-46.21696207426428],[70.78280328808448,-46.4158626848595],[70.74532090150586,-46.55722541125091],[70.95731145290854,-46.872479718732926],[71.03912872515367,-46.86493515083746],[71.27240879618165,-47.04208629375494],[72.6162468225409,-46.98006281445921],[73.65923920063081,-46.939180411621834],[74.2662686138261,-46.90319657353128],[76.70790269482727,-46.79008610197094],[79.61860515051032,-46.653280753265],[82.28112074345374,-46.53408809832304],[85.18833479026303,-46.393266899224514],[87.49198765598551,-46.282005258916236],[87.36773644212734,-46.44800238766053],[87.49179585341936,-46.58508756798463],[87.6597657180251,-46.68022913733847],[87.66360204903384,-46.97379060552429],[87.82220310765028,-47.18823141756077],[87.96926693996579,-47.26637393868941],[88.36487507816017,-47.18325716762123],[88.61562583133015,-47.21066698321153],[88.77375306799121,-47.12732571292057],[88.68899999509495,-46.924003873336446],[88.78899250221109,-46.61573231053122],[88.72253568955561,-46.35441835660682],[88.761686095956,-46.168700074523514],[88.37829035278807,-45.65916190610519],[88.43167479164337,-45.49340464619388],[88.36525660145234,-45.29169136872919],[88.52049238371494,-45.20128387885285],[88.54693575265951,-45.056092964685256],[88.73823661694664,-45.08644059365175],[88.7496316735033,-44.89001132484405],[89.1855423288073,-44.82234863155122],[89.26474782360171,-44.928481945633514],[89.80942789705898,-44.935735317304584],[90.1533977487059,-45.01209020107904],[90.31329735646354,-45.09891295413994],[90.65884827512433,-45.02888182129786],[90.759016593618,-45.14004793742913],[90.8930629974791,-45.08143856741177],[91.21896785333067,-45.11859381218923],[91.7131102964824,-45.04330432389546],[91.8861189045048,-45.1020206280613],[92.59183171420038,-45.01739862811755],[92.4245641556666,-44.83045915722437],[92.20954744903318,-44.78267004768782],[92.3087888630096,-44.50936279725155],[92.37855702903867,-44.130109968819546],[92.36211889177093,-43.91123983892073],[92.51022651901964,-43.805888719657496],[92.54610490808085,-43.60706284906949],[92.27122107648955,-43.468007134031936],[92.22102064826115,-43.256494183673794],[92.48270069064583,-43.11277864057253],[92.52342053930353,-42.957293913427435],[92.43503290922023,-42.723239077684184],[92.76608375188823,-42.60612123645054],[92.96973416179952,-42.07055530479598],[92.89451050703536,-41.737662464415635],[92.90764037613114,-41.4779815813412],[92.77287434780357,-41.36861687111592],[92.88936736932578,-41.22650675401017],[92.97410833858085,-40.95378346937878],[93.077596480662,-40.90848129655412],[93.24948550611842,-40.60441829131729],[93.22686524541993,-39.980742407862046],[93.29351314620182,-39.71520924434156],[93.22328166476665,-39.57721527697119],[93.4010508802725,-39.525527301134325],[93.539991887946,-39.350038854860784],[93.64164230259104,-39.05722306214111],[93.82276312824703,-38.97468776281976],[94.01937499396814,-38.70261277851652],[94.20145431931411,-38.350409544140845],[94.38978863886896,-38.19528543979907],[94.53000542416471,-38.003047452157375],[94.53070994001267,-37.73369258283771],[94.67930476941575,-37.58765270040925],[93.8367392871202,-37.68659212747877],[93.62824435365563,-37.674450500474606],[93.43311280856832,-37.5441518906878],[93.0560889171512,-37.410001956262995],[92.94991339899079,-37.50810545681085],[92.74048511987056,-37.5061963827762],[92.41151986042901,-37.390655847245235],[92.28916397734528,-37.108529147294924],[92.28277850119764,-36.92257869808115],[92.03966933392867,-36.694800704287246],[92.09548022583003,-36.53481882489895],[92.19746016398612,-36.493092772968595],[92.16772844688722,-36.32149849381005],[91.93362878346059,-36.13252524052419],[91.74224586756941,-35.87117690611482],[91.54637862100248,-35.7139078415734],[91.52751470020566,-35.45423676089371],[91.17309004982907,-35.206388787129384],[90.98459396710524,-35.12113169563251],[90.83512668319813,-34.980791834283586],[90.72479118694099,-35.015411381539444],[90.27143018564671,-34.85995107103623],[90.0602427445512,-34.68418854893035],[90.18718227520947,-34.535663771153594],[90.07156204023303,-34.327747134342424],[89.92820325653882,-34.26499710309212],[90.01136666853141,-34.01767950660334],[89.86920971060275,-33.81365018277697],[89.78244170684594,-33.44837168183225],[89.59185600721314,-33.41465024140462],[89.36001092819406,-33.010656508890214],[89.2267965352167,-32.924966943635724],[89.21617313781691,-32.510808708425884],[89.08552792165587,-32.41064131922269],[88.73897829881193,-32.320061325671496],[88.39670504425347,-32.071392612611085],[88.21964827675845,-32.10347634741017],[87.84801022129442,-32.01345872800421],[87.59110465954325,-31.8924187165502],[87.41954835574735,-31.750934624123147],[87.45378102439234,-31.56172920799068],[87.25325486803582,-31.523147428252198],[86.83751715053404,-31.326792236681978],[86.91364636041432,-31.177336547281563],[86.73194593937228,-31.083816545608787],[86.80478811815317,-30.966188902942143],[86.3641722502691,-30.863276565938108],[86.17656638879782,-30.692677885647612],[86.23458334202361,-30.572055265510965],[86.18645107083925,-30.28823171157283],[86.28279909046586,-30.213966550997192],[86.12817336669214,-30.045464553832065],[85.80617471545726,-29.97251229967371],[85.6204247736154,-29.720686413790276],[85.37197039720114,-29.541099279981037],[85.08634800252754,-29.463836030743344],[84.98889392174904,-29.38921873185103],[84.83496748281011,-29.441211270368196],[84.42518358382762,-29.240098318215292],[84.3716238178001,-29.047630165050258],[84.13316778584606,-28.837770240274658],[84.00182986169833,-28.518504117575663],[83.66580648074446,-28.354311930873195],[83.64493880498972,-28.257316065012073],[83.33822096256898,-28.08097105081662],[82.94786322160105,-27.925433886045525],[82.86635233341497,-27.95223614877518],[82.39849400596847,-27.70369808025753],[82.19356703797618,-27.526062978684735],[82.00404776599267,-27.53737923222012],[81.83677864326374,-27.33709887357899],[81.70453535561428,-27.041139123912714],[81.47054139918431,-26.83721108104131],[81.12993022274708,-26.454673951298332],[80.8640482578189,-26.35319798280792],[80.6731931799653,-26.007748184526584],[80.613888942852,-25.72566469617386],[80.52559629335536,-25.578534506970765],[80.34166689680922,-25.454440223914848],[80.20265040996036,-25.186563923361813],[79.97843933083279,-25.068233410018525],[79.70526867777363,-24.4719794905524],[79.46391638633034,-24.324134103619112],[78.95560673489317,-24.433062219187676],[78.69850806944197,-24.44143728805723],[78.36350915757598,-24.258524235978335],[78.1136466922666,-24.00773603428736],[77.82177403898275,-23.839166248091946],[77.43078635522446,-23.750849203340668],[77.2746902825852,-23.596685756997413],[77.04011803258982,-23.515221311738983],[76.95940695825877,-23.423561869813213],[76.75182460645489,-23.3793444266158],[76.6371147865837,-23.14769190365468],[76.639129636322,-23.015735619307264],[76.75672547064481,-22.906298569503296],[76.73411842652578,-22.66393653547174],[77.11556541184892,-22.15312488188986],[77.11672510368311,-22.009876248129572],[77.33032459103508,-21.966121160718938],[77.54791349928631,-21.60968097318748],[77.75426678073293,-21.49643645198443],[77.76766199990318,-21.098173501567533]]]},"properties":{"name":"Georgia","ns_code":"01705317","geoid":"13","usps_abbrev":"GA","fips_code":"13"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[115.53818983339688,30.238673686360286],[116.94347315625474,29.820239250732623],[117.87303630019342,29.522150469521574],[118.57689714869815,29.336999906260125],[120.23410618546232,28.875251524958042],[120.29218983617032,28.786245451731943],[120.27289038605407,28.177875698876736],[120.20139676319339,27.759617542363213],[120.05374201698032,27.26789417079528],[120.0820270197065,26.900703189700813],[120.00755349656075,26.567263825209537],[119.56615648678113,26.411013774776578],[119.3598089971422,26.396416094220587],[119.27629641469133,26.27581934397854],[119.34513165471877,26.06899975016623],[119.31268875751685,25.7927850958454],[119.16886736103139,25.661777409463244],[119.1973251393997,25.37008378935204],[119.39170831154998,25.27872966646907],[120.76905083575932,25.891243646110137],[121.1592524382962,25.7364043746665],[121.42075478410032,26.01236116035378],[121.70266200157783,26.14484740929999],[122.45517497669057,26.311297715252966],[123.20031879385385,26.37909015767839],[123.975465743686,26.788135739144614],[124.25775314201186,26.81245402088298],[124.36625851779581,26.910403951965584],[124.95716010349767,27.275260057414474],[125.48752818946872,27.566930980698324],[126.1276489366671,28.03434693610645],[126.71136667101344,28.413143574721346],[127.30510704303305,28.753116747033772],[128.47477239566942,29.48441719764909],[129.0375384883021,29.919426354308108],[130.17251952229736,30.742918038559576],[130.47113741869921,30.974544102199527],[130.70054142513735,31.091150364523134],[130.9133221816976,31.25681390092955],[131.08794923369496,31.46113865083545],[131.1189538114143,31.659999734042795],[130.98850335133102,31.84941623629072],[130.83769658327955,32.33407052452063],[130.0212371708676,32.908748720381695],[129.8963861681831,32.91842215972009],[129.46992665613607,32.702295566453195],[129.1985508886449,32.466032060031544],[127.04730839080045,31.469680276885715],[124.7664030636971,30.405228390517564],[123.57606149475072,29.759976799319713],[121.81707867280363,28.905483575869155],[121.5328256871971,29.063050584249776],[121.49495941687137,29.231752746392697],[120.96999729152816,29.694488689396216],[122.0513799029547,30.63558854486694],[121.55903641091639,31.05854200775914],[121.16732624740258,33.01164532026735],[120.98504303618371,33.8325032988035],[120.68775435052373,35.24283992721372],[120.61600394280916,35.52724198182706],[120.4478370553605,35.71422906664168],[120.52224526442674,38.16192502168683],[120.56803459168982,39.59428954639799],[120.5099039490052,39.58381706460384],[120.34149340337619,39.8697994227833],[120.3500205077386,40.04965065815525],[120.17631542950036,40.66796950637492],[119.7368023475769,42.307679364297016],[119.3480702372152,43.62662886005533],[119.34874981027826,43.70875770181161],[119.20810196313921,43.856143209039345],[119.05242934596345,43.90492540858018],[118.88554932575377,44.12198157351217],[118.57462732408288,44.05567868275201],[118.5054101971334,43.7493989720351],[118.32598560502586,43.80281651683977],[118.31123684645961,44.00915055485067],[118.24460345360545,44.05639705248496],[118.26683473113651,44.34530847400301],[118.37724426818609,44.558907606083125],[118.39852141703776,44.79579766601065],[118.1183569900502,45.001304549319826],[118.16464022327919,45.14945046907818],[118.10653648915725,45.294979054186854],[117.83369564480829,45.55470047781071],[117.67102364855317,45.999893524315915],[117.5029783646203,46.066873166367756],[117.51978285710966,46.41932059852067],[117.4915969486154,46.805669205843984],[117.59837412999993,46.90732460871907],[117.64606012903432,47.06820255070011],[117.74392587857683,47.143137828444914],[117.74566593504751,47.26544481234301],[117.61953293999632,47.42295044009229],[117.46772813678066,47.70737607172842],[117.53204753173225,47.79820675385528],[117.55845718499167,47.998996732756765],[117.45772862630004,48.22010393066117],[117.1183511146703,48.533162097456994],[116.86352103953985,48.67426540624245],[116.77726082614879,48.79582044824158],[116.79214086674855,49.0344040438406],[116.68946590371982,49.39856877403645],[116.7651674384062,49.622228344181025],[116.73136472269425,49.68604733518393],[116.45623355392952,49.80396486007932],[116.45814042267364,50.11871563433572],[116.51929756848914,50.198295830139465],[116.44457455353606,50.39983009845968],[116.32620581312236,50.48731913607965],[116.34293700742873,50.59961959981198],[114.90310094907467,50.34395182320673],[113.75593371850144,50.15856092571674],[112.42051640303751,49.90999947619921],[111.51216307201665,49.77610217752866],[110.9034097286871,49.709406485401296],[109.78736782347619,49.55622128337199],[109.56957688931323,49.479911600902916],[109.06133172648191,49.52600404700651],[108.78490842955087,49.40823807786989],[108.7127045410786,49.31994259428971],[108.39539128182486,49.27349672103365],[108.27396151082552,49.136082963018424],[108.02565582238024,48.96064193223004],[107.70550843057445,48.84456542137151],[107.58817735029898,48.722289718993025],[107.11637337223341,48.45813738874637],[107.01706710903295,48.3149913705499],[106.83413979797254,48.202813163141165],[106.31360675056796,47.69024586888875],[106.19712540253624,47.59838883960377],[105.77120856318636,47.11182071470829],[105.59542680479643,46.94755545853345],[105.19597904709835,46.50664910779168],[105.05662849088651,46.26278805921725],[105.05122563306999,46.06230756650569],[104.68974877588015,45.68135753250501],[104.44317598451916,45.515111890210484],[104.28283212770108,45.5152195074204],[104.0864087025774,45.40468834603861],[103.87487258882207,45.20748137014898],[103.71222507275716,45.168160533333236],[103.5816631247416,45.0667807064111],[103.63058398157818,44.86103836595286],[103.52287247742483,44.74956387870176],[103.27876991628749,44.621520794823645],[102.95061786679798,44.548260518052835],[102.8453189784971,44.19633550297303],[102.47711372614778,43.927781223182926],[102.30833718509814,43.40174051084571],[101.4913669541574,41.57729460823592],[101.45596789247988,41.27162070364479],[100.3330224004953,41.0976089999672],[99.69822672582255,41.011444686946945],[96.81583764195335,40.57992210843156],[94.65337253401526,40.262266324843196],[93.38937082280391,40.08487383042258],[91.80134586104742,39.87346582435056],[91.52356847476713,39.69155070693351],[89.7917842515801,38.709839899637586],[89.44086313780267,38.50118971447229],[90.34157022318524,37.55007824978823],[90.42532506525102,37.514095214816464],[90.53230757112271,37.2138197036698],[90.5439008038251,37.063331247487945],[90.63565591811962,36.90305134052766],[90.52680778414152,36.75086844753109],[90.60281705375672,36.68416416159941],[90.55567408541879,36.507126424932565],[90.91448393318778,36.48822277524892],[90.96610972849426,36.438868549371335],[90.89518888918921,36.19538038066786],[90.9945354173747,36.026734950148075],[91.28401039055687,35.90687166326679],[91.43662009700377,35.918076118962034],[91.61471034528013,35.75219484809591],[91.64423586932246,35.61796359920509],[91.58134799771094,35.312576159560464],[91.28570031029868,34.99609688238835],[88.8063042314644,33.422662922242644],[87.7300570204462,32.73002326025765],[87.90140459009446,31.886693144972256],[88.36735288309217,29.599137575901754],[89.86561558220373,29.822187762767697],[92.28116997921677,30.20042001259096],[92.96374865304895,30.297536192707188],[94.40052305705753,30.53970502702343],[96.08556336969,30.80494435603086],[96.84106600538847,30.93715273609976],[98.64271619734217,31.221081257463425],[100.04243581555562,31.465181245766505],[101.99704816222652,31.79253814785182],[103.49769983079707,32.067773152687224],[105.51011370631115,32.39836914917245],[107.89233212508255,32.82402271013328],[109.13358306976,33.04089404776504],[111.09879171388876,33.4098811972223],[111.4300247320815,33.16085667411981],[111.60650019254712,33.131367044291885],[111.72677993855497,32.83543897962435],[112.01815527266488,32.704743344412016],[112.10039164330409,32.79694821780689],[112.60275831551368,32.728377886805966],[112.64082552565445,32.606606957725646],[112.8001771981824,32.567404750206464],[112.7617313713734,32.32760503664408],[112.9138356572456,32.33963855822754],[113.0620858808108,32.244086907853486],[113.1640226659617,31.868516216175674],[113.31862431591581,31.45654964098802],[113.18093670686518,31.353109888234357],[113.49144629138371,31.14702205605463],[113.56162890587882,30.968695314484556],[113.78298775694043,30.85705237681091],[113.85938334206308,30.689526210484843],[114.05988498591898,30.75110139513145],[114.24617760022508,30.716851768262185],[114.39875402862,30.52921920559912],[114.79505392688901,30.636898530580794],[114.92188308944938,30.532761480762275],[115.10661556166956,30.573752082310218],[115.39065866813282,30.415823281801103],[115.53818983339688,30.238673686360286]]]},"properties":{"name":"New York","ns_code":"01779796","geoid":"36","usps_abbrev":"NY","fips_code":"36"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[11.15817993632201,-15.607246340684972],[11.396540942671932,-17.223653031119962],[11.840133270364339,-19.96336506732185],[12.22636207276349,-22.37453686849098],[12.353277338634339,-23.10254991108338],[12.329989212212384,-24.47098857097598],[12.305100980201159,-26.309001822355476],[12.287363867055065,-27.943504782665443],[12.270375938695848,-29.812523047712347],[12.260564199495866,-31.43380849270457],[12.236049440867859,-34.15307230330095],[12.434057490177294,-34.27219432958021],[12.434106754820833,-34.424013469734014],[12.570809975542652,-34.42605222609139],[12.815205790911714,-34.68531639130821],[13.027691958054028,-34.69847325250416],[13.031212193208116,-34.60016236719403],[13.286489126546305,-34.649429159486786],[13.391065686219665,-34.47153566152299],[13.700538736215915,-34.494892082941746],[13.77853041803739,-34.634348772460854],[13.91004251918931,-34.55212470935728],[14.020002408710457,-34.38427806374433],[14.15081472709045,-34.415830488832846],[14.241670868305176,-34.55487560428714],[14.624163250942505,-34.48624522177896],[14.677297365436807,-34.60203397363033],[14.857164167706863,-34.62120304262815],[14.907324639973321,-36.43508032501178],[14.938844508169291,-37.70994947256987],[18.221534641938934,-37.65330840414843],[21.134675563728955,-37.59106294839715],[23.754396494801465,-37.54852914091689],[25.77272847394905,-37.508023486561044],[26.834115214817892,-37.48159696708304],[29.530089104121256,-37.39567088628889],[32.031614119470305,-37.31145749031048],[32.04795114406484,-37.221690939086976],[32.24036723910311,-37.13441267617159],[32.25551088218023,-36.95838464047205],[31.78579988472388,-36.7240674292944],[31.87715617846465,-36.52704660964304],[32.07853803687284,-36.58231389779677],[32.351126526585695,-36.56587324943336],[32.44523855039617,-36.48351709950182],[32.45109448765348,-36.276745611513945],[32.392783305813154,-36.04723827126362],[32.542656978843546,-35.970175641237205],[32.65698205948871,-35.750587727955036],[32.44758706035764,-35.68078168816333],[32.33670572047939,-35.94888115895373],[32.07121674772953,-35.60834799794082],[32.046722422323,-35.31304840868492],[32.1701756084808,-35.22086605249628],[32.51386418639424,-34.82410614355076],[32.33800306368329,-34.69646506334433],[32.291384034969,-34.938083758869084],[32.159469594071744,-35.075863612729265],[31.893142617998507,-35.13898959268901],[31.630008242526117,-35.001665091548354],[32.077994187380895,-34.83457589370279],[32.1513721387754,-34.69119251257627],[32.102250925940695,-34.580620870724225],[31.860062182217654,-34.44266601540599],[31.78938961436975,-34.522628963517086],[31.84806737204113,-34.713812709104516],[31.65748533946808,-34.82612587838855],[31.464837186683777,-34.807502020581126],[31.749197467018945,-34.44543811145125],[31.524893065964214,-34.25166880809522],[31.459040488201897,-34.06214544398206],[31.761905104173664,-33.94032940484002],[31.90243816249474,-33.93586595791077],[32.021761688521224,-33.79154590568082],[31.962922097649127,-33.676655991791336],[31.766616725547433,-33.5525537553956],[31.466996421670878,-33.473893022060174],[31.420072789352922,-33.35525980860059],[31.53192094528189,-33.24820631075088],[31.8125407342852,-33.20018592389597],[31.97824099432881,-33.36935154715778],[32.3083177206211,-33.46628216760103],[32.56148678758652,-33.366797725548395],[32.47712713437096,-33.17019820192299],[32.346782797250036,-33.11464890867297],[32.012893662115914,-33.175449579870396],[31.880106078299494,-33.03846503261657],[31.931639837641697,-32.73519765703889],[32.09716562559279,-32.798626755770755],[32.4082630805434,-32.736177129211],[32.57324248653316,-32.82003259811354],[32.72798800634388,-32.77979800518231],[32.768242144422445,-32.63614298266105],[32.4359038878898,-32.51277506759323],[32.26652181124474,-32.26450151143345],[32.328116941863605,-32.13967283289665],[32.60229844285172,-31.83925995462461],[32.547253628600416,-31.765911093874287],[32.13943948783211,-31.643460684622966],[32.13519996973751,-31.550125008445463],[32.36347212576189,-31.480241461791973],[32.529476395966064,-31.36183331855403],[32.65343697730249,-31.581697162984955],[32.84504855739626,-31.59210464660742],[32.87437697423823,-31.488820529867347],[32.704809769572876,-31.25625769586202],[33.2361795668234,-31.19765589088807],[33.366316815680506,-30.823620552655274],[33.29196574874568,-30.750805430796955],[33.06699728596216,-30.777668691666154],[32.85882354473401,-30.633192499926547],[32.85642056096659,-30.511435185029594],[33.10516275798062,-30.332344235953713],[33.360599735109666,-30.465507972856038],[33.62478264907049,-30.441303583338094],[33.706963817891925,-30.315134583302626],[33.64473408478863,-30.198188080468583],[33.22816099964971,-30.224181721709645],[33.057708752211845,-30.139111816025732],[32.92031598422559,-29.905996408569948],[33.09926795204111,-29.84650730067714],[33.24809658152999,-30.0053322069286],[33.45294462614141,-30.06084339605142],[33.514989432652406,-29.697502377004092],[33.68545932600704,-29.575510383912288],[33.906710388176464,-29.577094512884166],[34.038120364518385,-29.407730566989922],[33.88200209823276,-29.187426018311335],[33.92468961108111,-29.031618097280802],[34.18334130786145,-29.040803649941104],[34.38692302636397,-28.982954366501453],[34.31047079954046,-29.29389648355494],[34.517242395817455,-29.254151393253082],[34.4507917302791,-29.078010152685927],[34.602945331063424,-28.886399117222354],[34.93063082814083,-28.709108801241015],[35.00710648067387,-28.548182989946707],[34.846411848678535,-28.24329964023276],[34.89131276762164,-28.052146229945286],[35.08190242531556,-27.89483782854078],[35.07043338605405,-27.732913586568273],[34.8453762971154,-27.482811249854443],[34.778956262286584,-27.058867510227657],[34.92647540947744,-26.885726314309668],[35.06372864565275,-27.0446794708857],[34.98267029284965,-27.207029835502475],[35.20945945416986,-27.29346504411911],[35.41500542880794,-27.097007188620573],[35.50306696692393,-26.937502649986282],[35.41338959596093,-26.83227900721276],[35.01223144262989,-26.847173665289233],[34.87905914632875,-26.71755215778272],[35.05421011219985,-26.536142873580236],[34.969942517279385,-26.352553292515392],[35.152880187334574,-26.19727687439185],[35.24057713108985,-26.36699925733684],[35.12966948514558,-26.50268087678503],[35.150099313504185,-26.648196594256046],[35.42420462393373,-26.672242904079276],[35.543044929278025,-26.563358874762176],[35.39862699646865,-26.17996694568489],[35.47884115759642,-26.04045190057234],[35.30682062348506,-25.80349819181752],[35.39711821736398,-25.606216401324016],[35.56105932384703,-25.63920003832832],[35.63460265128983,-25.915484008120664],[35.71918466751438,-25.97295949784212],[36.289683562297895,-25.68398544639786],[36.641352147086906,-25.43327901254198],[36.64828855963235,-25.191865477716558],[36.34332758135578,-24.99947710295227],[36.260561391102065,-24.877537699148828],[36.34067143957052,-24.57137231989583],[36.824770001777395,-24.64463115256318],[36.99134808483628,-24.03423759721473],[37.183942084686805,-23.918530655142664],[37.413525895566686,-24.019520503721356],[37.60116227583746,-23.881683823435],[37.284821433880644,-23.55715780858012],[37.39701957203101,-23.5051376545552],[37.4859820298953,-23.27478038661021],[37.35974313717196,-23.132544482233914],[37.054517774448634,-23.11944261569013],[36.948076629050334,-22.972226200968645],[36.9692624583171,-22.857956826279775],[37.28050706059203,-22.781276677289313],[37.27375185695396,-22.527782607500786],[37.44141941587227,-22.244726330510037],[37.20283488117142,-22.078464961862007],[37.041870610807564,-22.110666064024144],[37.04586882916092,-22.24442241769457],[36.841011578323325,-22.272152299898227],[36.88442095620468,-22.022511217501044],[37.102443208103175,-21.8781377905487],[37.15117138324114,-21.698587389498243],[37.34945703098811,-21.62032547379543],[37.443660476723956,-21.6920482950006],[37.46262166930792,-22.083158969773432],[37.671510792708254,-21.940665300707508],[37.7263183897461,-21.68704483404015],[37.57405907457836,-21.513092302783054],[37.52338128652198,-21.357937952445372],[37.571176129617825,-21.135606060059928],[37.85324140468391,-21.041098520946136],[38.04842054868656,-21.16624025531676],[38.127175717141576,-21.29889929278476],[38.28478865066546,-21.32479806979053],[38.31243911465389,-21.090338856633778],[38.10426561595151,-21.01663468287733],[38.02303755334256,-20.860374185479493],[38.07419559280895,-20.758770204982476],[38.358878696042865,-20.64193958495011],[38.58136726845251,-20.496400586696577],[38.55803872871316,-20.268823195331972],[38.39841144349679,-20.377747533512476],[38.152583174630315,-20.356451297675484],[37.98724728476727,-20.15220621789405],[37.996704094847125,-19.827145578212868],[38.23560969059252,-19.668804638554544],[38.41349327656696,-19.78248915193974],[38.729052934177005,-19.65799362889604],[38.8527203735984,-19.406053892008003],[39.061378365848924,-19.272920323047632],[39.15951272632336,-19.29975046608843],[39.365949756733215,-19.191680430608812],[39.32888383148892,-19.062421925099763],[39.021402722705794,-18.956595843834705],[38.9476715714111,-18.831455263700974],[39.106143041893446,-18.61380612200213],[39.26441551619333,-18.606670578351885],[39.55521562762062,-18.748149145098164],[39.67288079515994,-18.65927749986791],[39.59084101201864,-18.452247484392093],[39.24887367351738,-18.22843424928867],[39.115908061472275,-17.969574673603287],[36.90761359457927,-18.122665884942],[35.438314094355995,-18.22226757141799],[35.58811204977749,-17.899151070892714],[35.83580246162693,-17.50058992458322],[35.8719449394597,-17.38171628712585],[36.189061565608185,-17.19137000872146],[36.25227202860081,-16.879639932275566],[36.43233941631891,-16.720545319438113],[36.77424071301694,-16.523612154069223],[36.81816172698048,-16.285359005391065],[36.9932152069695,-16.228813581290115],[37.08986949611283,-16.01391345003748],[36.978684343590245,-15.882952555307314],[37.05761161146479,-15.445518532191814],[36.96408022082457,-15.345955190989583],[36.68404460859383,-15.281283543551083],[36.50370562805858,-14.686484268208192],[34.45372225390078,-14.801411529299058],[31.98889446653313,-14.933454502205953],[29.302143987639354,-15.074262151981163],[28.635107754361403,-15.090305286856136],[25.911999109283276,-15.213349504714875],[23.8933140913726,-15.299232000271587],[23.40600110467133,-15.306723188525936],[21.74441641874613,-15.368783805472427],[19.570358621570605,-15.436279173323959],[17.924495149820324,-15.47489464770237],[15.376344051405509,-15.53707531736063],[14.019792351059385,-15.565278568712136],[11.15817993632201,-15.607246340684972]]]},"properties":{"name":"Arkansas","ns_code":"00068085","geoid":"05","usps_abbrev":"AR","fips_code":"05"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-30.763083521479004,-11.15169750347356],[-28.284934066932465,-11.286413585811227],[-25.39946404533427,-11.425704629877558],[-23.394491479033483,-11.518991482002313],[-19.86171980136749,-11.657117329803075],[-17.17393420968468,-11.780851881190827],[-14.212078967739142,-11.887293093194],[-12.471249895676253,-11.94014672676275],[-9.670877405710208,-12.026134544544073],[-7.942835536731039,-12.058517590987886],[-5.691256274698052,-12.09982731581384],[-2.5581342682349137,-12.139373396106125],[0.4852282462001948,-12.16570913646166],[3.303442165004269,-12.17144365306711],[6.366511136529513,-12.160284396967521],[8.018159904386971,-12.145793365145732],[10.346174655638514,-12.128191751134366],[11.10561780019015,-12.115701625453237],[11.083149581423152,-10.733698997627359],[11.060071699086222,-8.564991764529054],[11.025854269945661,-6.594127954948864],[11.024645641602872,-5.17660369154813],[11.007986447680219,-3.40698894608187],[10.978285250285774,-1.697595599832909],[10.969712175675513,0.8458103818709393],[10.944250743197683,2.9653427391317586],[11.040756064804082,3.294577136152732],[10.942232904280978,3.3626137350808376],[10.700842176267143,3.3107095067228953],[10.652157957630978,3.4540645010576663],[10.488994171881494,3.5172271696255835],[10.233200588046849,3.4128526976295266],[10.083669546426995,3.4885326859336088],[9.971123403995515,3.682391955438755],[9.703583741090133,3.7421152173382177],[9.723557172824412,3.9863732123435405],[9.61884764167137,4.1186096616912415],[9.330838183573544,4.330449262237731],[9.261929297114474,4.7090496118149],[9.430503177647187,4.886164805076974],[9.375110441683805,5.005543384641402],[9.210506495934165,4.9515808857691725],[8.914253495274922,5.210351132585056],[8.818386583707644,5.384913836765333],[8.5813917339368,5.487728014115429],[8.48522792944248,5.749330359525648],[8.168761145218173,6.05001968621848],[8.169694740714364,6.292176606901212],[8.444696583367827,6.343655602116607],[8.451259382710589,6.637699039205099],[8.614129389818752,6.974141840157881],[8.913001504006026,7.136232482805796],[8.90385132772932,7.431756453996362],[9.027152727370488,7.5274437317141665],[9.273046529912655,7.37930997171756],[9.419147423627242,7.425915916967337],[9.507319937495396,7.595597377163614],[9.448011815026327,7.728928455231902],[9.217531150903955,7.629497559782909],[9.175572240030853,7.8498572565853095],[9.33306771250659,7.859742984913162],[9.40928593788372,7.974511003403423],[9.324274489846369,8.167776811344714],[9.060353726570169,8.288783444107393],[9.083827596009659,8.586303334472309],[8.973301239533571,8.638506393383208],[8.648344165534755,8.623366743268518],[8.541762298081405,8.382171638633482],[8.272121094067826,8.350770932637694],[7.974278041169988,8.481264381095682],[7.938170505738833,8.648889248662297],[7.702531242337706,8.61810780735034],[7.612336436514287,8.702164050110822],[7.6149905139732414,8.899177902438877],[7.370682879678943,8.960469713921997],[7.0535168363995515,9.323093145878019],[5.0959935903304325,9.315088025986528],[3.4000865691760636,9.313828448494904],[1.6779882632048355,9.318150671150464],[-0.7861694960246347,9.335680175273927],[-2.3755822754670337,9.350025299490456],[-4.358790808118781,9.37993290142338],[-6.604392298328723,9.418224273126366],[-8.35363237591614,9.45568662249773],[-11.417643563603285,9.53319525992688],[-14.610137692841983,9.630293661284975],[-17.111663726624382,9.721774252554805],[-19.599187926796183,9.82401373342716],[-21.0254238464607,9.88935631658247],[-24.0143070405043,10.041321464985192],[-27.129878294690812,10.216596782146615],[-29.438000494282,10.359026182719287],[-29.54964031643803,8.565261677234583],[-29.71153210195261,5.884414175138174],[-29.874707663042038,3.0733682855467483],[-30.012316451238505,0.8302801151070469],[-30.14217736442976,-1.2198186228302819],[-30.32281829261948,-4.090539137087066],[-30.43849538148796,-6.152684837351922],[-30.570701703559973,-8.1963047021963],[-30.763083521479004,-11.15169750347356]]]},"properties":{"name":"Kansas","ns_code":"00481813","geoid":"20","usps_abbrev":"KS","fips_code":"20"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-23.802568877144278,30.150390325038412],[-25.900603997596086,30.242488249781623],[-27.089082874793526,30.323986620631644],[-28.449178181411146,30.39699461505357],[-31.038509520669585,30.550494434731803],[-32.40168420170831,30.63817936807173],[-35.435470206022416,30.835870855677726],[-38.42089975162439,31.046166356157094],[-38.62525963784572,28.940691393061947],[-38.725341846856516,27.930908990784204],[-38.92487776386826,25.8043948932116],[-39.0789588593283,24.183827365674798],[-39.27587610992219,22.04539643209445],[-39.39076578897901,20.750077180286173],[-39.637481438049264,18.070139517390814],[-37.59322726934955,17.909202668195448],[-35.9763818856077,17.78999892346702],[-33.11141891629698,17.587866065381615],[-31.670678751960846,17.491372041018977],[-28.980312746595526,17.32193630084639],[-29.097518612734977,15.534579610933758],[-29.20939593005242,13.848449319910548],[-29.438000494282,10.359026182719287],[-27.129878294690812,10.216596782146615],[-24.0143070405043,10.041321464985192],[-21.0254238464607,9.88935631658247],[-19.599187926796183,9.82401373342716],[-17.111663726624382,9.721774252554805],[-14.610137692841983,9.630293661284975],[-11.417643563603285,9.53319525992688],[-8.35363237591614,9.45568662249773],[-6.604392298328723,9.418224273126366],[-4.358790808118781,9.37993290142338],[-2.3755822754670337,9.350025299490456],[-0.7861694960246347,9.335680175273927],[1.6779882632048355,9.318150671150464],[3.4000865691760636,9.313828448494904],[5.0959935903304325,9.315088025986528],[7.0535168363995515,9.323093145878019],[6.750435022901872,9.544697304392711],[6.601560663029592,9.512215114572014],[6.446421997339522,9.67722108834969],[6.569915340338304,10.20450602868001],[6.381175599284466,10.305796793936675],[6.3297043336144885,10.46917956119775],[6.1277377114886695,10.620629472667467],[6.169493007748666,10.895615014473329],[6.12119598177792,11.043464083788667],[5.919099224807783,11.081449431966108],[5.7016294100410345,11.232749965879616],[5.717030731083257,11.376775147162574],[5.174570297093842,11.596189706233424],[5.34135207230563,11.735951728911141],[5.234283699761395,11.929296083622926],[5.130611975215265,12.253243833874672],[5.139060004098508,12.454092709302369],[4.958770487169235,12.628488777917802],[4.9211662714740925,12.880188203929183],[5.126717302863511,12.96528448192216],[5.176765771937176,13.11124695257141],[5.071323642050462,13.282660578188313],[4.951272460836428,13.242447693604879],[4.935511477066024,13.042923323227733],[4.613560418195268,13.024601980758263],[4.524304813228201,13.390169844207072],[4.566633702986271,13.439284734745812],[4.643381104437475,13.606319591367356],[4.543882487588355,13.702752981410557],[4.437417203622507,13.957548473062506],[4.151163760908274,14.08341555974057],[4.098249197017881,14.256097910467863],[3.934243662055091,14.362658551457494],[3.942786992715526,14.592770582134653],[4.181576179115136,14.773123460110572],[4.144606822544939,14.962929195059871],[4.179334910070468,15.182242769362636],[4.122279003520577,15.383260267491366],[4.312981658312283,15.521642598406116],[4.182269651757157,15.780487194215638],[4.204941017650553,16.191944222820375],[4.03688106433218,16.303554571863984],[4.0504897477605795,16.5878308986067],[3.9362684316088865,16.759875147245435],[4.041606104449733,16.93999603471849],[3.93162669061964,17.385712980164325],[4.01290474689483,17.617933465820226],[3.758373037296556,17.595235773106445],[3.7013042738169726,17.77657203595921],[3.7800122386440322,17.967056330525764],[3.687465630835406,18.253278768302415],[3.9595308712422734,18.275741007372854],[3.9163060171285817,18.50436202152423],[3.705644335830788,18.526376403012577],[3.5357692942157293,18.718680921955404],[3.68630673415468,18.858217384764597],[3.6388146224709006,19.026087460007872],[3.7324659969125578,19.418763207557575],[3.6456637837208516,19.50478642640128],[3.286549328898408,19.551038287006893],[3.2158645466870652,19.68642998332438],[3.3462961594941834,19.838352609917347],[3.3081925861373076,20.006525582231475],[3.166775590995487,20.01252868113025],[3.126262769132797,19.827832968952553],[3.0041283583182303,19.814464239922643],[2.7961448642923474,20.04827833548479],[2.8780622447406214,20.24168603368916],[2.706442810628245,20.428273498465643],[2.6941523375848706,20.56340798512874],[2.8047524049215204,20.736435784720225],[2.667914510051546,20.93296388311348],[2.9070574489596264,21.186143874575272],[2.752180995823043,21.29620497689652],[2.9654018379238956,21.700412395240086],[2.728898856892638,21.916238428320103],[2.7211726037835264,22.09104717485961],[2.5880045961504554,22.183871221014627],[2.453777453250886,22.442620226298253],[2.558283877426512,22.524337321987396],[2.627695344919608,22.854073475946016],[2.2973517195739834,22.988327656418125],[2.33584705934872,23.11798969340588],[2.135574860918952,23.242839131993424],[2.0751905634456413,23.354447743388793],[1.897896580573708,23.3614268798015],[1.8399784153668197,23.571384414228366],[1.9023080765035387,23.809580592865178],[1.6806816491878092,23.9568001436344],[1.4875224015211121,24.171119171262383],[1.4195502037299796,24.47154674011529],[1.6097082259552298,24.597245422633755],[1.5706342938662072,24.78999406610143],[1.3792358968876897,24.994355771899674],[1.3693593237953312,25.12577642688133],[1.1709047408934936,25.29887387407281],[1.1611366076195317,25.788414424950464],[1.3170001323383436,26.00373940607817],[1.2070468058815351,26.262269786758782],[0.9797148313671948,26.290151267204052],[0.6875945186650881,26.240717939910198],[0.5644421654734105,26.417835325608497],[0.39407977125824806,26.484244925053765],[0.15464266536529156,26.38321370115526],[0.03755105341655823,26.442517699830056],[-0.023655380726697754,26.689321546245615],[-0.2779742136903237,26.86564308418313],[-0.40166750811082036,27.051386278565555],[-0.2775917097526164,27.33785558119672],[-0.4872750187000615,27.426893516824006],[-0.6754029460769706,27.397003133666814],[-0.873494259763609,27.463761649225187],[-0.8925890481803961,27.666987242256493],[-1.4204706910430704,27.859832217640847],[-1.634919889410364,27.770330691146093],[-1.7893199040689165,28.029378719726797],[-2.27106218092595,28.11131377219759],[-2.5751325356643417,28.109584928693156],[-2.679776646177394,28.26265765809505],[-3.000313508323079,28.370422582929802],[-3.0252969807448653,28.57913684441256],[-3.182958437002049,28.645645775429898],[-3.3976597693743695,28.64887365070716],[-3.4838930889274944,28.7261048816832],[-3.664414575101721,28.65452570246484],[-4.0578175763258555,28.722707899585146],[-4.174435585525769,28.605824498781104],[-4.514906571215436,28.682037559255566],[-4.812902988400563,28.617458701532655],[-5.029074572726973,28.688483048409903],[-5.461083639749054,28.593541454411834],[-5.9170938643394235,28.64825178890919],[-6.210809280007701,28.774107298356764],[-6.441649665071563,28.71322255187798],[-6.515735936773009,28.453114904710162],[-6.827029462407007,28.165026422850907],[-7.17118774488943,28.117616105344137],[-7.4281209911331345,28.241304006588752],[-7.766264756361203,28.50082381434388],[-8.232035974124473,28.712446506538623],[-8.42826650254188,28.85005942414416],[-8.777326799110496,28.933523733913088],[-8.8607365743802,29.025387582130133],[-9.50099789307368,29.332200761821905],[-9.653284017760964,29.654230937140433],[-11.660156498285353,29.701273966984807],[-13.268451237170234,29.745366861077578],[-15.55126541776475,29.8150479264762],[-17.6157680736938,29.889274176661395],[-20.164288154664945,29.99437226334395],[-22.038078009167002,30.068388709065175],[-23.802568877144278,30.150390325038412]]]},"properties":{"name":"Nebraska","ns_code":"01779792","geoid":"31","usps_abbrev":"NE","fips_code":"31"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-91.0947051057272,31.037517701670165],[-91.23160264150522,30.375076535674733],[-91.76843779713549,27.94955814237814],[-92.14240865724777,26.246061775941115],[-92.65675311457215,23.85396000017576],[-93.24511973773282,21.108090274187937],[-93.77996973480626,18.517237608063823],[-94.15703230386845,16.65913597410227],[-94.50854712544809,14.893870813086018],[-95.19134488283866,11.493019763430844],[-95.36312071260011,10.585608581440296],[-95.96260561367144,7.577772987880608],[-96.20007884154643,6.319406580002536],[-96.56577275765368,4.455012550884487],[-96.80151059674037,3.209502427693635],[-97.13296720415488,1.582863266663138],[-97.61295303732692,-0.9586691515522047],[-97.78373732573543,-1.8128504176916094],[-97.92594531658744,-2.60993149468631],[-95.27385736116857,-3.11524807527112],[-92.39305975068585,-3.6449368696579887],[-90.71450887810519,-3.9423124359646518],[-88.22023969126292,-4.37513457277261],[-86.54481122636447,-4.662414955192292],[-85.15728377563966,-4.893552579475372],[-82.52391577881168,-5.331130099729538],[-79.61788028712324,-5.771627496170111],[-78.2331802207451,-5.980228143496496],[-78.02327518136048,-6.0556952853108355],[-75.5279546486134,-6.425952144565376],[-74.00796249026585,-6.651367327837256],[-72.58110158247436,-6.84904083779033],[-70.06615646820839,-7.199983140779321],[-69.69895376554851,-4.53168439623577],[-69.52407181961003,-3.427563605934836],[-69.14812008412093,-0.7421638190247458],[-69.10350646213794,-0.3475001253983465],[-68.89832582517238,1.0954021708186683],[-68.88968021516625,1.899633559407581],[-68.44824695422317,5.064539343107781],[-68.26618779951605,6.161077689722425],[-68.00514988462709,7.929118542286623],[-67.76281911819255,9.632472520714792],[-67.51091439873119,11.44409119843858],[-67.26095392753037,13.186069034856116],[-66.91125085603706,15.644835375522801],[-66.70181901240139,17.103674779916705],[-66.51414029254477,18.28913267755052],[-66.14937212144588,20.85133770303588],[-67.21012892403772,20.99168531302167],[-68.75892383687957,21.179028575911232],[-71.20716311425856,21.50792059068772],[-72.43169180677559,21.66220935240622],[-73.81972542251606,21.854014498111205],[-76.69636591983853,22.29343437643702],[-76.28398527909648,24.658013578848355],[-76.12242569123185,25.550444220481076],[-75.55878313374993,28.718537400695144],[-77.87014524621921,29.033486328164564],[-80.5767476663345,29.421118773069484],[-81.41513541661094,29.534585688355065],[-81.5113417713196,29.578137009654668],[-83.75030608011934,29.911971823374394],[-85.59393538827628,30.18499100633823],[-88.27544927309998,30.57685599057522],[-90.33473517882668,30.877303989026007],[-91.0947051057272,31.037517701670165]]]},"properties":{"name":"Utah","ns_code":"01455989","geoid":"49","usps_abbrev":"UT","fips_code":"49"}},{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-135.27288953927726,-66.76452265461053],[-135.30946306390595,-66.72056216787115],[-135.40488764422756,-66.70124212867695],[-135.46170745240752,-66.70832787744185],[-135.5283353227972,-66.74122067866567],[-135.52211563688527,-66.77263922612303],[-135.43489101657704,-66.8037717896667],[-135.34262909562537,-66.79903125569076],[-135.27288953927726,-66.76452265461053]]],[[[-132.84486841416776,-66.51498443655139],[-132.91411915109686,-66.47094176375646],[-133.00794247431205,-66.46717488737941],[-133.07912122593208,-66.48632480312308],[-133.11453978042633,-66.51425826256278],[-133.06449138760306,-66.55625559300009],[-132.9719165907854,-66.57056854953919],[-132.87397006402884,-66.55027613962493],[-132.84486841416776,-66.51498443655139]]],[[[-154.79144303882194,-67.63726082935764],[-154.72168802391786,-67.62796696804355],[-154.6565717493878,-67.60469560151468],[-154.6556540957903,-67.57122190261619],[-154.72952138531429,-67.53274237608427],[-154.86984178712453,-67.5364873280633],[-154.9196567802184,-67.55634074542093],[-154.92377882909497,-67.59749877180964],[-154.86872585276143,-67.63258113201067],[-154.79144303882194,-67.63726082935764]]],[[[-144.0624835319597,-63.53688131667755],[-144.07164501053677,-63.49379981919087],[-144.1133413675643,-63.47228359479148],[-144.17899504890093,-63.463814854817656],[-144.24851222364094,-63.47014535883603],[-144.30545725307957,-63.487195401609746],[-144.33175076886448,-63.530288628595244],[-144.31588010045562,-63.55582965199756],[-144.23771108408943,-63.58283656855464],[-144.1372573259889,-63.574032816627636],[-144.0624835319597,-63.53688131667755]]],[[[-143.3057012537638,-67.02891695874828],[-143.41939520182825,-67.01501397139086],[-143.46536892524333,-67.02197211503437],[-143.51945870417305,-67.05207289531003],[-143.5193957825163,-67.08662564492592],[-143.4769561230233,-67.11896418202032],[-143.39455072021468,-67.13381163040785],[-143.33246588411976,-67.1275080505615],[-143.2703263987335,-67.09830651025203],[-143.25624392610973,-67.05724176394949],[-143.3057012537638,-67.02891695874828]]],[[[-131.31838764756137,-56.53760398505362],[-131.36694102317605,-56.499994492227174],[-131.43354524697142,-56.48800684809309],[-131.49738304677754,-56.49476798139884],[-131.550168963926,-56.52612013839943],[-131.54699529758884,-56.59751425374033],[-131.49154755651298,-56.62408936081288],[-131.4216719838561,-56.62866492857189],[-131.32405138861768,-56.58672463809989],[-131.31838764756137,-56.53760398505362]]],[[[-138.01436329196162,-52.89697569455468],[-138.0882936394755,-52.95519208172716],[-138.0806408445675,-52.99988300347867],[-138.0503807146002,-53.025534822145815],[-137.9780403457549,-53.04503093218795],[-137.86184920867058,-53.01598381048996],[-137.84511797943375,-52.95900612396422],[-137.9000091140524,-52.90031712516207],[-138.01436329196162,-52.89697569455468]]],[[[-155.220552804626,-67.56911991273813],[-155.2244136613955,-67.54513863482495],[-155.3053898071016,-67.5026028692058],[-155.36547091562628,-67.49585743085721],[-155.44615681583673,-67.5018956446146],[-155.49926785911433,-67.5166753300147],[-155.5327436512156,-67.5644677445477],[-155.49731491226459,-67.59313895428473],[-155.43796508663047,-67.61592052078929],[-155.3974972271839,-67.61908156698225],[-155.30785059077792,-67.60713856931405],[-155.220552804626,-67.56911991273813]]],[[[-145.6764242207349,-59.537985625783605],[-145.7326435680374,-59.53797641394872],[-145.8667517082085,-59.56229854703619],[-145.92258220919624,-59.606937748615636],[-145.89607536054135,-59.65486688413419],[-145.84507730541125,-59.675518661297765],[-145.70877434039093,-59.67465335385909],[-145.6055639664506,-59.62890534675449],[-145.5981447108979,-59.58227940867287],[-145.6764242207349,-59.537985625783605]]],[[[-159.87055649246741,-67.63902749093178],[-159.90283907743841,-67.58610152110815],[-159.9425268317089,-67.56903819398404],[-160.07312268161843,-67.55351634420609],[-160.190311662671,-67.56522008897997],[-160.23081692032326,-67.59215214774149],[-160.20281312573397,-67.63654545921344],[-160.095135973745,-67.66789949373644],[-160.01205178205404,-67.67813462094712],[-159.92044096205285,-67.67075215673593],[-159.87055649246741,-67.63902749093178]]],[[[-130.47031876792073,-62.9583093039883],[-130.4687539538436,-62.92195581595732],[-130.51995690225542,-62.87437976231153],[-130.63308934827924,-62.85210146688064],[-130.7294859035287,-62.87759607767136],[-130.7679510353451,-62.921793500938705],[-130.73008598088384,-62.98295716937768],[-130.6677395997939,-63.00054828150716],[-130.55284445895663,-62.99464913795021],[-130.47031876792073,-62.9583093039883]]],[[[-138.1395146926605,-52.8044452173376],[-138.15371908234442,-52.84139138829508],[-138.0361447043351,-52.85379432726363],[-137.9514822964025,-52.82666495000103],[-137.9092354734023,-52.77859438809477],[-137.9235638855803,-52.70854035865481],[-137.97105278200712,-52.6669338108735],[-138.08270005611422,-52.65636733051706],[-138.1395146926605,-52.8044452173376]]],[[[-158.2500685019185,-67.4146722602014],[-158.26811785855398,-67.3811867813623],[-158.37428620939198,-67.34549846506548],[-158.46092814570238,-67.35066133452217],[-158.53631222347082,-67.37114899305509],[-158.5727332203305,-67.39344981111277],[-158.5678096043866,-67.4368350488249],[-158.53347867897565,-67.46458420035712],[-158.4676658907517,-67.47722546497671],[-158.3342463543118,-67.47175762856425],[-158.26034695047454,-67.44513936091072],[-158.2500685019185,-67.4146722602014]]],[[[-130.69759776014823,-55.92188715251139],[-130.66144471967888,-55.846678687221825],[-130.70409460741047,-55.80228987672384],[-130.79426979884613,-55.77843030403889],[-130.84474830662157,-55.783191393845115],[-130.9214041002713,-55.81423821293759],[-130.94641115222262,-55.84779096170367],[-130.93514402734326,-55.9145205715058],[-130.89518575815848,-55.94102397302959],[-130.8245635121614,-55.956361302889576],[-130.7652087645038,-55.9543935361366],[-130.69759776014823,-55.92188715251139]]],[[[-137.5213733447396,-53.91558749548448],[-137.59245925707384,-53.89999390968562],[-137.68235134297723,-53.90980258534349],[-137.74937189023342,-53.940179677149196],[-137.77916962560053,-54.01438681373602],[-137.72105857647404,-54.07119821014008],[-137.622401142757,-54.09736797549811],[-137.52316692632732,-54.07430583036395],[-137.46336122156694,-54.02640593955087],[-137.4571385377973,-53.97799680899257],[-137.5213733447396,-53.91558749548448]]],[[[-135.62597900807108,-66.09119380259726],[-135.66433873141048,-66.05023087083745],[-135.7366432147086,-66.00894750503485],[-135.81011934178036,-65.99912170303735],[-135.88742140003086,-66.00790309918874],[-135.94212143914598,-66.04650508316251],[-135.92304003926367,-66.0713321957075],[-135.95701231023236,-66.09200747864497],[-135.95809796533595,-66.13027432067969],[-135.92991541405684,-66.16052044568751],[-135.82343378427998,-66.18993299127231],[-135.70059435278483,-66.1782470641229],[-135.61998733435212,-66.1220548412519],[-135.62597900807108,-66.09119380259726]]],[[[-160.26519064170694,-67.24910231365656],[-160.27279951368382,-67.20420521870182],[-160.37697074919424,-67.14874336476979],[-160.461364186125,-67.13582783488218],[-160.54009273687407,-67.13918955428903],[-160.64698833724734,-67.16379029373758],[-160.72070297818314,-67.20718492408973],[-160.72885000261556,-67.22719112389197],[-160.65519432885534,-67.28849658898655],[-160.61194419760798,-67.31246377245786],[-160.52864496293643,-67.32374705931946],[-160.40810810133533,-67.32083545970313],[-160.32612209390254,-67.30147694270187],[-160.26327599683546,-67.2667307420104],[-160.26519064170694,-67.24910231365656]]],[[[-148.88545630665712,-68.0685909847474],[-148.76673168916017,-68.03877776267663],[-148.6910956228878,-67.98665425036342],[-148.61274309322758,-67.98118855368168],[-148.54975131762168,-67.96108279454303],[-148.49853651153373,-67.91281815289238],[-148.55341251581237,-67.88481122322302],[-148.6491287393489,-67.86313550775894],[-148.75509259778812,-67.8668312798585],[-148.84398381547365,-67.89811561952399],[-148.94636120055821,-67.90018742074336],[-149.0592475860148,-67.92139719946582],[-149.13207062816767,-67.98075069109659],[-149.1156191105177,-68.03598329344787],[-149.0334280688207,-68.06285938291558],[-148.932991735832,-68.07228908786384],[-148.88545630665712,-68.0685909847474]]],[[[-113.32882564609913,-61.8317709157509],[-113.39125189487292,-61.88409473765322],[-113.40307966142657,-61.93112085662326],[-113.36035799443825,-61.96475349224122],[-113.27300285246164,-61.982328776943305],[-113.19696148165876,-61.97821499477393],[-113.10653075837277,-61.958582252810544],[-113.03833122622179,-61.913658547303136],[-112.97324167866026,-61.8858399416135],[-112.95955710886197,-61.85707973364947],[-113.00520019217862,-61.7973771171663],[-113.05268161331976,-61.76702380466812],[-113.10886236465454,-61.75507889463327],[-113.12138148534254,-61.71136257528921],[-113.15915195704484,-61.69172881854251],[-113.2727213204087,-61.68510858271245],[-113.33479919933578,-61.70967573928423],[-113.35264622858267,-61.73700210292925],[-113.32977970364608,-61.77482549076602],[-113.32882564609913,-61.8317709157509]]],[[[-125.02298621848264,-65.95220998389334],[-125.15690329194275,-65.95090430110743],[-125.2175954569431,-65.96842428246954],[-125.32550370609209,-66.02162699150483],[-125.4013006539609,-66.03888703505105],[-125.43241095455677,-66.05661589439906],[-125.44990759392037,-66.09253059356682],[-125.3939380359631,-66.14721458535048],[-125.29044718826813,-66.16631676849067],[-125.09664730310496,-66.18025317857928],[-125.02143901139796,-66.1749715940487],[-124.94451242298932,-66.139693662585],[-124.9548964825871,-66.0614547815097],[-124.90635604718302,-65.99557508507259],[-124.93440392565041,-65.96512182419603],[-125.02298621848264,-65.95220998389334]]],[[[-130.68512408089552,-66.9978217774287],[-130.66456394296878,-66.9656216909468],[-130.69365311533898,-66.93984049289482],[-130.76750121756263,-66.90022147890548],[-130.84614375718255,-66.87325773173535],[-130.96271583123007,-66.87771906416313],[-131.02383863215746,-66.86027839023419],[-131.13707856816438,-66.85260389044686],[-131.25038716869688,-66.86942196671],[-131.32533820614483,-66.88954517403981],[-131.37075388937413,-66.92521127864956],[-131.3011663368823,-66.97823623343656],[-131.2450457384458,-66.99709963383194],[-131.14874207002856,-66.99817661940165],[-131.0602338304566,-66.97871351096838],[-131.01849253866484,-67.02690577223221],[-130.98078663156852,-67.03779191288031],[-130.87202789928205,-67.04979361627464],[-130.75455741000485,-67.03243272801177],[-130.68512408089552,-66.9978217774287]]],[[[-143.79232330634198,-64.18690059783198],[-143.8318248501325,-64.16363434991455],[-143.9179439891507,-64.13928580552131],[-144.07154709968384,-64.13016353209967],[-144.2305145332366,-64.0980700336839],[-144.30456519208568,-64.09144532083148],[-144.3804756253638,-64.10035652517575],[-144.43014825205057,-64.12693377435113],[-144.44344899606455,-64.17435623122896],[-144.38220870626284,-64.22526930942665],[-144.3313181480733,-64.23806315132023],[-144.29826051067803,-64.27068794242868],[-144.24027400063525,-64.29730442906757],[-144.12096652058094,-64.32419649058548],[-144.04219753066346,-64.32147909610309],[-143.959417351114,-64.29225636543372],[-143.86768682863078,-64.27669493747874],[-143.7882107317123,-64.24190662450754],[-143.79232330634198,-64.18690059783198]]],[[[-161.23097106487296,-67.67033356875315],[-161.14373137878613,-67.66570609419482],[-161.08462581956852,-67.65402718752001],[-161.00698784755664,-67.65122964168829],[-160.9554298633213,-67.63998212648487],[-160.91134810551665,-67.61157946965226],[-160.89802236489285,-67.58030761148952],[-160.92251739173162,-67.54205005362861],[-160.96423674823168,-67.51597553867875],[-161.0333317740921,-67.49239009590009],[-161.0892344530834,-67.48848864858567],[-161.17660656741347,-67.49999066519696],[-161.274071542435,-67.52350619217184],[-161.329118539748,-67.55316601504693],[-161.45394185048858,-67.54968950220523],[-161.55127398464253,-67.57486101934718],[-161.58835695474014,-67.60154693198055],[-161.614050601357,-67.66352316702165],[-161.59624973352572,-67.68544056065231],[-161.53562152360954,-67.70340108195651],[-161.43926884093253,-67.71391705129899],[-161.33880996502253,-67.6978471152],[-161.23097106487296,-67.67033356875315]]],[[[-131.2886551110318,-62.850500581908825],[-131.2488329697307,-62.869718902949906],[-131.14649503895103,-62.88104862077719],[-131.17984694981396,-62.91894603885807],[-131.1653016120617,-62.95738791848704],[-131.13037662649262,-62.97256471362397],[-131.04577323872195,-62.983365898643804],[-130.98904154149128,-62.975738130531774],[-130.94125038961383,-62.95380327565778],[-130.91698518790915,-62.921063086269754],[-130.83226123412632,-62.87645497343647],[-130.82562502425768,-62.852535543193646],[-130.74479281652765,-62.81105158448881],[-130.74482584653586,-62.77938770660388],[-130.78518130781976,-62.749948660346384],[-130.88191837415818,-62.73823603154797],[-130.96507356815016,-62.7121641275106],[-131.01750208948553,-62.709772153405574],[-131.06994168036437,-62.685488293341656],[-131.13099385070157,-62.67776083810703],[-131.2324188528943,-62.701882210068476],[-131.28854981918744,-62.74941121071553],[-131.3261459178439,-62.812091211533385],[-131.2886551110318,-62.850500581908825]]],[[[-126.47626729215193,-65.85193010849156],[-126.4308300130859,-65.83069980836981],[-126.42855441289447,-65.7660347380976],[-126.52197175521759,-65.71310486661211],[-126.58381526911488,-65.70369117794692],[-126.55664947010023,-65.68432108107743],[-126.5496335671178,-65.65003603110608],[-126.59868866465364,-65.59107909352032],[-126.70647472160216,-65.56592015039274],[-126.80673778506402,-65.57422062684259],[-126.85104291958578,-65.59728386373287],[-126.89574924211176,-65.65371409916763],[-126.90388592273905,-65.69125684613695],[-126.88025939624956,-65.72484338536574],[-126.7900052316435,-65.74571154389494],[-126.83731945047286,-65.82901680725739],[-126.81311015546247,-65.84432466423347],[-126.8115073929258,-65.88529602768736],[-126.73185315995761,-65.90153787831618],[-126.56880400682192,-65.8947504573387],[-126.47626729215193,-65.85193010849156]]],[[[-147.66911102057333,-67.95964656703191],[-147.64760421200768,-67.9115432542188],[-147.66899242906544,-67.87979941056908],[-147.7381396561156,-67.85282508328093],[-147.82977684020193,-67.83491167296803],[-147.90454078386927,-67.82963074017208],[-148.0543346461894,-67.84270370247314],[-148.27341000772583,-67.89086683319394],[-148.37089419409446,-67.95309604967821],[-148.39234471104928,-67.975204449933],[-148.35620384691276,-68.0134488586681],[-148.23430725187401,-68.05095520324625],[-148.14414961486852,-68.04715853304168],[-148.0252998548426,-68.02038705461035],[-147.87025823295753,-68.02081715957866],[-147.80022194325196,-68.00925972581628],[-147.66911102057333,-67.95964656703191]]],[[[-160.28326386863174,-67.52741250055706],[-160.20801540395976,-67.52766127666916],[-160.1486354767288,-67.51769324363187],[-160.11860184414329,-67.49618091855321],[-160.13290896780944,-67.45970156216289],[-160.19768730460663,-67.43732120513044],[-160.2321737614759,-67.41297399240734],[-160.39465983348398,-67.37485233899417],[-160.50200552939134,-67.37230078244374],[-160.5955188207578,-67.39377258559135],[-160.68779274750423,-67.35973377307475],[-160.76302230661352,-67.35769405943641],[-160.88252036934253,-67.37755995555514],[-160.90809070884092,-67.3397274239928],[-160.98663453842195,-67.30572451553357],[-161.08207314196954,-67.30511560834607],[-161.16896383558603,-67.32994539019089],[-161.20528559279896,-67.3667000562105],[-161.19550289402162,-67.404319138878],[-161.10694111774643,-67.42567698646718],[-160.9809327044061,-67.42462006506777],[-160.9085417297672,-67.40507522728974],[-160.8734154070015,-67.44991826142748],[-160.80799199482848,-67.49067683483888],[-160.76084571451847,-67.50405657290369],[-160.629307149474,-67.51562474099637],[-160.48724496119652,-67.50522773344666],[-160.41250763173213,-67.53390806941047],[-160.37628574376552,-67.5383023330455],[-160.28326386863174,-67.52741250055706]]],[[[-150.4254433237882,-67.94950030006898],[-150.44271637289077,-67.9177439808496],[-150.62825445486956,-67.84829334643533],[-150.75805662066168,-67.84199862114056],[-151.0108961411634,-67.86222623517102],[-151.19448368654074,-67.93293776295187],[-151.22484854117516,-67.95916507121484],[-151.22623495775653,-67.98826317695038],[-151.19608347457495,-68.01445171906711],[-151.11562180336333,-68.03425558300779],[-150.95907585743933,-68.05022770897364],[-150.81845935379593,-68.04061415250564],[-150.74364238458617,-68.04573063231616],[-150.66400549859932,-68.03104561697111],[-150.5851243564228,-68.02649403596521],[-150.47701370138734,-68.00837919871454],[-150.43732865419716,-67.99314274619104],[-150.4254433237882,-67.94950030006898]]],[[[-120.14780923055139,-62.66576733077312],[-120.23026350303029,-62.623753960525434],[-120.33748629704488,-62.59917114689247],[-120.41876329637738,-62.6070738998364],[-120.47809427163747,-62.594322375777324],[-120.55380586618497,-62.595989112004176],[-120.62582922088346,-62.623038880798084],[-120.72638786982279,-62.60809218679174],[-120.84145121563016,-62.62693873387408],[-120.90266298244084,-62.705869964523785],[-120.88461200187312,-62.75086169038347],[-120.79210156080036,-62.81470711187046],[-120.70316191289263,-62.823190639402725],[-120.62085217273285,-62.79853952170203],[-120.5509930178289,-62.79773157304751],[-120.47335822697129,-62.77671026014149],[-120.3849800175666,-62.8043250382775],[-120.32078395072595,-62.80860852326523],[-120.2756473664581,-62.79795280887942],[-120.2198302140143,-62.76265490852589],[-120.16322716488979,-62.75150128304985],[-120.11711378477939,-62.713646550145384],[-120.14780923055139,-62.66576733077312]]],[[[-144.49392783400458,-63.56248367378695],[-144.43764701181743,-63.55119053531162],[-144.37407988929988,-63.520570958660635],[-144.3636574504168,-63.4954842330499],[-144.27969833513257,-63.471833493832186],[-144.23499846676913,-63.424068751379124],[-144.2801057230824,-63.3829205934975],[-144.3332991197131,-63.36854662370408],[-144.44455098580391,-63.36532709625163],[-144.5569747509465,-63.39116156641535],[-144.6470180158434,-63.37153847656614],[-144.81148651578215,-63.37961262397154],[-144.94145768303844,-63.42954433506757],[-144.95643573413957,-63.4638467069918],[-144.9455843667555,-63.50412357239566],[-144.89263316928174,-63.54007757642614],[-144.9709751327202,-63.55663869992152],[-145.0133432748444,-63.590658822067546],[-145.0063234005455,-63.630331917226826],[-144.95965421249406,-63.654352581066505],[-144.83744799608453,-63.66093502205481],[-144.75770054427932,-63.63868100789772],[-144.72786063302152,-63.611456383179075],[-144.62024288633825,-63.59998693504138],[-144.49392783400458,-63.56248367378695]]],[[[-135.43856601997814,-67.29721222571605],[-135.3453586734078,-67.30812496366676],[-135.28780310246208,-67.29701988538775],[-135.2312905821854,-67.26706528904269],[-135.134216413525,-67.26527209504714],[-135.02297160544563,-67.24156369012638],[-134.91122994586075,-67.24463281164749],[-134.8600254694115,-67.23176581052395],[-134.835848259013,-67.2103752033447],[-134.84097702828996,-67.18153646615919],[-134.9761944375544,-67.11887117358289],[-135.05801203001872,-67.11245329403033],[-135.0964985658952,-67.09468022576026],[-135.1893882034309,-67.08353446195662],[-135.28937402049456,-67.0551788532922],[-135.3311997639095,-67.05829879431049],[-135.4392834763473,-67.02729105087072],[-135.70215976758863,-66.98725196491225],[-135.7963655288211,-67.01383001876819],[-135.81476499100302,-67.05783052752012],[-135.85784548661675,-67.10197615444679],[-135.93718869746905,-67.12504002639868],[-135.94824822366672,-67.17196249570071],[-135.8816936080253,-67.20070393293415],[-135.78967005244508,-67.20061133866271],[-135.69073327764147,-67.22129496405402],[-135.64299904922123,-67.24479499825554],[-135.63346339371168,-67.26743932082073],[-135.5823751088431,-67.29762205108574],[-135.54548494432714,-67.3034768724158],[-135.43856601997814,-67.29721222571605]]],[[[-146.32403133091077,-67.95022425647046],[-146.2679203977772,-67.93315660276174],[-146.22345654528309,-67.85149984888042],[-146.2524688105075,-67.81293910619647],[-146.1365219863817,-67.75863606667801],[-146.12219336310605,-67.72265060584812],[-146.13975120455342,-67.69206007184191],[-146.2134700233587,-67.66234385422406],[-146.23557077808195,-67.63463610978407],[-146.32393240137083,-67.60507502128512],[-146.40848511951918,-67.6045049044734],[-146.48934379353344,-67.61812497990695],[-146.55743208962477,-67.67011836229261],[-146.50462142439784,-67.70925387011337],[-146.54295746323274,-67.7449922449705],[-146.54681743392615,-67.77757513515407],[-146.66227732022193,-67.76724685591542],[-146.69416457802947,-67.7414335279898],[-146.8385227650779,-67.7140747824123],[-146.94758903903767,-67.7135668715075],[-147.05278210216807,-67.7308889843245],[-147.1141263536851,-67.76152176849212],[-147.11561587352867,-67.79514714477473],[-147.082399046861,-67.82413949888468],[-147.1641129688536,-67.82939189670607],[-147.28830907424938,-67.87428263859368],[-147.31559433959276,-67.89740999956634],[-147.3131000014789,-67.95213870304285],[-147.21153716660268,-67.97913483770874],[-147.083106539498,-67.99132232340021],[-146.99563476777723,-67.98680348361773],[-146.89919246606132,-67.96084148332025],[-146.87450728663353,-67.93801623318092],[-146.76741690841337,-67.94549617723757],[-146.6729624735773,-67.93246644899745],[-146.6296619769574,-67.94135032823411],[-146.59447700883285,-67.96497314752524],[-146.48570099891117,-67.9946290097269],[-146.41585974724956,-67.99121555512802],[-146.354079529701,-67.97332270473701],[-146.32403133091077,-67.95022425647046]]],[[[-145.5702747333091,-59.159725997904516],[-145.53635148915328,-59.09026763233661],[-145.59564782410433,-59.040246564490666],[-145.65561525202858,-59.022390093336995],[-145.6354907652338,-58.96652913529317],[-145.65198033053062,-58.9137237244635],[-145.72151860946846,-58.881634231641556],[-145.8510844221718,-58.88745129567764],[-145.95836572273157,-58.94191000766418],[-146.00267460043395,-58.988229620989515],[-145.9387767096069,-59.08045611853638],[-145.99226051557486,-59.12226935188372],[-146.03847875443216,-59.19194918206555],[-146.02860279779426,-59.22553895156952],[-145.9496946841184,-59.26046363620773],[-145.82506918665666,-59.34615248584236],[-145.83528425761753,-59.41121895466518],[-145.77660267879492,-59.44814466021364],[-145.72254582925612,-59.45579397202601],[-145.63526899131975,-59.49838798183949],[-145.6052863306188,-59.52686821421674],[-145.5201027903159,-59.56496484696201],[-145.39064912773344,-59.56316710029321],[-145.28255888264223,-59.57278541694311],[-145.2613070460804,-59.599651735626935],[-145.17689671874206,-59.64057682135854],[-145.04278686884936,-59.64390444620131],[-144.93599514655568,-59.6109806330724],[-144.90458991554183,-59.580293703058075],[-144.95089334080424,-59.5276935696429],[-145.05487231717754,-59.46074108859953],[-145.08442407748132,-59.418792526829904],[-145.15790878697348,-59.38204719797505],[-145.31945153315203,-59.35957565095817],[-145.47468384401986,-59.27772523792764],[-145.5361298090041,-59.22318613162886],[-145.5702747333091,-59.159725997904516]]],[[[-137.1345967344613,-60.42081426751648],[-137.1299464412895,-60.39239039733719],[-137.21736736259876,-60.342094787509154],[-137.2708930944595,-60.33828199381732],[-137.33306948304116,-60.351430143703155],[-137.41297929615484,-60.3277147537817],[-137.5530802963435,-60.33463678680071],[-137.53420832753412,-60.29613604418591],[-137.570070497099,-60.229791594985635],[-137.66969091832343,-60.16841567973091],[-137.7398428423853,-60.16899374353886],[-137.82712459826882,-60.194578947977305],[-137.8460695953016,-60.22702981936666],[-137.9503596714372,-60.26018338687334],[-138.05104922792415,-60.21689100207866],[-138.15385240186407,-60.207445440890496],[-138.213753184234,-60.228815396431116],[-138.27866651163734,-60.23526353743245],[-138.34726646728905,-60.26310503902488],[-138.4343977221834,-60.252105682619366],[-138.58209629442774,-60.29205241977924],[-138.70884059363863,-60.342368797985664],[-138.73423788188214,-60.36186980316452],[-138.8298850386184,-60.36749891903976],[-138.88358744068827,-60.33881417349333],[-138.94157495161846,-60.324885279201574],[-138.98568846787643,-60.33163557670861],[-139.17053918892609,-60.30266054651307],[-139.3390083261703,-60.3209347166111],[-139.42391555095983,-60.3119550855652],[-139.4869898309809,-60.33408187633758],[-139.51605146964505,-60.37490477253718],[-139.50113048936572,-60.41146734910289],[-139.4150954996803,-60.50785989711118],[-139.44668671581377,-60.57047893059448],[-139.39724999156533,-60.61972919296427],[-139.3238160519464,-60.63052206613358],[-139.29597016466013,-60.657454790913164],[-139.21246497004938,-60.67241268661295],[-139.13348637761794,-60.74249506685901],[-139.02050376526947,-60.763851663673215],[-138.908116117762,-60.80446180967066],[-138.81796970841674,-60.863950396178694],[-138.80008900411593,-60.88892801819663],[-138.69383837342784,-60.916416630929014],[-138.6461671345512,-60.94938361680496],[-138.57759318579886,-60.978446248907716],[-138.33400149201907,-60.99533979013196],[-138.2146219706317,-61.04145518913822],[-138.1736570076934,-61.093635157100316],[-138.09238766452992,-61.13846086755859],[-137.92476344025067,-61.163047649006714],[-137.79753654096433,-61.14054861040978],[-137.58764016187925,-61.055796732059584],[-137.46301764791397,-61.02579828485572],[-137.36903183723368,-61.038327457461875],[-137.2419022902481,-61.02873555341621],[-137.15455992075306,-61.014810424921656],[-137.101367860342,-60.98870053391752],[-137.0569792717084,-60.94179417129872],[-136.99722478675844,-60.90429866378959],[-137.04924587556928,-60.875187898335746],[-137.0889702914083,-60.825380194364485],[-137.13714170732388,-60.81246737764355],[-137.16108935489407,-60.76063151854259],[-137.13141645837652,-60.73317573438641],[-137.11930576079985,-60.691722075168265],[-137.13464726429973,-60.63361478993708],[-137.09200264547476,-60.59137875986071],[-137.10719756842894,-60.55785346844544],[-137.07818738830926,-60.538416634130996],[-137.04845482130747,-60.487419235014116],[-137.07918966207123,-60.438079197219054],[-137.1345967344613,-60.42081426751648]]],[[[-139.3426698690217,-56.12815157407976],[-139.50754403530428,-56.087191182163814],[-139.72259078624893,-56.054659024734065],[-139.94857720136466,-55.990045567862985],[-139.96731462467292,-55.957897423239864],[-140.0694978911097,-55.87937483617496],[-140.26977237909628,-55.83770454676938],[-140.39272430593337,-55.76877877370058],[-140.39901133571442,-55.628235858439986],[-140.53662730246367,-55.4677158959456],[-140.6528017625603,-55.399087042755944],[-140.8755213556154,-55.370375119782565],[-141.0178507225729,-55.3936936662434],[-141.115376336146,-55.39470924126707],[-141.44182831364984,-55.474573128627796],[-141.6410682129789,-55.39630403159599],[-141.72784437122746,-55.370808106168504],[-141.99580172525967,-55.24969636293045],[-141.9614109315612,-55.21308921489032],[-141.95855200533586,-55.139215418368956],[-142.0097209828377,-55.08209768809818],[-142.06380838518226,-55.05877069028145],[-142.17545669865663,-55.050130434099245],[-142.2285883986416,-55.066378081359034],[-142.29433654589164,-55.10871755045044],[-142.30056090986082,-55.17047847745946],[-142.35744540116255,-55.21761114534235],[-142.37259779722496,-55.26073915526403],[-142.44391876198665,-55.3019899254108],[-142.53216011051998,-55.38939990779442],[-142.61951788835876,-55.51957753632037],[-142.59670375032923,-55.66293947044932],[-142.57077233515125,-55.7180440078727],[-142.5167182306066,-55.766366839608615],[-142.4024085808632,-55.81934647796166],[-142.37961433312515,-55.843055433441066],[-142.24291141558044,-55.896722043743694],[-142.1510024143091,-55.90605312479121],[-142.05616559659208,-55.8838846553616],[-141.9688494377804,-55.88259089774271],[-141.84093658928066,-55.82083511741813],[-141.76481978912844,-55.819970290851266],[-141.7191509113437,-55.80550019262265],[-141.6376857200054,-55.81207832813192],[-141.54859021094808,-55.83224965253208],[-141.45892901912578,-55.86703482621703],[-141.2480674347328,-55.96019792118466],[-141.1741853273298,-56.00496987545666],[-141.11375155695282,-56.065901306866195],[-141.07825571577484,-56.12970058818939],[-141.11440715483582,-56.181691958559576],[-141.0617919782309,-56.235460931110644],[-140.9189363262552,-56.27231688604212],[-140.8365765277619,-56.283082675999296],[-140.6964116735471,-56.39248517004864],[-140.6559980503496,-56.43602401942119],[-140.64804882019666,-56.518520302525545],[-140.67051096657568,-56.56585834789608],[-140.6534144457175,-56.59483953975311],[-140.54845480890853,-56.65071263203563],[-140.45686898020955,-56.67899143666919],[-140.40244010678248,-56.68196911193461],[-140.30859713794337,-56.642233597343406],[-140.2335379787402,-56.640466581958414],[-140.16394850212095,-56.59146911647403],[-140.16097524121727,-56.500097312896905],[-140.0567291454132,-56.48172267977538],[-139.9322291531629,-56.42210717280203],[-139.8703770062909,-56.417173172698945],[-139.68795851785595,-56.43389583145008],[-139.5460361540203,-56.49255330085832],[-139.58623575695017,-56.52306770454117],[-139.59506892297858,-56.56176702585923],[-139.53080208019762,-56.60737000336251],[-139.46002856109538,-56.61924085380989],[-139.3254845456533,-56.5804870674244],[-139.29050976024942,-56.54559944221795],[-139.32041064882898,-56.4755072799413],[-139.1306051968959,-56.36030132451771],[-139.08239349605122,-56.30498790652463],[-139.05474225513694,-56.23329226134321],[-139.1040582728548,-56.19913669241791],[-139.3426698690217,-56.12815157407976]]],[[[-156.26964866948308,-67.81439509278526],[-156.18062617879067,-67.83070206567676],[-156.11317707167188,-67.819797479369],[-156.0591015607502,-67.78200000267223],[-155.9161184770542,-67.78768388186337],[-155.7743974595771,-67.76817154826976],[-155.7052242685456,-67.78321762420617],[-155.4807797913547,-67.78626125616408],[-155.42789741338436,-67.79334462024524],[-155.31254976678605,-67.77580719463396],[-155.2591736197177,-67.79266577268888],[-155.14960772272948,-67.79731852636479],[-154.8945894757472,-67.8422476101651],[-154.80735058300584,-67.84678255674794],[-154.60152663540134,-67.84113884779276],[-154.43110274189954,-67.89172266546834],[-154.34559249712905,-67.9002528422652],[-154.19190138340238,-67.89832013781572],[-154.1180890793427,-67.92720230217257],[-154.04452459602712,-67.94142756272505],[-153.97939192904477,-67.93807093601515],[-153.88168941100085,-67.94516564753495],[-153.83133061479157,-67.93959339251727],[-153.73585097115304,-67.89618805318153],[-153.5320257644928,-67.90938954787451],[-153.4907297090601,-67.91833278815393],[-153.345347319771,-67.92715893690207],[-153.2012546511355,-67.99002747052974],[-153.0349521086711,-68.02349407164165],[-152.86720196947942,-68.02618085647383],[-152.7346563434239,-68.04702800844646],[-152.6999756028694,-68.06890513936291],[-152.56375403516208,-68.0952396931859],[-152.46597378388245,-68.09299668939839],[-152.343259300051,-68.108179166127],[-152.26879995514932,-68.09517992287499],[-152.1693388173494,-68.10311569442715],[-152.181258710967,-68.1214470403047],[-152.1513507718945,-68.15180712292099],[-152.10634249512026,-68.16991292999937],[-152.00323028936845,-68.16897584836398],[-151.9655594935304,-68.15822180863813],[-151.92715918734254,-68.12098117110844],[-151.8069577924552,-68.12446862932235],[-151.77202546534423,-68.13573032200682],[-151.69083316736166,-68.14085289737702],[-151.5336588702667,-68.11224472264247],[-151.4856138815327,-68.0897498118038],[-151.482156818366,-68.06774234771481],[-151.5203418755692,-68.0389110933287],[-151.60241348729912,-68.02385021352731],[-151.63577553454851,-68.02855075509882],[-151.97061175270625,-67.97675636856064],[-152.0454228239399,-67.97437089070439],[-152.2107273252331,-67.94527815963978],[-152.3531879999008,-67.92700998033003],[-152.3587428540391,-67.90401386688742],[-152.41776887278482,-67.87633325591663],[-152.5111328133548,-67.87495060202637],[-152.53757951939718,-67.86355002004876],[-152.61736234873703,-67.86042578646789],[-152.77144538528808,-67.8650361272676],[-152.84763640168654,-67.85398219788311],[-152.91770519734092,-67.83038419137861],[-153.0045655217454,-67.82254530574606],[-153.07071339940896,-67.8290147583101],[-153.15118402904994,-67.82099020967676],[-153.11555539909236,-67.79717723577451],[-152.9880847281407,-67.7567829715019],[-152.92258331321563,-67.71378768479546],[-152.92960621203795,-67.68509758942643],[-152.9087704109852,-67.65727156458863],[-152.9206959983023,-67.63786402705712],[-152.97580521043147,-67.6156461768914],[-153.02126446251327,-67.58320672684204],[-153.06751886885766,-67.57148303609296],[-153.11609789140036,-67.54315414472967],[-153.22412817729344,-67.52690564527488],[-153.32201289921696,-67.53190714791691],[-153.41929445773948,-67.51832217859659],[-153.5373996836117,-67.53887223284752],[-153.62233847536518,-67.57373828078926],[-153.75203291823894,-67.56744115733213],[-153.81020619731945,-67.57906345730143],[-153.85241982430844,-67.60489470641703],[-153.84144813252436,-67.65555457601752],[-153.9191043538712,-67.65393991504136],[-153.99435137675465,-67.67530513814111],[-154.1133176667401,-67.66429080975445],[-154.16577887829445,-67.67359118033728],[-154.24653583056005,-67.70129568146012],[-154.3555295374016,-67.70574338241828],[-154.44785771205113,-67.68230996208564],[-154.53570875413442,-67.6731651467386],[-154.65637509473905,-67.68550986813572],[-154.75307059736255,-67.67327364038913],[-154.83761277825866,-67.69053564621474],[-154.97368276214235,-67.67773713718002],[-155.04109775729066,-67.68334724751777],[-155.13725070077723,-67.6726057136913],[-155.28558976824993,-67.67924278172582],[-155.34819686054027,-67.69846743459519],[-155.42756944484972,-67.68157430242081],[-155.56889512027388,-67.69635526405719],[-155.7958312985692,-67.65088125301753],[-155.83801126018392,-67.65042535145234],[-155.92286117426804,-67.61282467554963],[-155.91952265976548,-67.57578648138683],[-155.944684169456,-67.56135625945944],[-156.05713146369777,-67.55214306600172],[-156.08846379038607,-67.49759371134074],[-156.1469155533758,-67.47088339407681],[-156.22471153970773,-67.46174268232937],[-156.31315576509874,-67.43748354218191],[-156.4386542201176,-67.43928243790307],[-156.5574148504568,-67.47345386453554],[-156.61027587021525,-67.50480170363514],[-156.6503379021945,-67.63869328082306],[-156.6953381549068,-67.64051322949022],[-156.77535591906496,-67.62647554426326],[-156.93178633761022,-67.61265037253288],[-156.95593380857463,-67.56100269948378],[-156.93648286776784,-67.54586031886846],[-156.927075515121,-67.50199126807904],[-156.98325873958564,-67.46934617915679],[-157.06594307328507,-67.45240123358363],[-157.16778602384298,-67.45520129797806],[-157.23677109715067,-67.46701871920959],[-157.39167867786847,-67.44830317994618],[-157.4753263701909,-67.4582266053563],[-157.5456918080724,-67.48480737843006],[-157.62174833487498,-67.5275416195651],[-157.67391537540425,-67.54547420936967],[-157.76757429972938,-67.55379767472297],[-157.71282445337943,-67.49734694859124],[-157.74681416277195,-67.45164489139943],[-157.8412087782971,-67.41307181419657],[-157.93722531524853,-67.39016060382042],[-157.9980398521515,-67.38815673103595],[-158.11547978277557,-67.40572036101216],[-158.17968168803972,-67.44390838459701],[-158.22026766583767,-67.48897774608369],[-158.28055171092274,-67.50713814191397],[-158.42270387478933,-67.48773851447098],[-158.5031292007596,-67.50350438609463],[-158.61956377612077,-67.50480547536759],[-158.67861702684195,-67.49311174251119],[-158.62801449837457,-67.47424578740704],[-158.58316097866114,-67.42759947852694],[-158.61515707579596,-67.3944954521934],[-158.66679200327758,-67.38324501046995],[-158.88521710853826,-67.36234545742626],[-158.98161401761644,-67.34679104748275],[-158.977361513215,-67.3293578657842],[-159.0239988318282,-67.28317559581897],[-159.09017060167753,-67.2543258996123],[-159.21250875921396,-67.2350697275596],[-159.26646406259593,-67.23526479049589],[-159.31722155959343,-67.21573647225135],[-159.54297066895305,-67.20954519416075],[-159.6585977144465,-67.24025744035413],[-159.69116725616445,-67.2581639048671],[-159.7088331774083,-67.29293185723833],[-159.67805956388003,-67.33154404595169],[-159.56053315126167,-67.38795443976299],[-159.66638238176347,-67.42648152267014],[-159.73484389633794,-67.47712871450847],[-159.7391756301283,-67.50462632250749],[-159.6762754526319,-67.53792355290986],[-159.6211504284192,-67.55217520448318],[-159.58449546472082,-67.58162843844089],[-159.43903720452118,-67.64098400276868],[-159.36471839483926,-67.65017935263664],[-159.30106273950068,-67.64391135429909],[-159.24443969169576,-67.62589554530277],[-159.2119069196454,-67.59588138195873],[-159.1350463759471,-67.57742232531477],[-159.09828559927467,-67.5932819598873],[-159.08582582276682,-67.6217006862108],[-158.97788965319668,-67.64902139862535],[-158.83440950316114,-67.64522592641764],[-158.65773919397643,-67.65265933779177],[-158.56015647967678,-67.63595119970856],[-158.53996381306524,-67.6677510078744],[-158.41847285968947,-67.69867250455216],[-158.3379103757066,-67.70540207986471],[-158.25799356474826,-67.69985687423026],[-158.17079138039205,-67.7070852089049],[-158.08451647606654,-67.69805008236712],[-157.96794774888164,-67.65538644931709],[-157.929535300451,-67.62619987330383],[-157.877773611609,-67.61247412822412],[-157.86532833209512,-67.65847348199358],[-157.991987393225,-67.6809363379469],[-158.06884444445768,-67.70979626960045],[-158.1213251869495,-67.74637951889561],[-158.13675776145556,-67.77236315326192],[-158.12103338139858,-67.80116652163335],[-158.03674851899626,-67.83965714958836],[-157.96117352591176,-67.8504290444244],[-157.86534558099032,-67.83842501552824],[-157.7724087435094,-67.8551201036675],[-157.69577197638077,-67.85227992914302],[-157.60563331712396,-67.85864306945538],[-157.51464857586677,-67.84551750189743],[-157.39213756596882,-67.84357245637844],[-157.31398390149565,-67.82807510642252],[-157.08407203140325,-67.82337061417034],[-156.96078604770693,-67.84215499632404],[-156.85733501990154,-67.84188889058808],[-156.76211366808658,-67.81692026469567],[-156.70185803543075,-67.83787067559939],[-156.6266498689285,-67.84100616478608],[-156.49473406629448,-67.82932392788662],[-156.44311566242752,-67.84336025085008],[-156.38176024303644,-67.84440262155957],[-156.3091517098967,-67.83338659167964],[-156.26964866948308,-67.81439509278526]]],[[[-140.72022572763942,-67.17680948596019],[-140.75095905366348,-67.18615624883506],[-140.8306717213215,-67.15988366206417],[-140.92741669189888,-67.14224162320781],[-141.1247158389438,-67.13165822450657],[-141.38145010536567,-67.10310990426652],[-141.5156834001021,-67.09425737733547],[-141.57466739992486,-67.10750879061467],[-141.708462096183,-67.10522899656904],[-141.75229451705044,-67.11458107080695],[-141.82898474789914,-67.11185727537658],[-141.9305376483129,-67.1191697151773],[-142.02181113144943,-67.14504355645676],[-142.1111929972535,-67.1591785977009],[-142.15429171271984,-67.19728336781053],[-142.24358289618593,-67.21356551336322],[-142.27867246628625,-67.24387270301658],[-142.2858697275156,-67.28304491140804],[-142.2055468749776,-67.32891461131226],[-142.1984405898819,-67.39249150919235],[-142.239054779482,-67.41971293727053],[-142.33547195461895,-67.43191363950109],[-142.40316198565696,-67.46908821205086],[-142.4025871636655,-67.51579749404956],[-142.51194084311794,-67.5335754428005],[-142.57539432565005,-67.5248907826012],[-142.65809234780036,-67.53334554089976],[-142.7164711197469,-67.55804707089202],[-142.83491392697653,-67.55148002734491],[-142.92660448158406,-67.57327649519338],[-143.00737654177948,-67.57403248712842],[-143.07399078445687,-67.584235335135],[-143.22597387115198,-67.58740216310473],[-143.12811130942004,-67.53568867221529],[-143.10517140994267,-67.50191056517433],[-143.1218405213712,-67.47679660297294],[-143.17602474725834,-67.45350991240726],[-143.33938847479394,-67.43927892552628],[-143.39586059234102,-67.40249968742218],[-143.43992984716874,-67.38825237669586],[-143.55800771887613,-67.38102097016606],[-143.62566537960487,-67.36621662434331],[-143.77461390812573,-67.37444076319784],[-143.932305838838,-67.38822167001989],[-144.0228024365815,-67.41242948728551],[-144.15586232476073,-67.42981677737896],[-144.18278489901655,-67.45017963308129],[-144.2767959993236,-67.4771370041477],[-144.32136322252128,-67.50218969465847],[-144.3168840895045,-67.54390977621338],[-144.36431821368828,-67.55528814140277],[-144.66660145434707,-67.58756641121737],[-144.69330157800633,-67.60755644964884],[-144.7744349424123,-67.61407933226378],[-144.8774981638026,-67.64008244101137],[-144.97838160202505,-67.67258138647031],[-145.03394589685837,-67.70459628665998],[-145.06815418854904,-67.74193231160856],[-145.05672701989297,-67.76884509184694],[-145.11380636760273,-67.77956014059286],[-145.20968654622433,-67.7855427866739],[-145.29564317185088,-67.83036950442072],[-145.3958214024555,-67.83637460918585],[-145.47283843774844,-67.85171941742144],[-145.598089227528,-67.83449411799235],[-145.70474931816386,-67.8642225633186],[-145.72926696489645,-67.90035642675274],[-145.65970865315532,-67.94024342766478],[-145.82782719863664,-67.96166196168089],[-145.88244508299888,-67.98360448408299],[-145.90853074491523,-68.01020573982207],[-145.8742095451347,-68.04276150606216],[-145.7850739551213,-68.05823133757796],[-145.6772570794508,-68.05036202229934],[-145.51121872014198,-68.02334839615726],[-145.41750494199772,-68.02231042279402],[-145.1554244937403,-67.99183268008467],[-145.1127288132619,-67.9787590979776],[-144.990755292952,-67.99260853853572],[-144.79547156083183,-67.96084622951871],[-144.7080851735661,-67.92859000142202],[-144.65854834924903,-67.92455716411159],[-144.62195014981668,-67.94801890478216],[-144.5621893576151,-67.96662826677559],[-144.44844519174592,-67.96671312914769],[-144.3370663384156,-67.94943774141822],[-144.28381137987654,-67.92316781327757],[-144.29982579770277,-67.88316437852866],[-144.2629049475469,-67.8662830553366],[-144.26509356967915,-67.83428323828267],[-144.22747130185542,-67.83083979937284],[-144.12188412421816,-67.78960837641532],[-144.0867153266201,-67.79550888428048],[-143.98421238095173,-67.78483524207694],[-143.8969249558407,-67.73346739338152],[-143.8197626200526,-67.73293085429664],[-143.75480323331553,-67.72102507881498],[-143.7381858014444,-67.73979658589118],[-143.63022273868722,-67.76225072795874],[-143.52073033435553,-67.77681299359455],[-143.46691836676314,-67.79454330651268],[-143.24229941234887,-67.83150826247498],[-143.1285063821615,-67.83853049066687],[-143.01907863168972,-67.83560175196821],[-142.89701338746244,-67.81830935008246],[-142.74670701050337,-67.77256895420891],[-142.6295330763831,-67.77936050799806],[-142.5766400875552,-67.77247982647388],[-142.50611200486716,-67.7411516643535],[-142.32006230840042,-67.71537936829844],[-142.2049368765284,-67.7124031462856],[-142.14539168647968,-67.72253846988588],[-142.0485537259901,-67.71835175586097],[-141.98707137747743,-67.73021864507606],[-141.845990189421,-67.73460379951547],[-141.71009441080014,-67.72716315660709],[-141.54623446884275,-67.69418553034069],[-141.50031069627812,-67.67463132215353],[-141.43859149070286,-67.66963861049491],[-141.14414946322827,-67.57530636967638],[-141.08850368131837,-67.56723013548495],[-140.82070548352084,-67.54262228700289],[-140.70645242886133,-67.51687324928962],[-140.6549124983262,-67.49068318338311],[-140.48145391450507,-67.45859030582238],[-140.39323237649734,-67.41828250213341],[-140.3700390623495,-67.39353654684078],[-140.3944113526175,-67.32343954331795],[-140.2629210399703,-67.27967823717448],[-140.174284616103,-67.27806107632311],[-140.10095484747313,-67.24594125477635],[-140.04460274119708,-67.24948111449442],[-139.9016098896191,-67.24000501546715],[-139.85444645262118,-67.301428261118],[-139.7956191863631,-67.31476556387794],[-139.73058679343927,-67.31450453528072],[-139.51061838936914,-67.28595069699517],[-139.4126541491418,-67.32731426346201],[-139.36447775849228,-67.33050458305277],[-139.2258739720047,-67.30424401345947],[-138.99984811838183,-67.3229255193888],[-138.84213094898993,-67.3179301978839],[-138.77556568030656,-67.3076066169078],[-138.708726550432,-67.27301191155624],[-138.6546064956991,-67.22998655371275],[-138.58644832063507,-67.22937918505578],[-138.4851398024006,-67.20617394195092],[-138.4244932548074,-67.17498412078255],[-138.41295576562243,-67.12836935089386],[-138.5036760572666,-67.09504505017286],[-138.5694224948707,-67.08670625223186],[-138.73312891197372,-67.1034513156366],[-138.84124555748306,-67.13558872869059],[-138.9252282644957,-67.13603294604997],[-138.98811057231384,-67.16020714607484],[-139.10820600974918,-67.15190591217333],[-139.25205721356897,-67.16325127452947],[-139.21108375531608,-67.10971520549934],[-139.24723881770137,-67.08759371252296],[-139.3593694377861,-67.06580590039871],[-139.40587930556282,-67.02604788999368],[-139.41573265885106,-66.98726681075128],[-139.48711513849008,-66.96246345334642],[-139.60040682651797,-66.95282935016716],[-139.65614769262095,-66.956208946754],[-139.76396848024086,-66.94317919165721],[-139.828697579643,-66.95337510467762],[-139.9153967012838,-66.99028478610052],[-139.98033220451674,-67.0428883744041],[-140.0629037788208,-67.01031099231159],[-140.19902765410208,-66.98209980315825],[-140.3450801006788,-66.987571424226],[-140.40411455923345,-67.00418283000838],[-140.48669666817293,-67.01486113353573],[-140.56331888566072,-67.03710090589065],[-140.6392650443331,-67.09046672799676],[-140.65375898268113,-67.12102034599657],[-140.59050850564438,-67.17125294700075],[-140.72022572763942,-67.17680948596019]]],[[[-123.72069368014832,-64.85199033324429],[-123.65844223474795,-64.89272674213218],[-123.55672414834196,-64.90579920516097],[-123.4722351235464,-64.9242866859582],[-123.40148349685045,-64.95412967794195],[-123.39944594958453,-65.02326252527092],[-123.17175224904481,-65.13943641779305],[-123.20135653687925,-65.16841703086192],[-123.19799145557432,-65.19496793662731],[-123.36746949124644,-65.23035708707235],[-123.44247202545783,-65.21114700451918],[-123.56901788778512,-65.20325519413922],[-123.69274070023256,-65.22674480822798],[-123.79129475711154,-65.26637027744181],[-123.91503338602266,-65.30556559468613],[-123.99064769094221,-65.34277332741375],[-124.1053108020225,-65.42457366473259],[-124.10500187680816,-65.44730715921118],[-124.06471293410479,-65.48803791451243],[-123.97160846170296,-65.51399345780534],[-123.87616723055034,-65.51866358017536],[-123.7416867974603,-65.4872210752662],[-123.67609463962545,-65.44518140488903],[-123.56007591995976,-65.41544446969979],[-123.4974803769424,-65.42868061811575],[-123.42940884437455,-65.43049671060821],[-123.34285146031304,-65.40704676291153],[-123.25281609792677,-65.42571442243522],[-123.1957676504161,-65.42908439544557],[-123.0850914214168,-65.41197486622175],[-122.95365424078611,-65.42414681609382],[-122.78615328168779,-65.41891450137739],[-122.66592224056161,-65.38491149302669],[-122.60795973229934,-65.36055046233706],[-122.54763576388048,-65.31101176817243],[-122.55135778617557,-65.27825650498033],[-122.58714965820339,-65.25525980975627],[-122.65744305818801,-65.24438719914173],[-122.84940077623196,-65.25659277919023],[-122.855168315663,-65.23893482366088],[-122.76419439904609,-65.2214406627088],[-122.72342240027922,-65.19081815064573],[-122.60082766115026,-65.17156713248234],[-122.55908468096658,-65.14851846392379],[-122.5289866669115,-65.11350559193316],[-122.54685385410535,-65.08042422045793],[-122.49045807461657,-65.07797086021327],[-122.41823969037802,-65.06081899643154],[-122.34941909433174,-65.01891641078849],[-122.25328027247738,-65.01022534353636],[-122.19465230778597,-64.99492096658506],[-122.12694467106094,-64.94847224126316],[-122.15414560028302,-64.90722241392068],[-122.11228844466862,-64.88093185357164],[-122.06492230754118,-64.89475839461245],[-121.94983390949561,-64.90472899098323],[-121.8878014663785,-64.9025486692211],[-121.76150148725857,-64.88286674255397],[-121.66744752956863,-64.82823270018548],[-121.6519310696534,-64.7975415148163],[-121.49804744578253,-64.76872148387386],[-121.43576589926184,-64.76860801114145],[-121.29639773038201,-64.73745126883794],[-121.22173935444567,-64.68660043290551],[-121.23465402552532,-64.63205836401349],[-121.3037778116123,-64.60586498647545],[-121.0897855589046,-64.59351049001154],[-121.04459325464813,-64.5844161339855],[-120.90663007385136,-64.51282050314607],[-120.89612273899571,-64.48407652992405],[-120.74741910179952,-64.42090208515006],[-120.7009032253871,-64.47340496578002],[-120.60815447880213,-64.49055549066594],[-120.53260410259088,-64.48449211484835],[-120.43768070224137,-64.45128821164768],[-120.40378532983733,-64.42146276010857],[-120.40128297637291,-64.39391218692859],[-120.48387624490441,-64.35983049762058],[-120.49433252184103,-64.31975472278936],[-120.2886239481149,-64.21297420851036],[-120.24951759154531,-64.14983332446242],[-120.25647625893751,-64.12294900270594],[-120.3186954939448,-64.08767141625377],[-120.3864990928543,-63.9508932775076],[-120.43775251688757,-63.917148748080294],[-120.56561028620776,-63.8904051211645],[-120.52187327110573,-63.82188456700496],[-120.5845615124255,-63.777364838083294],[-120.65238687600285,-63.76876538124892],[-120.6708065841177,-63.74719112665857],[-120.78487646861873,-63.70706033193216],[-120.77277702156867,-63.68177693883371],[-120.66809087352256,-63.693202694824734],[-120.584803253858,-63.663996114381625],[-120.410773729278,-63.64114584097559],[-120.28868299727297,-63.61758614606858],[-120.20261216810651,-63.57140436648623],[-120.12444294665988,-63.609314414486015],[-120.06193171273459,-63.61578119688326],[-119.93660566338677,-63.58495334114972],[-119.86563691120581,-63.52674468227011],[-119.84864796201539,-63.473577688493684],[-119.87069336122782,-63.43429222611092],[-119.9188783286033,-63.40492221702859],[-119.8789371245194,-63.36616003462909],[-119.8898207879053,-63.31838811768951],[-119.94072837744174,-63.29589321848244],[-119.9992282120887,-63.29008360581197],[-120.07608015493554,-63.30151442831788],[-120.12754981429397,-63.32447861983656],[-120.17738890176298,-63.303841377124456],[-120.29892908778729,-63.28078197772356],[-120.3630030260428,-63.250731492649145],[-120.43455455654306,-63.2408671992663],[-120.35309191458298,-63.181940408281086],[-120.3609775008481,-63.15271278410178],[-120.4257807804575,-63.114026416033646],[-120.51659201306586,-63.101219833192864],[-120.52817357218197,-63.04884376712346],[-120.607799647729,-62.981047813642625],[-120.69293634778668,-62.95959168795758],[-120.78170489830295,-62.94826646141186],[-120.7986493621301,-62.926575013459264],[-120.90423718558793,-62.89712914951925],[-120.99631460506635,-62.91497537696062],[-121.07686499860179,-62.9729394373913],[-121.1889961707422,-63.02361085560216],[-121.27560287389974,-63.09479064658827],[-121.28370356109195,-63.13698979543717],[-121.34125987666567,-63.14508651921163],[-121.3948951716287,-63.171104750961035],[-121.41845074606071,-63.20547801637582],[-121.47160333887776,-63.225750475666736],[-121.72815294811997,-63.38720632951582],[-121.82677824466204,-63.45944495966951],[-121.94109665367142,-63.50556040738854],[-121.97494069214484,-63.54203445894945],[-122.04386553382842,-63.557645071745036],[-122.12615578731804,-63.61490652394849],[-122.17726380961838,-63.636783678308156],[-122.21607664855183,-63.669309945636805],[-122.22143466732551,-63.71286794114979],[-122.18863862075912,-63.736574512777096],[-122.26589790518759,-63.74954321265236],[-122.39122152800795,-63.789731122105074],[-122.5368227209431,-63.82469395338397],[-122.59180290881125,-63.849396777843225],[-122.70284549388111,-63.83730671169843],[-122.76435563273384,-63.85083882735956],[-122.79908624758401,-63.88492495424717],[-123.01444882394424,-63.99169807049035],[-123.04442554485018,-64.01133072005527],[-123.19315103093052,-64.07164392722],[-123.22796108407326,-64.07105495384263],[-123.31268236446213,-64.0958097283448],[-123.41554044517538,-64.09846214982657],[-123.51498132006121,-64.16226233863327],[-123.63757123360574,-64.17412865024333],[-123.68350578634417,-64.19285341578224],[-123.70862981281223,-64.22581002001856],[-123.81353650925108,-64.2589584791671],[-123.87134431160993,-64.29661674776086],[-123.88141707689539,-64.31819521639498],[-123.93220739076371,-64.34587392594442],[-123.96750366659698,-64.39834394424966],[-124.0667493343647,-64.43116513231959],[-124.10400016416709,-64.4655463006286],[-124.12741142282167,-64.5381450584024],[-124.10480449059341,-64.55510067340226],[-123.99426651913471,-64.59450714861799],[-123.90844440303346,-64.61227231943535],[-123.7987858386984,-64.61309241363128],[-123.79110352503369,-64.63043732870962],[-123.71100734144018,-64.6690531239907],[-123.68867255258372,-64.80369183531367],[-123.72069368014832,-64.85199033324429]]],[[[-93.63302348917087,-62.821231744723384],[-93.67532056181636,-62.63409322815795],[-94.12136800012522,-62.65032603291262],[-94.06563064618526,-62.49506385136543],[-94.32008602059118,-62.372268673551],[-94.68687444976342,-62.23904067390119],[-94.90380162295352,-62.13051311353796],[-95.0960864656854,-62.05469882099991],[-95.34615961797566,-61.9227834846231],[-95.72860869478612,-61.786968819265475],[-95.97024761249916,-61.63651848095553],[-96.27183935466437,-61.53163124531215],[-96.50601891257084,-61.42351064494674],[-96.43711841541428,-61.359568138852964],[-96.73223120884316,-61.28564989161474],[-96.9695544353814,-61.21442631209753],[-97.23373420702167,-61.10159055242402],[-97.45539862305677,-61.07591311627753],[-97.83520269989009,-61.02672150922166],[-97.9767197330135,-60.96952504439318],[-97.97801978821632,-60.91927934991468],[-98.10654808675268,-60.91669759162879],[-98.12330387533243,-60.84431858316265],[-98.23470198517339,-60.79947681732258],[-98.3151729638429,-60.753783778140345],[-98.41974106710208,-60.76894241114262],[-98.60557802405104,-60.71622131521399],[-98.6714713125523,-60.65289058478244],[-99.01106361982511,-60.660620197868326],[-99.13896253396307,-60.59582053716288],[-99.12518555705962,-60.539370645387876],[-99.28061724516068,-60.510428709259614],[-99.26612683869863,-60.47551196353162],[-99.22672178304593,-60.44232352501206],[-99.2909642628834,-60.33674991757927],[-99.43831571893334,-60.280886122234605],[-99.48605482022356,-60.285538695979156],[-99.58740014299552,-60.24945075277379],[-99.66121649530793,-60.21215814844318],[-99.9983024721458,-60.132977427264485],[-100.37892617104457,-60.32590869182872],[-100.47094973575265,-60.37473128812229],[-100.7510229794184,-60.44375732685764],[-100.91870277752389,-60.518231283502075],[-100.75426808060678,-60.54801153513125],[-100.7279635181414,-60.58788426933927],[-100.77025022146488,-60.670775731699536],[-100.83765963309796,-60.700269074346345],[-100.9806549099767,-60.69867258287714],[-100.85383114182486,-60.90979067462029],[-100.91702634370635,-61.068243773707216],[-101.21485647969175,-61.11478392154958],[-101.24806943016846,-61.1439434812562],[-101.65802642193877,-61.3648413114857],[-101.82733933215447,-61.50038403331455],[-101.92411689782573,-61.51540917006643],[-101.93861599942412,-61.418568278360134],[-102.22697140983931,-61.13519863323379],[-103.22044870323357,-60.83251668232413],[-103.78686265107469,-60.658488877387974],[-103.86261908111172,-60.61274692636715],[-103.96567896439197,-60.50250111121763],[-104.09035253002376,-60.49346175378645],[-104.41279346154855,-60.44779273595849],[-104.67111286084092,-60.353722358721505],[-104.65843359778265,-60.05454820992114],[-104.68262212845188,-60.01386996861868],[-105.40771309778552,-60.11684740052473],[-105.67605466201053,-60.34325908161859],[-106.32427729450994,-60.251756382564004],[-106.3564632283167,-60.36450966882356],[-106.96147132935785,-60.3213666768987],[-107.05665528910416,-60.08288180212039],[-107.25773091220869,-59.573323897294465],[-107.40301439062591,-59.20025417526965],[-107.57413404287796,-58.755625236891824],[-107.80533612109419,-58.145758106376135],[-108.04840468900383,-57.4929281579828],[-108.26342883087413,-56.90548666038567],[-108.44186579755898,-56.410924492522504],[-108.55467470562442,-56.09485835702866],[-108.76621500159388,-55.4951045585693],[-108.91413239863932,-55.07022836003019],[-109.11934431851122,-54.473227584694705],[-109.27116859579968,-54.0259179197149],[-109.39124673078668,-53.66874227730796],[-109.54296895919256,-53.21300550305859],[-109.73206758548525,-52.638240942537806],[-109.87214542237429,-52.2074870859531],[-110.10575901400837,-51.47972240978511],[-110.23013516719136,-51.087398975707586],[-110.40811203302904,-50.520154668195325],[-110.54063158384795,-50.09325875185044],[-110.66464588641601,-49.69031257525565],[-110.78813729812016,-49.28565148536907],[-110.97201939323232,-48.67684601895657],[-111.09557775795112,-48.26358542930743],[-111.23084766645447,-47.80732311439721],[-111.34439361385158,-47.42117569870127],[-111.51644926824027,-46.83082577908407],[-111.63965141271271,-46.81021077173408],[-111.85909617835735,-46.807176377946476],[-112.07542186996062,-46.71471671702448],[-112.22364422019375,-46.67609731159816],[-112.37853183079834,-46.654992673356205],[-112.53631433838954,-46.612275686936854],[-112.8773404039807,-46.47751638943645],[-112.93379590032856,-46.4458806028634],[-113.14946997193485,-46.37844619872536],[-113.4492696073456,-46.305266421232936],[-113.58525613112562,-46.24815277415832],[-113.63838518954998,-46.23956655242656],[-113.75035129187393,-46.261905076721746],[-113.78845716142769,-46.28804584974727],[-113.92327366112922,-46.266366166590245],[-113.99189541495079,-46.27585065211913],[-114.01971493953437,-46.30040124296122],[-114.15585965427178,-46.339527312638154],[-114.21175746331907,-46.33961720735867],[-114.28825609355636,-46.36793885407286],[-114.3275522491458,-46.420026325153266],[-114.37093659496192,-46.42628573546393],[-114.45907674146142,-46.47697531254049],[-114.57947131553877,-46.5276887977531],[-114.66716742390349,-46.53939040221476],[-114.76435310829359,-46.61753365486082],[-114.81019224864941,-46.683243223413285],[-114.98155653350082,-46.65143047447139],[-115.11964338607794,-46.687066609411396],[-115.17816153450406,-46.61628653009724],[-115.24081920699008,-46.59277828952915],[-115.36623945384336,-46.6030348304994],[-115.56256972473471,-46.53622774863361],[-115.62162777032034,-46.53416173715575],[-115.85763355096209,-46.437818507108595],[-115.99719355022376,-46.399613326182276],[-116.19241984956882,-46.39351628209842],[-116.37350407649481,-46.354075884107694],[-116.40781757967045,-46.365244499104385],[-116.56914415049792,-46.36651318347384],[-116.63839703190806,-46.37813683979091],[-116.78454919031346,-46.286523785999485],[-116.89891595257703,-46.26717309642218],[-117.03849551917642,-46.30672390022235],[-117.06277247544617,-46.25917679292588],[-117.30335365605241,-46.153942619933886],[-117.43610722265473,-46.18169037833629],[-117.47721352913928,-46.14348539794934],[-117.58761743615327,-46.13001447689743],[-117.6241702718435,-46.06261989045473],[-117.71064790989455,-46.02359277577984],[-117.82023178393368,-46.03560864266048],[-117.8907679691307,-46.10123208525045],[-118.02680922942184,-46.05978940176171],[-118.12297235429438,-46.06316510600337],[-118.1844177710907,-46.09051864024709],[-118.21426819006922,-46.14062219298954],[-118.20873372502561,-46.19026328119315],[-118.33511160903882,-46.16337516945552],[-118.35538645270162,-46.13549885982747],[-118.45217622973644,-46.08860047914798],[-118.6111214687086,-46.086909703403045],[-118.67368974902804,-46.050653063622796],[-119.00402895256147,-45.978158445216955],[-119.23704746062761,-45.95908340839898],[-119.32076359131389,-45.98538954749193],[-119.35943907753014,-45.97750318420615],[-119.4535665670409,-45.993182890397314],[-119.49789966175433,-46.01792239651035],[-119.58716861189374,-45.99134841751418],[-119.66249693468836,-45.99447608119379],[-119.73111741607825,-46.01545231394234],[-119.7777545330666,-46.09229891632828],[-119.84453654119086,-46.08896735969233],[-119.89862075631729,-46.10830534188324],[-120.11835181804666,-46.114664373462894],[-120.22403132679106,-46.14473247634332],[-120.2629237429546,-46.183167375748766],[-120.3700393788062,-46.215962322920205],[-120.46863100824804,-46.223543868017074],[-120.53216027847904,-46.2541069054022],[-120.68491858134942,-46.26094539889579],[-120.78673607294876,-46.24355642180354],[-120.75433727546267,-46.126949482120466],[-120.80771979953451,-46.0761812118865],[-120.85607795354647,-46.06418489999731],[-121.23474132215014,-45.69636221383884],[-121.24734502679722,-45.64805600779209],[-121.30621088200594,-45.59148000497481],[-121.37009696549173,-45.561269975446635],[-121.5193817013122,-45.52381620008958],[-121.60438477522119,-45.490672223301694],[-121.75321606535427,-45.48698513211273],[-121.89382313553763,-45.43931800210264],[-121.9697442717044,-45.44564646230902],[-122.02849279877258,-45.42753331348803],[-122.07909307544267,-45.44696556050325],[-122.14390274693797,-45.43508010167497],[-122.24355948086972,-45.440122913348354],[-122.45216361374436,-45.516614009224945],[-122.66508079081873,-45.50217014504628],[-122.79085698607805,-45.52085487301738],[-123.14509365882589,-45.39208650191026],[-123.1835169609357,-45.383761413963576],[-123.34644929475022,-45.26817991713279],[-123.5099491551186,-45.14332058830912],[-123.62526295150424,-45.08032529344119],[-123.77658634318439,-45.01300341907814],[-123.94354840211543,-44.98197444367584],[-124.05381422878948,-44.92810954141701],[-124.23545933196601,-44.893026704669126],[-124.31842186390065,-44.901353526384156],[-124.38431100610941,-44.80841965609725],[-124.42300856959682,-44.77757738278679],[-124.4928093721215,-44.760937902706495],[-124.67026789081063,-44.700583758850165],[-124.82131768347402,-44.6280616325801],[-124.87975866510935,-44.61624752562233],[-124.9897605261802,-44.64429710536029],[-125.02604113655669,-44.687915458575596],[-125.15490280289774,-44.72537273810092],[-125.28879407082671,-44.82782194863002],[-125.45013293030094,-44.98576695328147],[-125.65562132565194,-45.19516121750826],[-125.67807078339077,-45.227806474258855],[-125.82758851034215,-45.34799341391008],[-126.07670871103913,-45.47602865452794],[-126.21402462749438,-45.519625302055466],[-126.34404952674213,-45.54725172707208],[-126.4248783221625,-45.549245711735075],[-126.58174157728149,-45.51667688762285],[-126.65752503950604,-45.481350785247486],[-126.70460694035366,-45.4010765786104],[-126.77422343776428,-45.372256236522446],[-126.95026058683257,-45.37685661106302],[-127.01439676561932,-45.39258775421731],[-127.18736040465774,-45.405777472287646],[-127.51114830478394,-45.47961100170547],[-127.65074504212876,-45.520432852251105],[-127.82445279857791,-45.64390908278381],[-127.99625663962587,-45.7499677709846],[-128.12988681720125,-45.84908004887474],[-128.37414211321763,-46.007221143094085],[-128.59519504580751,-46.12554406837409],[-128.81725862871215,-46.20494677833786],[-129.00397657479428,-46.261759737515646],[-129.09264031618554,-46.2720545637728],[-129.2301384596311,-46.26486327362362],[-129.3310183324936,-46.246013780612806],[-129.5865949480307,-46.18036910844476],[-129.6993233773617,-46.208022557204536],[-129.90018784461702,-46.29249890041401],[-130.07652379768695,-46.38128553654798],[-130.24480768826564,-46.484032932022856],[-130.587716735958,-46.79696165002718],[-130.74437524044865,-46.90740812369111],[-130.88968151273252,-47.04053063616986],[-131.03588042775107,-47.306798050923874],[-131.095293879767,-47.61041560210435],[-131.13241026049386,-47.70587823553949],[-131.2098727109864,-47.81057530154345],[-131.4723569338653,-47.98461957623595],[-131.5238503567188,-48.04249519455056],[-131.63598408040002,-48.11662426037172],[-131.81124697139492,-48.1848529908968],[-131.88031911073836,-48.220939112829896],[-132.10601207768806,-48.29346513907353],[-132.16227849222108,-48.3049969415557],[-132.4629976617884,-48.29188102203949],[-132.61298487770586,-48.30468870877354],[-132.78344469158816,-48.296566928041955],[-132.81785213434577,-48.284473771491776],[-133.0824307493581,-48.296654515018226],[-133.27139999986503,-48.28819034541382],[-133.42108909282666,-48.268134342639264],[-133.55261422766986,-48.24019776397477],[-133.8109272266874,-48.1970126521808],[-133.8752488518695,-48.177991151516636],[-134.00505696778063,-48.195259163701124],[-134.07268530272714,-48.28281654150691],[-134.06925297683617,-48.42258273326528],[-134.11620624597072,-48.52997466411371],[-134.11317119384833,-48.55334844738023],[-134.17140406241447,-48.61946423096087],[-134.20668838571618,-48.744161886235254],[-134.27176319560908,-48.790690073001244],[-134.31786057532898,-48.887890151808875],[-134.41886002849589,-48.920168986515804],[-134.6430073393043,-48.94756731830383],[-134.83306730484378,-49.01574513231893],[-134.87791633349406,-49.05301192703704],[-134.87806666876367,-49.09169083669747],[-134.82284988059763,-49.13748740709044],[-134.7733786596231,-49.15284672668721],[-134.69071353431886,-49.14328882138763],[-134.61258713769368,-49.15783642487043],[-134.49697856755733,-49.195367805759545],[-134.3902143550343,-49.250503845801525],[-134.28312889550244,-49.325790046295374],[-134.18707378883457,-49.409621328136026],[-134.12825862909267,-49.55401945070659],[-134.0550616626715,-49.60882040972549],[-133.94515305517686,-49.66414535720384],[-133.8220897477241,-49.6872060011053],[-133.7897846550944,-49.66884094616549],[-133.6529636608448,-49.71687387827708],[-133.42803468144348,-49.92642844768245],[-133.0839781902855,-50.22666186786727],[-132.99788599698437,-50.31468348780965],[-132.90977154069748,-50.37255094505593],[-132.684014004993,-50.50775080645516],[-132.60050195993045,-50.586281983437075],[-132.49415066780202,-50.834699506048764],[-132.44502797914436,-51.128365779753736],[-132.52864353512157,-51.14927332541784],[-132.5763569095692,-51.182769054105066],[-132.57448206522244,-51.22178127732433],[-132.51349001632187,-51.29544174666189],[-132.40084792247836,-51.36078779550038],[-132.24993684333984,-51.4075987455672],[-131.98950309427156,-51.4666337374796],[-131.72051257998712,-51.5513374427994],[-131.56562228997817,-51.62483914153219],[-131.52892544164044,-51.660596619176054],[-131.94007085502923,-51.85044041506972],[-132.16130389576705,-51.94257401993113],[-132.41065491551868,-52.05372401928461],[-132.58033068793372,-52.01187265375514],[-132.8323068487201,-51.98758684242732],[-133.19271584461592,-51.97114600885176],[-133.5293165278823,-51.9962705552724],[-133.66365204140143,-52.01359612469308],[-134.24924450331088,-52.103669429630024],[-134.62142330743987,-52.18411516251318],[-134.97007122776205,-52.271409565272066],[-135.22010573099692,-52.342189280970445],[-135.400343201185,-52.383302931253986],[-135.66782623700732,-52.45078908794355],[-136.00106660309348,-52.56031255894429],[-136.19638846018688,-52.6166295548488],[-136.3533903038026,-52.682575891954485],[-136.5989893164146,-52.75407261746703],[-136.8192662591737,-52.79293059871485],[-137.0004662193133,-52.81856798078029],[-137.21939280142226,-52.86296456505788],[-137.31230713784163,-52.89355659707828],[-137.40680421260726,-52.9625564632194],[-137.44549146338306,-53.03870185987711],[-137.4461599996293,-53.079172732591196],[-137.42060308090382,-53.15788745194106],[-137.38782578970043,-53.18718471652657],[-137.30212097554994,-53.230465741167194],[-137.21283455637854,-53.25643778062113],[-137.18313907375938,-53.29560803930265],[-137.05601304974354,-53.35650613612242],[-136.93449685168437,-53.46522132273879],[-136.74422993351686,-53.546663550351006],[-136.53492636655466,-53.58646465048188],[-136.41622649928044,-53.615884115091795],[-136.30151382006477,-53.65891421154571],[-136.377705269902,-53.69707559253591],[-136.48070830068863,-53.800618392006456],[-136.51447281911982,-53.86286039987727],[-136.4924219442938,-53.93510222307458],[-136.44785078153183,-53.99994427718148],[-136.36273862578793,-54.06876850999618],[-136.31318735116352,-54.09310992824315],[-136.32657260644967,-54.11863351887993],[-136.2741644231542,-54.177992396348635],[-136.12096907945892,-54.27735992734912],[-136.06924277720333,-54.33829718694605],[-136.06995860968573,-54.35854782602813],[-136.13641906882302,-54.38664285194577],[-136.168697529661,-54.43032456254739],[-136.20168787721965,-54.51903838199646],[-136.16589018001227,-54.68149071205819],[-136.03145209626098,-54.78902572870738],[-135.96771646278256,-54.82987766195607],[-136.06190482249485,-54.87606714724293],[-136.07220687930945,-54.916713285641045],[-136.00698571988744,-54.982293818864605],[-135.88420669968454,-55.00240308463292],[-135.81049079876684,-54.971092297874385],[-135.77052445548597,-54.931023377743124],[-135.7641397340638,-54.88744404077061],[-135.53564894334355,-54.95016040642421],[-135.36086906330576,-54.98304290067503],[-135.15633360892372,-55.04145664800234],[-135.01260171045504,-55.0750169255108],[-134.71373333761048,-55.18584758400738],[-134.46596586731184,-55.190405252134084],[-134.41067408655934,-55.18579677842],[-134.07273983603474,-55.106916491383615],[-133.94668400602012,-55.08273486298686],[-133.8484317685854,-55.07722517663044],[-133.75737774613592,-55.08352385348079],[-133.54444455225067,-55.118429310989846],[-133.40716017008793,-55.114222476367814],[-133.36386420944496,-55.10088098977218],[-133.30051680121548,-55.12293877988643],[-133.20047361456236,-55.12803543588635],[-133.07877895769792,-55.16464759560718],[-133.0030207761922,-55.201823904381996],[-132.9158523279851,-55.26140915328251],[-132.88600439714386,-55.31810872999533],[-132.81548828239605,-55.3913595560654],[-132.7378532394202,-55.41309643814134],[-132.41378407733788,-55.53350924934543],[-132.3665427477113,-55.5477771522347],[-132.28999855422668,-55.536699764198204],[-132.17334899202578,-55.48191502638171],[-132.1305681359781,-55.47577682281105],[-132.03335002346802,-55.41649794983034],[-131.97261722469605,-55.29777531628047],[-131.9143104971865,-55.25435721535514],[-131.76547976664884,-55.20957924806012],[-131.69021885198245,-55.24142977886132],[-131.48613678567628,-55.34609482763696],[-131.45933987550964,-55.35156077662873],[-131.05517837454937,-55.55447056093535],[-130.9526564228825,-55.571273044787404],[-130.8588604915933,-55.53427430561601],[-130.77219423035814,-55.5746933297236],[-130.53608879861406,-55.769774084682936],[-130.56323392199036,-55.93986310913705],[-130.5527636817157,-56.0284183473752],[-130.52462954575032,-56.09071954394742],[-130.46941518026227,-56.17488787952658],[-130.45876670988494,-56.261898335005576],[-130.4273084784126,-56.33008875499699],[-130.4445934391916,-56.38591144881307],[-130.62205830861166,-56.51405913931045],[-130.7074043013894,-56.530762837301296],[-130.76176731050964,-56.570407210048934],[-130.77024673760747,-56.599070022084575],[-130.8403538603577,-56.61816793430774],[-130.93091325583148,-56.69182461576585],[-130.9827983094919,-56.70383419195181],[-131.1050936406346,-56.700678048006345],[-131.20078939094037,-56.689703256217676],[-131.30585563790316,-56.70466817936299],[-131.36591400297254,-56.68671136620869],[-131.57101128991167,-56.70269498291062],[-131.6281912318435,-56.67829503446872],[-131.6805711612501,-56.606961691661354],[-131.96098896318685,-56.53291461948848],[-131.98066542005844,-56.462603432970404],[-132.027269667283,-56.423756782718556],[-132.12082108906557,-56.39450562274125],[-132.21684550863662,-56.3923185754173],[-132.32792423249245,-56.37545755625226],[-132.45282857495968,-56.399461148035215],[-132.57115401765668,-56.45173266229894],[-132.63115863547893,-56.513802403811944],[-132.58767693126072,-56.58185276289155],[-132.4976499614908,-56.64134591997093],[-132.36021773295514,-56.66372566170502],[-132.23061900316665,-56.65985943259844],[-132.5857253993647,-56.912194197331196],[-132.6365705505558,-56.939182225793104],[-132.78754535326493,-56.949361706694795],[-132.87470224912164,-56.99588918162037],[-132.9103184729241,-57.04593358712184],[-132.99400424844296,-57.071771212170106],[-133.1148720538197,-57.133981786134086],[-133.2673137752058,-57.13495219013691],[-133.36496361532525,-57.08460315021181],[-133.46416928294252,-57.00640128782621],[-133.59715861618605,-56.95343122975246],[-133.6627615539664,-56.887583993167254],[-133.77918643178285,-56.84154801707889],[-133.88564718697853,-56.82179805253674],[-133.94870547743201,-56.79452061503],[-134.07313334759738,-56.76035706374676],[-134.15976304356167,-56.755935330019504],[-134.2982327665074,-56.760646823404926],[-134.46818048809027,-56.778757699186386],[-134.59033904929635,-56.8080235936431],[-134.73664563183192,-56.86679461810377],[-134.92503842247874,-56.97346668701362],[-134.92860393892448,-56.99687243161954],[-135.02927898211428,-57.00305742123958],[-135.12956532699667,-57.045627561275516],[-135.15015361807465,-57.098586520616834],[-135.15644638015272,-57.175843759030116],[-135.23450341119178,-57.266547704570534],[-135.30312497039418,-57.275367530963166],[-135.3687471657386,-57.332423521691865],[-135.3598856553265,-57.382811799398134],[-135.37717091322168,-57.41984981216255],[-135.43262494810182,-57.44522701098851],[-135.50072817471343,-57.430113518433714],[-135.61612077145645,-57.4442394838989],[-135.67065238304548,-57.480579600114474],[-135.67297769507707,-57.5596514181382],[-135.80975513022065,-57.62610764219959],[-135.83926100612968,-57.69046090580136],[-135.89428773076517,-57.72575558443868],[-135.90139957123552,-57.76220645070455],[-135.95827837338692,-57.79648847937982],[-136.0136996275188,-57.85823689315144],[-136.11745694685206,-57.89940478003036],[-136.25282565028584,-57.969996981598015],[-136.32503790896772,-58.01845635435152],[-136.42588940145606,-58.070837192115356],[-136.49274744949085,-58.08405726651856],[-136.53557436925755,-58.11239730533038],[-136.63041726447216,-58.14109633573974],[-136.64939643194003,-58.164638188757294],[-136.7665329084922,-58.147793481341125],[-136.82322689786054,-58.16303793266338],[-136.9427163409002,-58.244455301687175],[-136.94703222924613,-58.28292780201232],[-136.91045129726265,-58.322136166630315],[-136.94868801464014,-58.367091946504864],[-137.00241530912902,-58.459997959857375],[-137.11852697516053,-58.50053900739079],[-137.18912013269934,-58.56512923464949],[-137.20780366189248,-58.61604786416749],[-137.257697996203,-58.67432828048818],[-137.27140068854936,-58.71873903988857],[-137.34025118546592,-58.81504722976308],[-137.32699733926037,-58.89353067395061],[-137.28603332630328,-58.97951041382299],[-137.12444609852628,-59.07950903779108],[-137.13358024902047,-59.100715540013034],[-137.11200085638188,-59.183749810835394],[-137.0362436857228,-59.26832420916983],[-136.96699315330176,-59.298419207519956],[-136.92525792896987,-59.35498841914954],[-136.90610503944274,-59.451226215291875],[-136.8413075275642,-59.5441424073235],[-136.70673478834092,-59.59616390835946],[-136.56792856593174,-59.62682380209636],[-136.48344364672815,-59.630408064186156],[-136.4084958083393,-59.61298889296643],[-136.38014205097593,-59.63157984894319],[-136.4401375577768,-59.66655534302424],[-136.45144099856998,-59.69612895869013],[-136.4232106894392,-59.754085285819166],[-136.3873390479912,-59.79132490807064],[-136.3323713643421,-59.82098962692184],[-136.35284426994224,-59.85623268942818],[-136.3367971702334,-59.8814209715931],[-136.37294971144388,-59.92037596488548],[-136.334709405633,-59.99958614127777],[-136.3958442191005,-60.03118955594016],[-136.47037798760476,-60.04047532788127],[-136.50760520030525,-60.06315313864025],[-136.56620886754084,-60.07014960292696],[-136.63645059512712,-60.09871263559077],[-136.7694244375382,-60.10592337925101],[-136.88165373678936,-60.16901264151568],[-136.87861438227955,-60.21965662940224],[-136.8105195222903,-60.29092384109844],[-136.769768413459,-60.313172570926014],[-136.7046865655163,-60.31904373199935],[-136.6004396657708,-60.37081551296526],[-136.54792659217128,-60.43036699275272],[-136.47263976661384,-60.494965483587045],[-136.34254737009718,-60.57780614726276],[-136.20703058112875,-60.62378945713695],[-136.08591744699956,-60.64434050793324],[-136.00193705691598,-60.731549945566904],[-135.93407087715482,-60.75835984210904],[-135.8674784121565,-60.84562850643096],[-135.8413749710514,-60.89336988358994],[-135.79887322760825,-60.926819992257435],[-135.71115963480204,-60.972095928559774],[-135.7881471096191,-60.99220047799992],[-135.83399348119437,-61.019135347377066],[-135.81902101263955,-61.10434789817668],[-135.74797372831765,-61.15448005208403],[-135.72306469581704,-61.20780491432166],[-135.64194696396035,-61.27883414460667],[-135.52448505101773,-61.33233320645516],[-135.48725003778998,-61.39067688030099],[-135.41579428446917,-61.43561827202617],[-135.29844798916218,-61.44082381402932],[-135.21647194297606,-61.473983595185764],[-135.1013249735548,-61.45579265333155],[-135.06459714038547,-61.4233481380531],[-135.06920514094767,-61.40147858031664],[-135.13837895899158,-61.359526920373696],[-135.2424721459373,-61.35486122047578],[-135.30393473493842,-61.324564562402024],[-135.33094896613846,-61.29151428411296],[-135.09333572357804,-61.33403343993594],[-134.92241346573917,-61.342419758291335],[-134.83840916315492,-61.33854506584995],[-134.51954325503013,-61.33857968929313],[-134.2822015680981,-61.32298114451813],[-134.2383415944301,-61.34700782099959],[-134.14264351230025,-61.36628234810108],[-134.04515030567282,-61.37173832993068],[-133.94361034015932,-61.36365033683749],[-133.88405388983068,-61.34289503297884],[-133.86093732492736,-61.296306684427925],[-133.71099360770933,-61.25739544495839],[-133.69581892750085,-61.244204222235574],[-133.58318692588568,-61.25557576396991],[-133.52627459871692,-61.24877190492468],[-133.3906040533722,-61.27200801946248],[-133.39334815374465,-61.3210291986037],[-133.3624114869243,-61.348156464084184],[-133.3079636978005,-61.36647019224462],[-133.13991634701352,-61.3818666761364],[-133.07588883677803,-61.375583291377446],[-133.03946572996657,-61.42904329562887],[-132.96922963678318,-61.50065828793794],[-132.95104765498576,-61.55671170443929],[-132.90959378869667,-61.590441343166326],[-132.78062526177595,-61.74137610105141],[-132.85125372436636,-61.803637152784475],[-132.98738458317294,-61.840175085733264],[-133.04411216867763,-61.86448255408951],[-133.07297812511305,-61.92105000151805],[-133.14014804547242,-61.94937253641584],[-133.22724728878737,-62.01294842440728],[-133.23927519648188,-62.07216141140213],[-133.19062408146587,-62.18791179146921],[-133.13549637726368,-62.24948893977453],[-133.08018109526768,-62.26302192037743],[-133.0307524828815,-62.30983597234697],[-132.98247788397273,-62.37706448475943],[-132.96604213809613,-62.41708817735166],[-132.99177577365137,-62.51672487397203],[-132.96732503914905,-62.57566872582904],[-133.02292577811525,-62.60012994124849],[-133.04066130516108,-62.62498762896453],[-133.13490155542064,-62.661312828825174],[-133.30011335272184,-62.656150947092556],[-133.40328126292655,-62.66476437571889],[-133.54539793031748,-62.70613885273273],[-133.56137142831125,-62.75777202399592],[-133.51708627226049,-62.78753184909754],[-133.44440903317644,-62.80158880882973],[-133.399219603918,-62.82554842006201],[-133.23024310999838,-62.84682793633393],[-133.111361453415,-62.83992889306772],[-133.05664668521865,-62.85056754384041],[-133.05376822019485,-62.88974098116262],[-133.0132126072026,-62.92231024971183],[-132.9278271514026,-62.93802693212243],[-132.7852383075081,-62.93834083519056],[-132.71184306359996,-62.923720980393114],[-132.6846350127428,-62.896050164242865],[-132.57419582639918,-62.880939594979246],[-132.52612582751237,-62.855743750215936],[-132.38671926607955,-62.84260029817012],[-132.22191498467197,-62.805009166944274],[-132.15845654546837,-62.850036352739465],[-132.18013142120736,-62.88776889357512],[-132.16062218022304,-62.9585947193029],[-132.08502157095685,-62.98788982602519],[-131.97786423630052,-62.9781645784029],[-131.8734511898735,-62.99111875850242],[-131.79316248653726,-62.97895713768271],[-131.6889903694402,-62.93649389136222],[-131.6625568694108,-62.903175522891395],[-131.52714179191912,-62.805493194161734],[-131.37033353430493,-62.672877507417056],[-131.35285349542173,-62.64082927454219],[-131.36689924513684,-62.614842273229655],[-131.01778126965237,-62.58778799329382],[-131.01343033432792,-62.62529912995119],[-130.97886393191888,-62.68364997834644],[-130.90316930153068,-62.71601373632542],[-130.79672746060544,-62.72283643900112],[-130.70971928207786,-62.68694195275331],[-130.62436394371144,-62.74416179046263],[-130.614863958453,-62.76203193154727],[-130.5368981381113,-62.79597515050125],[-130.47934353507674,-62.80162489198634],[-130.36915327196476,-62.78260250155024],[-130.28193147488162,-62.757485085211506],[-130.2145150424267,-62.718581530215516],[-130.18254788139737,-62.7278069993376],[-130.01660138665656,-62.746986047015945],[-129.85962118264035,-62.88206927096941],[-129.5814111651091,-63.17724397732134],[-129.58633326011218,-63.22857378270252],[-129.5379992067536,-63.25600120212199],[-129.42444052787926,-63.275047198460626],[-129.35162534120371,-63.256423703399186],[-129.28336227021413,-63.269893948668226],[-129.1505703681837,-63.26948172095191],[-129.06215055230672,-63.25362241290152],[-128.98359419801687,-63.213214331117904],[-128.89574846648324,-63.19295828392918],[-128.86457675502595,-63.155911354585925],[-128.34128411989778,-63.07286473668986],[-128.25665515679674,-63.073943643715],[-128.15532997389877,-63.142917111667494],[-128.19998478005783,-63.21112416595244],[-128.32644672787134,-63.37803882044965],[-128.509964302317,-63.62899364151774],[-128.7627765842169,-63.94994705607278],[-128.8535443141968,-64.09281675767708],[-128.89003027677288,-64.12587358660504],[-128.92343348660637,-64.17884722431398],[-128.96808289818955,-64.22288124287992],[-129.1496177131652,-64.4325763547485],[-129.4708061302059,-64.74360910441645],[-129.51716257849222,-64.79825047427589],[-129.6430106448786,-64.83054456483487],[-129.78976861303698,-64.8878926957942],[-129.92267817939543,-64.92443919737804],[-130.17514232623554,-64.97623028164018],[-130.2801779395456,-64.99122878224277],[-130.39215320343655,-65.02697264967864],[-130.50571531422804,-65.05461426970274],[-130.82892941734767,-65.10912208829893],[-130.96889423994975,-65.13787874932306],[-131.10439209764726,-65.19791018674502],[-131.2154354570674,-65.23170596993212],[-131.44053330196078,-65.27204010829848],[-131.5657854757898,-65.33466364439592],[-131.7250585459523,-65.37802024945051],[-131.7667583973419,-65.40031486848768],[-131.84476532195927,-65.46950521406828],[-131.89240645503583,-65.49521289515314],[-131.95813470993278,-65.58379810213648],[-132.0201177228237,-65.6185077836785],[-132.0673874058575,-65.62896906962709],[-132.49840988513935,-65.59834855123954],[-132.65988298784555,-65.59958954910984],[-132.8911704884792,-65.59344086094096],[-133.20771856715612,-65.63695699103177],[-133.4526973339816,-65.6512672322926],[-133.6408116028957,-65.67530639206514],[-133.77785849031366,-65.68132544728186],[-133.89845623780553,-65.70697121661884],[-134.0181101450682,-65.75567335179741],[-134.11330804458035,-65.77923279863249],[-134.24629755214497,-65.796280152934],[-134.31017484304712,-65.8297081537283],[-134.48892505522807,-65.8707364082748],[-134.69457849227823,-65.9611135819993],[-134.8306675417939,-66.0091329609894],[-134.91055557817157,-66.05008499485098],[-135.00615490195557,-66.07670281971775],[-135.0605698874301,-66.08329855147947],[-135.12000897889396,-66.10598641363589],[-135.1851066440811,-66.10691049837867],[-135.3651615316741,-66.13286967234554],[-135.50278933548398,-66.168040901086],[-135.58534757680815,-66.21077088977097],[-135.8575088536784,-66.303426389975],[-135.94135465364644,-66.30870388659459],[-136.0677582307118,-66.32819927453068],[-136.32823917513764,-66.3793742680281],[-136.49224911264648,-66.39817065868888],[-136.5834311845889,-66.39985690336057],[-136.77503056933384,-66.37279793917422],[-136.9071518593043,-66.38498897342964],[-136.98291816923677,-66.37881735814007],[-137.04024440128217,-66.38726588354476],[-137.1995668168115,-66.43636331845867],[-137.3576851853608,-66.43172427741811],[-137.46456012890755,-66.45068888498119],[-137.59414498063163,-66.48184183372905],[-137.73987802433885,-66.4443269863866],[-137.88977954336832,-66.44534492156626],[-138.03946235727753,-66.48143793327581],[-138.081650005807,-66.50204001340401],[-138.12352943024803,-66.55630594159899],[-138.20779100542174,-66.59375938942988],[-138.22978339734536,-66.62050676481881],[-138.37182419255922,-66.6932662560353],[-138.44822780159691,-66.69266604856709],[-138.55342524730509,-66.70668080062917],[-138.7073908175504,-66.73676176287078],[-138.78019553525826,-66.78152047407205],[-138.79010064893438,-66.83648416046164],[-138.7713681726811,-66.90078162123642],[-138.6699099068895,-66.98925344262912],[-138.54392119153988,-67.02611853893868],[-138.45415568078053,-67.04001293401129],[-138.40155267080712,-67.03651716954833],[-138.27588935011102,-67.04970012221206],[-138.0767579010215,-67.03186665313879],[-137.97343986653766,-67.03903072769597],[-137.8647538525387,-67.01837419991097],[-137.7482458594463,-66.98540480915553],[-137.69817302057473,-66.95811140234377],[-137.6450574940947,-66.90620797337205],[-137.48203228462896,-66.8839332579044],[-137.38397422722173,-66.8823649043124],[-137.1237272405208,-66.891054749482],[-136.88973612882918,-66.90497024894573],[-136.72931475647417,-66.94288865430327],[-136.62891973386732,-66.93819794355659],[-136.58213013973634,-66.91085551205856],[-136.45077218809848,-66.9000821324619],[-136.17435279042914,-66.89868290637222],[-135.94034524595145,-66.92234648620573],[-135.8494195516393,-66.91011245483521],[-135.77275480667043,-66.87834461552495],[-135.77612351558503,-66.82976893521888],[-135.84497843441292,-66.77793372736201],[-135.9366814783579,-66.72108319192617],[-135.98542752964465,-66.70759546623673],[-135.93147045428344,-66.6846873241117],[-135.88513893528645,-66.67958850939586],[-135.8533612692109,-66.65569083629566],[-135.71656840360814,-66.66010129922985],[-135.62413412596402,-66.70321853204072],[-135.51767028517298,-66.69656380490899],[-135.46250539165277,-66.66735194522947],[-135.377357885154,-66.66489825203479],[-135.25279453305959,-66.64506068119819],[-135.18735719208567,-66.66135766095387],[-135.2318712631685,-66.72279904683886],[-135.1708695335436,-66.75585118756202],[-135.09102492297626,-66.76354537922829],[-135.05484682157922,-66.78400220371935],[-135.13148928423337,-66.79609091804555],[-135.17135797276464,-66.82108440279944],[-135.1625892976349,-66.86323267132954],[-135.12410220313103,-66.88940011868418],[-135.0617231881913,-66.90851333149833],[-135.11943117147626,-66.94913720345176],[-135.10966692981899,-66.97636854303136],[-135.13019762490003,-67.02869169281945],[-135.0669512349976,-67.06447817019074],[-134.975603293806,-67.06897915157093],[-134.93327166602916,-67.06115673625449],[-134.89190787152214,-67.03581381663072],[-134.8867433080276,-67.00984618939346],[-134.82920642151595,-67.00292519773356],[-134.7652986949853,-66.97231149863165],[-134.75437711645742,-66.95115238007581],[-134.67929143798105,-66.9539489743055],[-134.64572324848353,-66.96843550389852],[-134.56749632235338,-66.98028805686876],[-134.50516649285262,-66.97648803110752],[-134.4587370526047,-66.95942992599839],[-134.44580669675128,-66.9243251438321],[-134.46522462475562,-66.90307050076564],[-134.40714268464293,-66.89173504747826],[-134.34052871334558,-66.89605367244404],[-134.3019331960167,-66.91716076121048],[-134.16917779552466,-66.93393470193166],[-134.07910808714118,-66.91619950581715],[-134.04863041821235,-66.90015950135876],[-133.9657735490129,-66.88947466375758],[-133.8658794422497,-66.8969786698091],[-133.76824585279945,-66.87718169210936],[-133.7409884102004,-66.84238092583215],[-133.86345019435515,-66.75201692561508],[-133.9214523136607,-66.74069508433115],[-133.84913450255064,-66.70774606829612],[-133.83075382028161,-66.68048257179368],[-133.7316669388396,-66.67775477289608],[-133.64180662285352,-66.6938364945904],[-133.56285407321903,-66.69922660350129],[-133.44936960902768,-66.68562891836665],[-133.39377650161296,-66.66524126992636],[-133.3845125133713,-66.62344976902672],[-133.45678071231782,-66.59208461277039],[-133.38932891617821,-66.56801904761129],[-133.30224781081114,-66.5743970524845],[-133.23989426184815,-66.56367731284212],[-133.19601933775985,-66.53871782329625],[-133.18083978499655,-66.47300008016124],[-133.0098099356667,-66.45967993762747],[-132.93707820798127,-66.46237252795292],[-132.87538267472578,-66.44985522962934],[-132.8362169095212,-66.42947485091996],[-132.83266876440686,-66.39621593092677],[-132.89495079999097,-66.36565628949964],[-132.9788396098,-66.36104226157074],[-133.0668037442618,-66.38504528312144],[-133.11265012366582,-66.37460861559201],[-132.94815083134353,-66.33208456788543],[-132.77363258083972,-66.30140980458859],[-132.63941517018299,-66.2675512795831],[-132.57066376890668,-66.27093470002097],[-132.62785559669788,-66.30813212995581],[-132.68868732840232,-66.32994032108378],[-132.72832551903346,-66.35966812235978],[-132.71620844711074,-66.39399460434242],[-132.73098169353216,-66.4214551446636],[-132.70715944443043,-66.44832145336856],[-132.7452500433012,-66.48255331999465],[-132.74145338421098,-66.50684941091798],[-132.70304222030165,-66.52723168724832],[-132.7120062506477,-66.59088282206787],[-132.62960767724462,-66.62138852315475],[-132.5572427163173,-66.62169063896499],[-132.4378409504078,-66.58542248538268],[-132.35551283683373,-66.60444116965787],[-132.2846050440553,-66.60948228165607],[-132.28492443222257,-66.65055948206505],[-132.2625373850636,-66.66714081062806],[-132.18885885058623,-66.68180691131842],[-132.102750203148,-66.6744999476348],[-132.05315380445634,-66.64757455156217],[-132.0654336482989,-66.60399222003345],[-132.00594539350945,-66.5683036676461],[-131.9522126642635,-66.55126169378198],[-131.91239991007717,-66.52458320723848],[-131.80300718131727,-66.51732758882926],[-131.7437621673959,-66.48357090993295],[-131.70249504590768,-66.43685828341977],[-131.6469455831575,-66.43956360792805],[-131.58499977911035,-66.49186957121225],[-131.62252194584116,-66.53276522619613],[-131.6826312508502,-66.5415490556686],[-131.7230631704537,-66.56522132295221],[-131.80807666274703,-66.58322284416832],[-131.83946866070815,-66.60918377949443],[-131.81189548654115,-66.64879744641127],[-131.8196179252254,-66.68590822862897],[-131.7975728051402,-66.69926040591338],[-131.87183956448678,-66.71819793316608],[-131.88440730907718,-66.74170273457678],[-131.93003515701528,-66.75660082930975],[-131.960497576378,-66.7839488402088],[-131.96440596456276,-66.83673628009967],[-131.92646339074088,-66.88499404840357],[-131.8454872498141,-66.91385625757854],[-131.79550900888574,-66.91188719076682],[-131.64890414693872,-66.87042707121837],[-131.62043309816687,-66.84141228805669],[-131.53087237781656,-66.85036660592728],[-131.4600635433218,-66.84144679865165],[-131.3983373767039,-66.80911394503234],[-131.34173076940942,-66.8276263425975],[-131.25631415034667,-66.83754788263995],[-131.211773801261,-66.83209387940823],[-131.14800126257632,-66.80636848022196],[-131.1311272321339,-66.77650169716561],[-131.07812915861822,-66.75698687685149],[-130.85833248923603,-66.76700933046166],[-130.80772611424914,-66.77977939987257],[-130.82142176773124,-66.82155312447166],[-130.76624330608104,-66.85570799759661],[-130.67566562725708,-66.86332583649698],[-130.5791156178023,-66.93292775743288],[-130.4939610039429,-66.95074838090925],[-130.43632764162666,-66.95268746793816],[-130.34751842379345,-66.93490410216978],[-130.23884068167558,-66.88730763219148],[-130.20311425637777,-66.85873341850312],[-130.22652113610513,-66.8183120266652],[-130.33537827201138,-66.78710647338949],[-130.38508251792027,-66.76339250766743],[-130.3253665183236,-66.74633138865582],[-130.30611180944342,-66.70717899204804],[-130.31939947733989,-66.6855310589885],[-130.36734830268213,-66.66545741631606],[-130.46338326410265,-66.65043592687694],[-130.50214700987792,-66.65451060329059],[-130.58880465003284,-66.64119679358856],[-130.57449479555936,-66.59104492286619],[-130.59601329587005,-66.56370341976083],[-130.57574456329831,-66.51573219494733],[-130.5449534614181,-66.50684959822847],[-130.53611755030462,-66.47357342297039],[-130.55606652498375,-66.45089568055809],[-130.6470010138441,-66.4269565371951],[-130.73596757833107,-66.43190096283469],[-130.779953842072,-66.44672261819052],[-130.840302909232,-66.48907335663874],[-130.9180654582856,-66.51130284621517],[-131.03939363562796,-66.51667718620453],[-131.0583032263362,-66.45629012886491],[-131.0894425896695,-66.4310877061397],[-131.156287885057,-66.40577369196424],[-131.21205909009151,-66.3986288514442],[-131.28318949923565,-66.40433792186779],[-131.36137072073882,-66.34803715656334],[-131.43657443312063,-66.33967393469538],[-131.4442772478459,-66.31881579073183],[-131.41128118508243,-66.28709001927425],[-131.35385483561365,-66.27889691020857],[-131.2712815670242,-66.23291028597914],[-130.8503513019879,-66.22623953859265],[-130.7519200140208,-66.23428094568392],[-130.68485839030728,-66.22872146962989],[-130.62946106721768,-66.19483690877576],[-130.64716048901775,-66.16027901141794],[-130.55218722840235,-66.1350923965519],[-129.88038275511047,-66.15500082516834],[-128.8368174556352,-66.17960406580241],[-128.4267327577807,-66.01025649720908],[-128.0513753326677,-65.85844034271489],[-127.47602533315106,-65.61492198338782],[-127.00844543008388,-65.41478745316435],[-126.64156603147023,-65.25822415444176],[-126.08732573776541,-65.00828065135957],[-126.0704811032427,-64.7802291007815],[-126.00374011683839,-64.7484198150009],[-126.00697383533209,-64.70819356749234],[-125.93194258545688,-64.67922720821684],[-125.88231034475865,-64.64902468218092],[-125.86161984823109,-64.6142132713128],[-125.9013834871558,-64.56141909948396],[-125.78551083085904,-64.45305717932291],[-125.6903673677268,-64.417637313044],[-125.52891071318442,-64.40242141860215],[-125.47514783303238,-64.38473547613326],[-125.3415336230792,-64.2945964806607],[-125.17404717458233,-64.29664810770117],[-125.07384609344487,-64.2706517074765],[-125.05258894456335,-64.20072174066145],[-124.99331974269046,-64.17794603224216],[-124.81935289915711,-64.14763125980865],[-124.68816253040995,-64.16262124918282],[-124.60662193049149,-64.14383078183091],[-124.57385571990979,-64.1078088783924],[-124.5320500890651,-64.10215954168115],[-124.48278121732734,-64.06462209994451],[-124.40168405949814,-64.02824940642842],[-124.41425555981361,-63.98363144532966],[-124.30528728952304,-63.97921751074918],[-124.2577130055673,-63.960814322628195],[-124.19017341941363,-63.90537160141676],[-124.15559055285303,-63.83427563738126],[-124.11566079355158,-63.782337138061386],[-124.05342177749787,-63.77334433473289],[-124.01632904035677,-63.79115514307927],[-123.93160439018247,-63.801014047674315],[-123.80957746393689,-63.776023594943304],[-123.65124415637055,-63.76842462132831],[-123.58591337875679,-63.770421031527476],[-123.38933970958449,-63.75873731241718],[-123.31563476896712,-63.72854940911809],[-123.22377996916595,-63.715964475866464],[-123.1526594070181,-63.66939669770883],[-123.07808992469967,-63.65760566672659],[-123.03112569967979,-63.632917885706384],[-123.01699512916547,-63.596443396062995],[-122.95131822415229,-63.563946122669535],[-122.92507983485369,-63.50238927894728],[-122.83475714741569,-63.410207717567644],[-122.7554450904461,-63.39180605928282],[-122.68934756604247,-63.34103624004756],[-122.72003711363378,-63.248505442074354],[-122.58584764343779,-63.19469325893983],[-122.4738555511576,-63.2063937016525],[-122.36688207639793,-63.17649511917866],[-122.34496074226153,-63.15098325058342],[-122.24440972260585,-63.14372610602891],[-122.18447631587229,-63.123022576057416],[-122.15699704950907,-63.086763759800256],[-122.19902328243685,-63.03779392720236],[-122.06096948617096,-63.001357389056516],[-121.99270365444912,-62.955879230145364],[-121.89793741061229,-62.96166845065145],[-121.82386493903083,-62.93634628050815],[-121.79870041805916,-62.90674539282767],[-121.8122501249859,-62.87315255982452],[-121.84609982522353,-62.854293339377115],[-121.78294715176489,-62.80101855114691],[-121.80083170010523,-62.74938940193048],[-121.82558212987222,-62.73459482734478],[-121.61985507414953,-62.62208050128506],[-120.66323580371258,-62.557373184144545],[-120.13268645658279,-62.51919243297577],[-119.60945111534143,-62.48509153665519],[-119.52187291010465,-62.470787346248684],[-119.37226790999433,-62.436566256671796],[-119.0417193226125,-62.379896711630735],[-118.80454043470124,-62.31539020973527],[-118.69230746691709,-62.29138643690191],[-118.37683314366637,-62.215531321531046],[-117.81880402440241,-62.06136879879023],[-117.3544591863764,-61.929665799174174],[-117.19613884003661,-61.67988463360904],[-116.96858293531845,-61.53895898621204],[-116.61708011044685,-61.468718946100324],[-116.14908458593473,-61.462472450086246],[-115.94160930694204,-61.44404348415363],[-115.66597823248225,-61.453405835546114],[-115.5062196959243,-61.518672178776875],[-115.41965007368991,-61.57090568261662],[-115.3101862795566,-61.59602112032214],[-115.13740558592568,-61.59736755659544],[-114.97368323071315,-61.58401931950239],[-114.77400710745542,-61.53598519434239],[-114.55723967376144,-61.45384840776778],[-114.50160664279196,-61.39712110079553],[-114.51087159281448,-61.2952490519499],[-114.48335118303501,-61.25166990152416],[-114.3982524396835,-61.18113488357509],[-114.33197572001939,-61.14337073562916],[-114.1372881403278,-61.10605903974417],[-113.89842392553274,-61.03221567867938],[-113.58457293356274,-60.94380770610033],[-113.25295697223099,-60.84216515779678],[-113.01519614766686,-60.78568493796284],[-112.82920404754738,-60.77398327431523],[-112.56284939585764,-60.83078817525545],[-112.16594658411101,-60.899471887456315],[-111.88533178521932,-60.92257912946196],[-111.48468871899281,-60.916150966953886],[-111.25961607836858,-60.96372600569426],[-111.15233556117605,-61.0399922020238],[-111.24774145679983,-61.15150514769482],[-111.38292717656117,-61.27578304611266],[-111.3654814806143,-61.337025583333556],[-111.22191187429111,-61.38941452565673],[-111.05196483010573,-61.38761694902415],[-110.89823473523059,-61.34427518174149],[-110.63209105835271,-61.11424304255302],[-110.38464857146666,-61.09569386254743],[-109.34932918139721,-60.94566592665598],[-109.08855839052988,-60.881858824975836],[-108.85567990571045,-60.86234944234151],[-108.51198779655893,-60.86615707435688],[-108.10608973934923,-60.885059057113786],[-107.53510498174765,-60.93292074500071],[-107.183384039956,-60.97558593790878],[-106.6774390511117,-61.022560502143506],[-106.66635860264496,-61.04960936260227],[-106.52728188619474,-61.05981553572455],[-106.43239290834197,-61.05082016031495],[-106.21979114122331,-61.06015016739544],[-106.05911329313109,-61.043255168027116],[-105.85682820230295,-61.028667603169055],[-105.39777279948596,-61.11405506092904],[-105.23512986110728,-61.15285926013316],[-104.96618440659158,-61.20311385106089],[-104.89142105579926,-61.22425928354677],[-104.67445713373677,-61.27263461277158],[-104.37664237192621,-61.31899677460321],[-104.10115918465809,-61.343709488862665],[-103.78227347325709,-61.39321410807694],[-103.60474129058194,-61.441193983213246],[-103.44908047384958,-61.47612226466842],[-103.20499974251165,-61.49867742198704],[-102.98608909369293,-61.5110759642857],[-102.93281914810517,-61.51916034013076],[-102.79784989609892,-61.55981156108865],[-102.69097947452688,-61.58563743908836],[-102.51444173422465,-61.65226774054889],[-102.49176738717154,-61.7258839876409],[-102.41548959059837,-61.7666048061195],[-102.22206304326895,-61.81471788368177],[-102.07381053704282,-61.85922855460408],[-102.02973778809981,-61.907890828711096],[-101.89470180852689,-61.942623594969476],[-101.79543218499866,-61.94678510455883],[-101.55611815795407,-62.01229919597464],[-101.44537656013931,-62.027441380125715],[-101.3525957808247,-62.053635431242434],[-101.25557580705474,-62.06286627995656],[-101.09948852939382,-62.10639926887654],[-100.99068236562036,-62.114580647769664],[-100.93063840847572,-62.08218240630561],[-100.84987239909889,-62.130753817434275],[-100.7855879331995,-62.156076793985],[-100.72908594435407,-62.16011922492316],[-100.65687133314978,-62.18589360946666],[-100.5782339922483,-62.227005722782465],[-100.50572491355975,-62.22937849511511],[-100.42645321160524,-62.24820989771087],[-100.30019212426143,-62.24269036579897],[-100.22058419620588,-62.21192671955263],[-100.16970456085906,-62.21881891232784],[-100.2815145029727,-62.272365776992174],[-100.31435791946339,-62.298256340133435],[-100.30792381740119,-62.37728747141372],[-100.29402721542286,-62.40202789570841],[-100.24508482347373,-62.42056852957781],[-100.19488244652307,-62.52496360862315],[-100.1204416664287,-62.554311780164184],[-99.88796599580172,-62.57140150022561],[-99.78220667255682,-62.64906590481622],[-99.42620277241521,-62.86118213966536],[-99.00593961411008,-63.11688345096679],[-98.5807885943273,-63.38706741047343],[-98.0359226922117,-63.57605664333033],[-97.3722835512238,-63.802554120860385],[-96.7385744455141,-64.02043048601253],[-96.65938515139845,-64.04336598103254],[-96.38922549557978,-64.09500087658184],[-96.13609848266724,-64.1914791430644],[-96.06386867737449,-64.21451666152647],[-96.04551253100296,-64.24587113323936],[-96.06808001467653,-64.27302218074269],[-96.15202203332363,-64.31302890011358],[-96.17412259829572,-64.3740416124004],[-96.13179497891602,-64.39999997080152],[-96.02322999028448,-64.43051065222333],[-95.78398027505918,-64.46166745811873],[-95.43570882094276,-64.47839447576175],[-95.35678024808024,-64.28986102210524],[-95.29499133447527,-64.285195519526],[-95.27132278313123,-64.32889422121288],[-95.19618889627058,-64.34738540645793],[-95.08958091470183,-64.33351636679576],[-95.05994353063286,-64.31516373934149],[-94.98819818127882,-64.36367933607684],[-95.0327940939377,-64.39921758075936],[-95.01997393391895,-64.43345239268513],[-94.9732598483991,-64.45687049411754],[-94.86222395572584,-64.46906884387141],[-94.8574383191496,-64.5386616190296],[-94.83671269193086,-64.57822663633878],[-94.84862713278986,-64.61535678899928],[-94.83321989598424,-64.6368293904567],[-94.86638698510497,-64.66543202578812],[-94.86028091855248,-64.69267892776617],[-94.7891556992852,-64.72250181965126],[-94.72620411711598,-64.72556815766359],[-94.64742567709044,-64.7085731856964],[-94.59758756569379,-64.7556018728048],[-94.60074101701632,-64.78576084946073],[-94.56892554073576,-64.82315573208136],[-94.43698831943449,-64.86434728081215],[-94.39151105622867,-64.89260604866978],[-94.26488140868598,-64.90695476568744],[-94.3146532572997,-65.01520313048375],[-94.37839333397196,-65.10978779634922],[-94.33494862962705,-65.15586961676743],[-94.17831025469843,-65.27844256021297],[-94.05141360138708,-65.35668402985273],[-93.90747354028487,-65.45103924194402],[-92.93324135702684,-65.29072295894083],[-92.3418416525802,-65.19618271873404],[-91.69109154913575,-65.08959540933438],[-90.75775964473587,-64.93879937486429],[-90.17303997078234,-64.84200620847122],[-89.8206562419962,-64.78197623687906],[-89.86354499160012,-64.75176819685525],[-89.9264456332827,-64.73466490205358],[-89.91232512347189,-64.71357769852227],[-89.83194129006766,-64.68684176029177],[-89.74482826622707,-64.6192820992379],[-89.63517111788512,-64.5065764801299],[-89.59419517185525,-64.44080706838999],[-89.55642641354908,-64.32898371032297],[-89.57497380704929,-64.29900264087802],[-89.570539934555,-64.2371127180477],[-89.55187502000473,-64.17379175699094],[-89.47285389811069,-64.06024194077975],[-89.49166854112593,-64.04250057265031],[-89.57835437429806,-64.0145417630248],[-89.70615178575237,-63.90243006054343],[-89.79539419557312,-63.87076311251755],[-89.92897160042708,-63.787244928618314],[-89.99771567114041,-63.67964041361112],[-90.07455889533826,-63.65338353004691],[-90.12358013901039,-63.59991190006375],[-90.12345557024062,-63.55236064008118],[-90.0869486041002,-63.52606583311597],[-90.08971538354616,-63.41688761498529],[-90.16902212865703,-63.30880699265028],[-90.3685116243165,-63.223222550080955],[-90.53698567053543,-63.27547292671502],[-90.69132023653623,-63.2650130303472],[-90.80970981141813,-63.26857599504938],[-90.94948648505512,-63.172838639075074],[-91.05315635396025,-63.180220770882556],[-91.1760309262415,-63.176675902192166],[-91.4689820811603,-63.1053224097556],[-91.89594729960854,-63.12827107967083],[-92.03793257070068,-63.101056140218695],[-92.50225133917623,-63.05616274489864],[-92.7111476260107,-63.01090229985863],[-93.03054447888722,-63.07513516414771],[-93.14913675965998,-62.97093761389281],[-93.2405475527517,-62.926303342243095],[-93.24416166815315,-62.86438972846676],[-93.6285023877933,-62.840527229615816],[-93.63302348917087,-62.821231744723384]]]]},"properties":{"name":"Alaska","ns_code":"01785533","geoid":"02","usps_abbrev":"AK","fips_code":"02"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[32.031614119470305,-37.31145749031048],[31.834790477875785,-37.564176236215374],[31.783609821772767,-37.788684006827495],[31.884565480949565,-37.87161262368372],[32.08284982053173,-37.90511974244869],[32.26640418858472,-37.74192387115706],[32.224341468586,-37.44070844298501],[32.39041385525742,-37.38352511980817],[32.512558986050884,-37.450851749748],[32.56267274735416,-37.63720186581623],[32.661753806834135,-37.728364334234726],[32.641366449449336,-37.94379462537195],[32.44428416019176,-38.12312639929837],[32.22370183024281,-38.20919924067035],[32.12774615337138,-38.39503886527487],[32.123012924737054,-38.702195401096745],[32.22599503664792,-38.787260012105385],[32.37083034005361,-38.7743984426283],[32.75992359257443,-38.84664013274805],[32.750130516330444,-38.98439237853806],[32.392288162796675,-39.19831755220897],[32.24394769252949,-39.350896490794135],[32.31843646604245,-39.58010294268577],[32.45266942562949,-39.65278974726682],[32.87021508410606,-39.51221317618984],[32.99878994938308,-39.288377332058445],[33.14425263655427,-39.472956288527],[32.99135305077013,-39.639352125530614],[32.706374807682025,-39.79928816455226],[32.85039352979729,-39.91866913744455],[33.08951195948867,-39.97934687333774],[33.28199818147032,-40.09554378762899],[33.21379992784079,-40.18719997947957],[32.91371375283178,-40.11000322758213],[32.62949992474779,-39.84284476263585],[32.510416313764736,-40.11719011341619],[32.52294908808358,-40.21438794431068],[32.66483442748882,-40.34524098659139],[33.06879580330862,-40.457767264896624],[33.26297907930371,-40.35752021416425],[33.44109009866413,-40.51543542398537],[33.2794251437694,-40.613554552634206],[33.229660172506996,-40.8148736547427],[33.34343798181168,-40.894447649964576],[33.792931478599876,-40.943163843592195],[33.78397328217413,-41.13783284564212],[33.601916241586224,-41.25373521961374],[33.38613415024095,-41.28140300702086],[33.48395815408179,-41.42790212157608],[33.416098512699755,-41.64711195267731],[33.09961556704075,-41.49958762396302],[32.94566792349467,-41.628607415693594],[32.80906835039646,-41.592034967542716],[32.61513522942847,-41.70564004074387],[32.51480131642943,-41.67322716890666],[32.33360149673331,-41.7749143790677],[32.28942337306968,-41.982013427967054],[32.36894115303403,-42.1102392991357],[32.683032955957856,-42.141168714110016],[32.85581540998776,-42.08476852990535],[33.03220004122343,-42.121725504212456],[33.03870550448749,-41.9531185516379],[33.317756380881946,-41.917144111189],[33.31238793833236,-42.019847644069564],[33.16539379073121,-42.144352689699886],[33.12741694258222,-42.26443407215226],[32.885892541174385,-42.37509739882212],[32.78495255432622,-42.542049716198555],[32.52874867624489,-42.37490290231188],[32.39965413767137,-42.48518786366061],[32.53116054790444,-42.56593861182257],[32.85814710921028,-42.61483941027547],[32.93365523276877,-42.7029047915429],[32.75744234205274,-42.854302367838216],[32.414141474416844,-42.90295163347925],[32.27929908466076,-43.019300087099175],[32.22057876810456,-43.29471962654843],[32.033908508190294,-43.466103035179835],[31.846296549904228,-43.539250625794075],[31.979247728665015,-43.69907087388232],[31.88900715580514,-43.82566417036314],[31.758946567337798,-43.79720245579836],[31.673780797720585,-43.56834375342127],[31.375404026749326,-43.665207954031295],[31.28628533362601,-43.98148464178651],[31.387974334949785,-44.10784923048225],[31.74913940995634,-44.02391676138005],[31.804835043583182,-44.162136576063105],[31.5548897652602,-44.14366616315775],[31.263668369123373,-44.17017470173547],[31.10865601856145,-44.35812562389832],[31.14041708980422,-44.700617209539644],[31.11782422442552,-44.82208023484961],[30.9868581812678,-44.873342805463444],[30.737196617361736,-44.835572192788504],[30.524197555665125,-44.715467433007774],[30.41677615030726,-44.88145687746803],[30.611525359855666,-45.01142470844938],[30.993567621460443,-44.9452336199678],[31.09260347040591,-45.082272641228805],[30.884177839090693,-45.22537909826137],[30.694452159338667,-45.288294226868615],[30.452662787488997,-45.299069488974695],[30.49728144827107,-45.731308961574136],[30.58759278239539,-45.849777673429436],[30.763503871826327,-45.95881058609916],[30.769492960013174,-46.088060110707865],[30.57630510716313,-46.12468349365375],[30.400617135694066,-46.00462993052711],[30.288667634155512,-45.796809552052146],[30.118952773204782,-45.969999563919906],[30.182947474438844,-46.074632152239126],[30.31803408520602,-46.04471157613793],[30.319222005982883,-46.22685517577921],[30.560503846177163,-46.36392076006198],[30.522790753194126,-46.570202741701586],[30.283796129537798,-46.642448032300535],[29.781085381818777,-46.635111052588975],[29.772911487606184,-46.79506198523065],[30.08316887943337,-46.944223640987055],[30.127274575499875,-47.05709402028256],[29.928357319329994,-47.281844498145716],[29.928237987947554,-47.36812582233414],[30.315851688482105,-47.59386400998455],[30.323651318476198,-47.72806344593669],[30.172206850813353,-47.837227800710515],[29.89510558211698,-47.93157473174307],[33.02963784586749,-47.83173748398703],[35.39532164587088,-47.745341723635285],[38.57513098038582,-47.613755764820866],[41.51096024426994,-47.47925141599118],[41.48200327761686,-47.65403039111164],[41.36924138983298,-47.76736160666619],[41.419675961854836,-47.915221565760405],[41.3030432494887,-47.98537487529906],[41.13890206162125,-48.45523666693729],[40.99103226293645,-48.62723343131249],[41.056089895984854,-48.75470998676572],[40.94607138353791,-48.854449110355354],[40.96765349688798,-49.01064758786943],[41.1236336667782,-49.256066228953514],[41.15011236031368,-49.44131454425635],[41.35046911310887,-49.65698769217699],[41.41511862545073,-49.657154748649475],[41.59559408705114,-49.83959475051187],[41.79441373540688,-49.896147154481845],[42.04322888026133,-50.056428630066684],[42.064686095421,-50.26752189830786],[42.24963236683861,-50.48076148516227],[42.42252319560859,-50.563068415445414],[42.454942663856194,-50.92638494945708],[42.56067599074849,-51.06271418110913],[42.85824411478687,-51.25243160488693],[43.05528132750742,-51.176012390248545],[43.282015165324715,-51.3364621083425],[43.813135311787136,-51.225262667918706],[44.60091464084951,-51.186957774397065],[44.83291717222983,-51.144981857639046],[45.226891057578705,-51.00742633725492],[45.926228688955646,-51.235760884522705],[46.193217494366046,-51.11761926136067],[46.38103870410559,-51.184311306668384],[46.740760390257506,-51.17515151949074],[46.98866921780146,-51.11608657598193],[47.28337346366366,-51.001758147744184],[47.44790024065504,-50.88067124392227],[47.5833517551173,-50.94189306531213],[47.87793981062117,-50.99174818113146],[48.1006283404284,-50.96896744966577],[48.41530170008824,-51.01030444659545],[48.808610636528776,-51.02587820109279],[49.161471902799825,-50.98124329892551],[49.39341071106069,-51.05408889277907],[49.69758483541568,-51.08963108772201],[50.16270765860933,-51.0128586304241],[49.882096992570645,-49.57311972638721],[49.6735364425197,-48.42361093765877],[49.43300611764585,-47.10715832896062],[48.999732716326236,-44.717498063728094],[48.7921449426802,-43.57473554749848],[48.635251106449125,-42.59494673069236],[48.70202090482549,-40.67147754386478],[48.74705871514406,-39.02631852795543],[48.78443273652495,-37.17310802473811],[48.818302193000655,-35.62190957022789],[48.85108356095347,-34.29276220442066],[48.89622278911415,-32.164863835290184],[48.957799069871726,-30.251326210950456],[49.011877900519295,-28.01249452315756],[49.05084039235424,-26.522101032910896],[49.08372371399291,-25.817439323514556],[49.102318724017394,-24.72005334101876],[48.770717458289354,-24.564396155555613],[48.450529258033,-24.089261644065356],[46.024117971988375,-24.267531323959787],[44.26210350594579,-24.39394927370547],[41.01773218852917,-24.611012558355778],[40.258224286720186,-24.649799483237803],[38.75317263796547,-24.745703342726046],[36.260561391102065,-24.877537699148828],[36.34332758135578,-24.99947710295227],[36.64828855963235,-25.191865477716558],[36.641352147086906,-25.43327901254198],[36.289683562297895,-25.68398544639786],[35.71918466751438,-25.97295949784212],[35.63460265128983,-25.915484008120664],[35.56105932384703,-25.63920003832832],[35.39711821736398,-25.606216401324016],[35.30682062348506,-25.80349819181752],[35.47884115759642,-26.04045190057234],[35.39862699646865,-26.17996694568489],[35.543044929278025,-26.563358874762176],[35.42420462393373,-26.672242904079276],[35.150099313504185,-26.648196594256046],[35.12966948514558,-26.50268087678503],[35.24057713108985,-26.36699925733684],[35.152880187334574,-26.19727687439185],[34.969942517279385,-26.352553292515392],[35.05421011219985,-26.536142873580236],[34.87905914632875,-26.71755215778272],[35.01223144262989,-26.847173665289233],[35.41338959596093,-26.83227900721276],[35.50306696692393,-26.937502649986282],[35.41500542880794,-27.097007188620573],[35.20945945416986,-27.29346504411911],[34.98267029284965,-27.207029835502475],[35.06372864565275,-27.0446794708857],[34.92647540947744,-26.885726314309668],[34.778956262286584,-27.058867510227657],[34.8453762971154,-27.482811249854443],[35.07043338605405,-27.732913586568273],[35.08190242531556,-27.89483782854078],[34.89131276762164,-28.052146229945286],[34.846411848678535,-28.24329964023276],[35.00710648067387,-28.548182989946707],[34.93063082814083,-28.709108801241015],[34.602945331063424,-28.886399117222354],[34.4507917302791,-29.078010152685927],[34.517242395817455,-29.254151393253082],[34.31047079954046,-29.29389648355494],[34.38692302636397,-28.982954366501453],[34.18334130786145,-29.040803649941104],[33.92468961108111,-29.031618097280802],[33.88200209823276,-29.187426018311335],[34.038120364518385,-29.407730566989922],[33.906710388176464,-29.577094512884166],[33.68545932600704,-29.575510383912288],[33.514989432652406,-29.697502377004092],[33.45294462614141,-30.06084339605142],[33.24809658152999,-30.0053322069286],[33.09926795204111,-29.84650730067714],[32.92031598422559,-29.905996408569948],[33.057708752211845,-30.139111816025732],[33.22816099964971,-30.224181721709645],[33.64473408478863,-30.198188080468583],[33.706963817891925,-30.315134583302626],[33.62478264907049,-30.441303583338094],[33.360599735109666,-30.465507972856038],[33.10516275798062,-30.332344235953713],[32.85642056096659,-30.511435185029594],[32.85882354473401,-30.633192499926547],[33.06699728596216,-30.777668691666154],[33.29196574874568,-30.750805430796955],[33.366316815680506,-30.823620552655274],[33.2361795668234,-31.19765589088807],[32.704809769572876,-31.25625769586202],[32.87437697423823,-31.488820529867347],[32.84504855739626,-31.59210464660742],[32.65343697730249,-31.581697162984955],[32.529476395966064,-31.36183331855403],[32.36347212576189,-31.480241461791973],[32.13519996973751,-31.550125008445463],[32.13943948783211,-31.643460684622966],[32.547253628600416,-31.765911093874287],[32.60229844285172,-31.83925995462461],[32.328116941863605,-32.13967283289665],[32.26652181124474,-32.26450151143345],[32.4359038878898,-32.51277506759323],[32.768242144422445,-32.63614298266105],[32.72798800634388,-32.77979800518231],[32.57324248653316,-32.82003259811354],[32.4082630805434,-32.736177129211],[32.09716562559279,-32.798626755770755],[31.931639837641697,-32.73519765703889],[31.880106078299494,-33.03846503261657],[32.012893662115914,-33.175449579870396],[32.346782797250036,-33.11464890867297],[32.47712713437096,-33.17019820192299],[32.56148678758652,-33.366797725548395],[32.3083177206211,-33.46628216760103],[31.97824099432881,-33.36935154715778],[31.8125407342852,-33.20018592389597],[31.53192094528189,-33.24820631075088],[31.420072789352922,-33.35525980860059],[31.466996421670878,-33.473893022060174],[31.766616725547433,-33.5525537553956],[31.962922097649127,-33.676655991791336],[32.021761688521224,-33.79154590568082],[31.90243816249474,-33.93586595791077],[31.761905104173664,-33.94032940484002],[31.459040488201897,-34.06214544398206],[31.524893065964214,-34.25166880809522],[31.749197467018945,-34.44543811145125],[31.464837186683777,-34.807502020581126],[31.65748533946808,-34.82612587838855],[31.84806737204113,-34.713812709104516],[31.78938961436975,-34.522628963517086],[31.860062182217654,-34.44266601540599],[32.102250925940695,-34.580620870724225],[32.1513721387754,-34.69119251257627],[32.077994187380895,-34.83457589370279],[31.630008242526117,-35.001665091548354],[31.893142617998507,-35.13898959268901],[32.159469594071744,-35.075863612729265],[32.291384034969,-34.938083758869084],[32.33800306368329,-34.69646506334433],[32.51386418639424,-34.82410614355076],[32.1701756084808,-35.22086605249628],[32.046722422323,-35.31304840868492],[32.07121674772953,-35.60834799794082],[32.33670572047939,-35.94888115895373],[32.44758706035764,-35.68078168816333],[32.65698205948871,-35.750587727955036],[32.542656978843546,-35.970175641237205],[32.392783305813154,-36.04723827126362],[32.45109448765348,-36.276745611513945],[32.44523855039617,-36.48351709950182],[32.351126526585695,-36.56587324943336],[32.07853803687284,-36.58231389779677],[31.87715617846465,-36.52704660964304],[31.78579988472388,-36.7240674292944],[32.25551088218023,-36.95838464047205],[32.24036723910311,-37.13441267617159],[32.04795114406484,-37.221690939086976],[32.031614119470305,-37.31145749031048]]]},"properties":{"name":"Mississippi","ns_code":"01779790","geoid":"28","usps_abbrev":"MS","fips_code":"28"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-36.43045257757133,-14.240447606823222],[-34.294765333962935,-14.389292832881416],[-32.000236620233004,-14.539887003833952],[-29.80954224042435,-14.67992666715688],[-27.896137357976812,-14.791064643822795],[-26.323341662896443,-14.876808649417603],[-24.081847126048533,-14.99025905169759],[-22.369321182613483,-15.073929843633497],[-19.40814628533552,-15.199315167710163],[-19.569269109165358,-18.857664709308587],[-19.652609384205274,-20.720216147423745],[-19.769547495861268,-23.294001419285724],[-19.833460713424607,-24.681852044358497],[-19.932079387687565,-26.79153932912127],[-19.994665640740436,-28.122836661714373],[-19.823678543397126,-28.116144103536115],[-19.718774309394774,-28.01821904176112],[-19.534875964218802,-28.07750727426012],[-19.348247569372877,-28.209941522417235],[-19.151750027118307,-28.463205557763594],[-18.973888061018243,-28.556395490907914],[-18.936278499470685,-28.694450333815457],[-18.597220714508143,-29.05508346912839],[-18.44603866059102,-29.12504846251198],[-18.26545581401648,-29.334260033441378],[-17.993598168916964,-29.31773659595825],[-17.714858559584773,-29.374824010925774],[-17.526018912556452,-29.106480087856433],[-17.22329180761269,-29.141010030690857],[-16.539571731709604,-29.405372531314406],[-16.46319979607748,-29.188075852164832],[-16.50190214852528,-28.990772531817306],[-16.383095275463464,-28.888949403251335],[-16.072042187648197,-29.21002112345091],[-15.883189849753498,-29.185839729174194],[-15.730380853322808,-29.256505191319913],[-15.785709934182428,-29.39701340648055],[-15.601018213802151,-29.491123044095424],[-15.588383586927216,-29.65574252077145],[-15.439965573961965,-29.668111179021142],[-15.47270841616905,-29.85884405301067],[-15.358781143224942,-30.447583876024016],[-14.959420791699836,-30.536532841131574],[-14.720638234928408,-30.48355259801761],[-14.581553049300771,-30.55848489936959],[-13.964059809419744,-30.499871438332555],[-13.791501469072989,-30.682485256604714],[-13.598208289809145,-30.781375909230356],[-13.271708813263999,-30.827532818450077],[-12.899713942043435,-30.993163767061276],[-12.451851239687656,-31.02686153440561],[-12.1711846545711,-30.84007650746522],[-11.937046165703226,-30.870504661442347],[-11.788558920250672,-30.944322247908946],[-11.374403805832259,-31.426322104243788],[-11.271760648721914,-31.488049508918273],[-11.012821701204206,-31.367720867622037],[-10.872225343634858,-31.37379381357863],[-10.748588142821722,-31.24186419717318],[-10.744559741614337,-31.094966317837528],[-10.537804893958327,-30.922817072852453],[-10.296441770294434,-30.973489595519258],[-10.168063757661145,-31.069466387084574],[-9.771292998303664,-31.077189601709946],[-9.584483661743569,-31.190827407304713],[-9.40159828530702,-31.209927955741833],[-9.173254757963948,-30.9910479758929],[-9.047623249880937,-30.971388259517333],[-8.941869248366238,-31.168169688868332],[-9.123700063165664,-31.474023160257293],[-9.012441832826982,-31.611805831915532],[-9.033263142187181,-31.738536878652273],[-8.924893916080329,-31.90131086323824],[-8.672169932202765,-31.963542672806287],[-8.262829710701908,-31.897797921405754],[-8.119051741530104,-31.989016818659696],[-8.1832078718515,-32.18517786918581],[-8.1911235305138,-32.45262049116131],[-8.353483089748424,-32.54938467254104],[-7.731629382419367,-32.84906952784877],[-7.472531887602555,-32.805848327170416],[-7.308141863314493,-32.69681573773403],[-7.048144309269941,-32.352005879622546],[-6.86680083347235,-32.33942295619654],[-6.598822067522163,-32.03629882230464],[-6.444562217904455,-32.01643223615143],[-6.139786691895077,-32.159273088191604],[-6.076106665233269,-32.238318703057665],[-6.031035659946524,-32.55045816070661],[-5.8497825044987435,-32.59431443862732],[-5.510277296761762,-32.46294231274821],[-5.26204136609087,-32.57317743015289],[-5.229453946697423,-32.772804477433745],[-5.2970980158048855,-32.92812848336546],[-5.0856651300784055,-33.07818146739987],[-4.779145523756367,-33.08250288203316],[-4.571204276231128,-32.836018723495336],[-4.41716966858048,-32.79135343105848],[-4.074537344595367,-32.81840084236963],[-4.008557108609522,-32.58015156237379],[-3.8167229484305376,-32.50539357400345],[-3.658612860264203,-32.599157383058035],[-3.554431488973217,-32.96461693228219],[-3.71907198940169,-33.01837436837566],[-3.7865074784643467,-33.18792957057369],[-3.715370333308204,-33.441641584098925],[-3.4913214315204217,-33.663663229542976],[-3.3105785990385934,-33.70761776061593],[-3.1450282511292724,-33.636402207947704],[-3.080551992781948,-33.424279627612584],[-3.121178358633581,-33.18690410728563],[-2.8593600380085684,-33.11072899140353],[-2.912385165427866,-32.99436471822645],[-2.698957461385117,-32.93679481028151],[-2.47385625603828,-32.66265649550315],[-2.5435764679755404,-32.35552188731753],[-2.4122668621236203,-32.39896022173239],[-2.119637487336145,-32.25894068628824],[-2.008794969795857,-32.33238301841312],[-1.95629459172393,-32.640800516631884],[-1.7869927312039589,-32.90355792471418],[-1.6409083230863606,-32.90619856354789],[-1.5840474241273395,-32.77413963098619],[-1.3617162999320243,-32.811678219733444],[-1.1720956287732474,-33.08121549638584],[-0.8902277929663149,-33.041366514826294],[-0.7538164963221266,-32.92990707384907],[-0.6491503811879846,-32.55383964928553],[-0.3953400204388487,-32.65735353642497],[-0.17231507967107795,-32.6580103259396],[-0.20366898019325666,-32.78126050490256],[-0.3569346213473919,-32.98323949117065],[-0.06384497287510292,-33.11918836508316],[0.1745741651607181,-33.09650773795267],[0.35895381106905416,-33.39987515289564],[0.7757192376770065,-33.36646187153344],[1.1234684336562055,-33.73092388075785],[1.1902759725389804,-33.9016475876117],[1.429789461981203,-33.85868808739268],[1.5056097585115893,-33.574690785458465],[1.59875623172296,-33.41600030200179],[1.7550523321403544,-33.43622452129111],[2.009474019352672,-33.55739563558723],[2.249159591901649,-33.4845674401022],[2.3356506694686234,-33.361684880998915],[2.4303044744418973,-33.01928498016705],[2.810329030673643,-32.96202545752462],[3.020783254827657,-33.02355455635802],[3.3177096231906726,-32.93571438544293],[3.6253569500896465,-32.885638134837706],[3.7501622279182607,-32.731517562969124],[4.305542376503763,-33.03300988938466],[4.391557036932706,-32.881953098179224],[4.659249434296152,-32.96960733613196],[4.769640159049032,-32.87599157666314],[4.738534906566522,-32.68667711591288],[4.876150270540764,-32.659634219125756],[5.1367379461497205,-32.70712050176881],[5.273747243463999,-32.582568379505574],[5.498017600880411,-32.58911964868686],[5.672056897637451,-32.379152427637486],[5.935355311916452,-32.487531840220356],[5.945829546130719,-32.69697858055599],[6.048508236219153,-32.748316195129554],[6.584354732022144,-32.83437680238695],[7.051966576710337,-32.83006087682136],[7.272498827883708,-32.71444357318791],[7.385557346210354,-32.779207652084665],[7.693599542453075,-32.66193762675159],[7.708430028574624,-32.406839984021545],[7.907776138023254,-32.24399864167019],[8.259017363358353,-32.398917523169615],[8.899326773285507,-32.83353160991025],[9.199480438356684,-32.85259246134763],[9.398979215387461,-32.99245602339075],[9.531949474318715,-33.1793329104714],[9.64307494859161,-33.16047128555067],[9.71534539400772,-33.34222629509246],[9.860306475818073,-33.39673195015044],[10.017143596745036,-33.55774346295809],[10.210019981927386,-33.56215418312257],[10.5341097108586,-33.64071223913361],[10.751297610731065,-33.84660469568585],[11.05858617991393,-33.890747592049436],[11.329400426360658,-34.01046377761611],[11.400318033364544,-33.90056085151786],[11.59980513038351,-33.99813994952377],[11.776249130963231,-34.22791810803691],[12.121386236041337,-34.25676356941846],[12.236049440867859,-34.15307230330095],[12.260564199495866,-31.43380849270457],[12.270375938695848,-29.812523047712347],[12.287363867055065,-27.943504782665443],[12.305100980201159,-26.309001822355476],[12.329989212212384,-24.47098857097598],[12.353277338634339,-23.10254991108338],[12.22636207276349,-22.37453686849098],[11.840133270364339,-19.96336506732185],[11.396540942671932,-17.223653031119962],[11.15817993632201,-15.607246340684972],[11.121876233715414,-13.398448797486239],[11.10561780019015,-12.115701625453237],[10.346174655638514,-12.128191751134366],[8.018159904386971,-12.145793365145732],[6.366511136529513,-12.160284396967521],[3.303442165004269,-12.17144365306711],[0.4852282462001948,-12.16570913646166],[-2.5581342682349137,-12.139373396106125],[-5.691256274698052,-12.09982731581384],[-7.942835536731039,-12.058517590987886],[-9.670877405710208,-12.026134544544073],[-12.471249895676253,-11.94014672676275],[-14.212078967739142,-11.887293093194],[-17.17393420968468,-11.780851881190827],[-19.86171980136749,-11.657117329803075],[-23.394491479033483,-11.518991482002313],[-25.39946404533427,-11.425704629877558],[-28.284934066932465,-11.286413585811227],[-30.763083521479004,-11.15169750347356],[-32.63945317059252,-11.020160389765309],[-34.45563211878416,-10.893299507143515],[-35.11137927281883,-10.814640988565417],[-36.16422165377581,-10.736986504068158],[-36.43045257757133,-14.240447606823222]]]},"properties":{"name":"Oklahoma","ns_code":"01102857","geoid":"40","usps_abbrev":"OK","fips_code":"40"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[86.0203417031575,20.26334600887488],[85.70287244906785,20.056515597999976],[85.47282276757308,20.05169987625275],[85.3103149864385,19.825261813458084],[85.32989400454318,19.6858800083327],[85.56500083930595,19.486910376496308],[85.65453775840608,19.26860463645483],[85.81399123356661,19.08206063047437],[85.76593665990532,18.78548234131167],[85.7998409768074,18.60628250652424],[85.70478217325606,18.528707553270102],[85.86354646343358,18.38654942074748],[85.8612530061011,18.23464392961925],[85.96471685407607,18.042789962439887],[85.90919223223396,17.646110040584944],[85.7383087887109,17.397344822869055],[85.73827509208398,17.18760390565185],[85.59271068727955,16.847513049532846],[85.63383496672074,16.48548878964528],[85.5025370437139,16.28160865019699],[85.58172942467785,16.077470390481672],[85.56323358306324,15.826305108751882],[85.6176186208716,15.567408953133096],[85.51704402781576,15.378522197095213],[85.59818075129603,15.160791085044645],[85.37961332694384,15.171155490141043],[85.32097179449366,15.06305416808998],[85.4570058529785,14.788972465349172],[85.30108014883443,14.608812068704374],[85.3551189933532,14.313101030559633],[85.15998255073659,14.035023998874323],[85.43232554155162,13.727007053422183],[85.27011135769878,13.50634977024208],[85.30425878909529,13.271421640743881],[85.26697726386686,13.039002898331539],[84.98916017293159,12.953771755280922],[84.57264802543123,12.444466286258969],[84.26708037671752,11.996414089788939],[84.0980604601108,11.606354462913146],[83.83989932487786,11.46942896491929],[83.73993055854814,11.178853926618652],[83.4410715436981,11.085322933731263],[83.07193300698819,10.745996673921104],[82.86161537091422,10.689970844457719],[82.69294805945646,10.983810736577935],[82.40278190552384,11.091311905102014],[81.93242474072284,10.51577519814958],[81.95903074337154,10.071075872469708],[81.35370287030594,9.96582566633694],[81.2702849626114,9.82396666006472],[81.32930174643545,9.63039402975487],[81.15675069348917,9.518125252170096],[81.03263392074864,9.219980424417285],[81.17880106991406,8.769033844567373],[81.13945890606382,8.598274427441543],[80.8528808017183,8.360351496959382],[81.16325549485761,8.075036567240168],[81.12193951631471,7.705648954275659],[81.2952323846153,7.504942621334923],[81.14272788895197,7.429023024310303],[80.96595729399431,7.5468946980576295],[80.8201995731397,7.399377641746118],[80.82676066397269,7.2028594075589405],[80.6263311214322,6.974411057645834],[80.40263511236414,7.139219715013213],[80.50572092447621,7.417133592435823],[80.27549152796642,7.7439084517263925],[80.0078315703817,7.752710571957372],[79.83594130169178,7.980133078640402],[79.66933736028484,7.915871548956626],[79.62309079929533,7.693519252486719],[79.43575181960112,7.531168903044372],[79.29410014127322,7.025949311584218],[79.22851364519316,6.9434060788350305],[79.28187395732323,6.544907347231779],[79.06341999977161,6.324202301016678],[78.91737601565035,6.0961567947178],[79.06420817316067,5.913854432755951],[79.21223259414364,5.571268929439613],[79.1960293807988,5.363116942360239],[79.35659967510733,4.987791072464702],[79.33307077767876,4.798673935094019],[79.12175515325677,4.706220089044961],[78.84429841722034,4.695659762532754],[78.74479019499566,4.536143516970425],[78.76796845526846,3.985981670863565],[78.70819830129304,3.615258480727081],[78.36353128048276,3.4572049159510616],[78.27550625057162,3.480806274335099],[77.58387618422806,3.126209190092612],[77.39696573391997,3.1067565190891004],[77.26022528545836,3.2085467658203735],[77.31161973816478,2.664441818346023],[77.44666853843515,2.5570130125833703],[77.44466429864266,2.337566594415545],[77.52366385085777,2.102617704781861],[77.44082460585524,1.7480449281277697],[77.41425353391699,1.4095711698187934],[77.23848955724954,1.349934013084368],[77.3219607696849,1.1463042172516638],[77.62420198050121,0.9687010610430442],[77.65195141110199,0.8518666572573984],[77.86217163252795,0.7211380905707748],[78.0959064379731,0.27571981805381773],[78.26618038747748,0.2764788668365534],[78.40155513319608,0.10898318307738868],[78.25870186159383,-0.20383733616825053],[78.43107110483362,-0.34066034584217375],[78.7581913171688,-0.47863188466755924],[78.84700098400764,-0.7682565746250029],[79.08856476018497,-1.0380626912493833],[79.30158112184398,-1.123728121997314],[79.43982169343938,-1.321590213918799],[79.47128531844132,-1.4760154761008337],[79.65139955200942,-1.795512781024302],[79.89156540888139,-1.9777972224178],[80.07229497657448,-1.9803497480426042],[80.1654450578701,-2.1669137143981265],[80.3452507303561,-2.127927155313588],[80.52218562440052,-2.355044181841384],[80.65416124139733,-2.3286851065097527],[80.77286866880844,-2.5593016545933205],[81.0071095659011,-2.548906895304509],[81.13414467167324,-2.669177850074498],[81.6223371843472,-2.587927429285713],[81.80460992959269,-2.745920527857291],[81.52891763447363,-3.0478717123518395],[81.56950834207984,-3.15666437463107],[81.84940980071029,-3.265629321886453],[81.97443156428163,-3.4339744294449983],[81.96521784604107,-3.6653589258340404],[82.02970052420724,-3.8155342912020873],[82.2281913885714,-3.9836101404907174],[82.36722654421125,-4.006424744900486],[82.52383713520493,-4.273363444020781],[82.68679391465419,-4.309947195317347],[82.88451887809933,-4.243201755981756],[83.14754013738052,-4.356304508459577],[83.20803399304192,-4.533451321050716],[83.59141652004418,-4.738501356514239],[84.23994639207109,-4.602745423639396],[84.85250765118431,-4.019014795016701],[84.96730465743964,-4.0075044313646195],[85.04398452322059,-3.681519575777571],[85.198863118523,-3.5027713580828648],[85.47475673503547,-3.739062436408274],[86.07409784481197,-4.114410222775852],[86.36542666184498,-3.86506391958456],[86.69472696891604,-3.684289120770852],[87.31978638193326,-3.434244805486392],[87.5284866058359,-3.447539093962545],[87.79756746953558,-3.2457542367928363],[88.03270763593724,-2.9885880773082483],[87.803074099317,-2.75565373068083],[87.88376297055528,-2.541718437606635],[88.00787698519008,-2.418691707674528],[88.33980793412992,-2.5917208742452345],[88.4435042313688,-2.736968776787344],[88.77736378684925,-2.5207245334328183],[89.07401827773097,-2.2717914442330533],[89.53374861068022,-1.8216506989808705],[89.74913042826057,-1.727136942716769],[89.87895389657382,-1.8803410521982176],[89.8950870850492,-2.0431345828675482],[90.01587980751174,-2.111694851003894],[90.26083617076304,-1.8747511180689256],[90.88787594493938,-1.3445321475500915],[90.77341381978039,-1.0865021501949967],[90.66288801371131,-0.9728205749387263],[91.01018557122244,-0.6872003359789802],[91.18118732208349,-0.42292541482266144],[90.9026655870174,-0.3352232621154611],[90.69102740015576,-0.037713989689612766],[90.86588177783646,0.20239854299867527],[90.81936562423866,0.32406661816427645],[90.86302577366178,0.549832622475238],[91.03696149862323,0.9274684819353612],[91.20997241669842,1.388496928566473],[91.31816241750565,1.4710359816021426],[91.63551556913507,1.9738872705087],[91.91330570240768,2.3521712248644686],[92.02583427659216,2.6396705048767277],[92.1075054122022,3.046815420359259],[92.22536696603038,3.254170168887328],[92.17102028284279,3.482899500750651],[92.2794876295372,3.8923566955749966],[92.48806924181659,4.219184814758034],[92.78047672154786,4.527136266021934],[92.62182396960813,4.762025537572494],[92.9290262123249,5.169314120673114],[93.049652717933,5.643933706031471],[93.1228344719632,5.770985227763005],[93.0164259658284,6.065793423767053],[93.07771723316002,6.338644139586805],[93.09771411831886,6.776399592616325],[93.14679373698812,6.93800987528841],[93.80753809203428,6.757675551006282],[93.91247239561783,6.652463108093504],[94.25203597869555,6.154308939408794],[95.20447375493806,5.991618792049074],[95.3665047916681,6.109971044115402],[95.46382074559065,6.357872448893635],[95.65603840781847,6.660766536044776],[95.64177381229904,6.887897528114855],[95.81364810862391,7.416434803801922],[95.88505363554145,7.864998314899123],[96.0843981566309,7.952638331669311],[96.02976748945055,8.24421065054114],[96.16245804182759,8.917730671676216],[96.37822007120101,9.376825893819303],[97.16449576604509,8.888749016995671],[97.44633076144467,9.821856307387478],[97.58288433787857,9.957640986937298],[97.65609764636524,10.162694624441425],[97.78748856649054,10.034645003671882],[97.97572759166393,10.207439415975971],[98.17814196507074,10.644324054757904],[98.35012669273871,10.558510554460948],[98.5563120841372,10.980772621067437],[98.42233595914288,11.056526158799564],[98.81806170554457,11.685316556282132],[98.92108895121618,11.738341846504971],[99.04270900372383,12.036262373883801],[99.14875991714321,12.163215693155594],[98.92128041798566,12.338960961692365],[99.07062222555913,12.693686724257637],[98.94636038678883,12.76820103305163],[99.18293891446149,13.240601528285222],[99.24329563545716,13.508479102653537],[99.09372837426612,13.521501156574793],[99.1814734743431,13.747693175570177],[99.0649471447182,13.870312868715665],[99.1110546778112,14.01091338499088],[99.05801977191796,14.274032231640845],[99.57884463135807,14.002004346926869],[100.23537486010756,13.617789195945491],[102.29137242727693,12.497391979015086],[102.36316340811261,12.996981999255743],[102.45804469388976,13.270594470621978],[102.5055965226112,13.695780022089021],[102.61980388839608,13.906021594134234],[102.40817331438667,13.955949457763097],[102.3609298375404,14.267802876262053],[102.43599934025131,14.368304879957075],[102.2952866238383,14.574337596722664],[102.11376650336979,14.575491719086282],[102.01149778405231,14.751106669750895],[101.97220525428978,14.978664790026814],[101.80638225554546,14.97320920474158],[101.59603037242569,15.084213781594961],[101.45820612738939,15.410741292759333],[101.6602161966444,15.470174793749905],[101.59603748930043,15.731855724796016],[101.33259602777174,15.752858799000515],[101.3329572526846,15.623320520288347],[100.94539361241411,15.632031419811588],[100.69872070376707,15.534329906613175],[100.48650937987419,15.74625259841723],[100.06835609658876,15.98249627139758],[99.69066807364987,16.0135123272331],[99.3231871447232,15.554002956654282],[99.28497959123233,15.398575383274762],[98.78173448756891,15.460577177966648],[98.73092326589223,15.246762770128532],[98.43155457562918,15.283412376253954],[98.62547566908785,15.075842096191092],[98.58289757107053,14.986099117946777],[98.36468765497126,15.037362656058875],[98.36857104420092,14.890680378560528],[98.57085511814402,14.778422821158474],[98.33805948764545,14.501602958873002],[98.01407061026242,14.502164393732615],[97.81336026710756,14.427561427507927],[97.49900063696671,14.512039769206588],[97.31862494346862,14.446942450663377],[96.9111130336593,14.579040978560169],[96.4664696937268,14.834415457738492],[96.3311902987459,14.651101559622726],[96.29610529216453,14.495831870172832],[95.97607751532567,13.865824355578205],[95.88179962038565,13.848945352947316],[95.81768049025978,13.509207828753857],[95.25250011129002,13.644687905047013],[95.05763283574585,13.60646669732645],[95.02295724902235,13.443643487441271],[94.53356586050332,12.737826469704876],[94.31534184342591,12.643178471164024],[94.35467454769856,12.518951354838338],[93.90872113038101,12.115022647641243],[93.57950872697701,11.679273624129976],[93.57572575785841,11.595460617542976],[93.35890840852167,11.392495726190258],[93.26409869828908,11.391671411512743],[92.88273864707881,13.65144966384187],[92.90152752652904,13.654655399490924],[92.67748223760837,14.95807147531828],[90.1925781747983,14.539213121281538],[87.0892439286871,14.04077807509085],[86.89369984619013,15.206710156230184],[86.3576828522193,18.32655101657395],[86.0203417031575,20.26334600887488]]]},"properties":{"name":"West Virginia","ns_code":"01779805","geoid":"54","usps_abbrev":"WV","fips_code":"54"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[50.17036245745686,28.272522495195947],[49.888893951519776,25.701324301721844],[49.679014135709465,23.478096303583097],[51.42906755473148,23.62565151479636],[53.697482910994104,23.82523516117235],[55.457284735048276,23.997960676607892],[57.33975709361291,24.16934378071564],[59.65944542550207,24.40966813658446],[61.37728620544562,24.585986895135516],[62.295177928639326,24.688403710600074],[62.34878730805479,24.272303645536002],[64.07441029768982,24.51176026584786],[65.55589907149322,24.725286921036016],[68.07424525413165,25.10989000970587],[69.60446643077707,25.348164558723276],[70.97395349209883,26.982017074388303],[70.70262537110939,27.470433620080257],[70.77765792628625,28.02483310567664],[70.65091231329454,28.32501286465014],[70.63078257129867,28.728854095159566],[70.720988630004,29.046062294043477],[70.8803344912959,29.25599988987408],[71.25143174444179,29.399172759548684],[71.46359987994134,29.518801728827984],[72.03550359569059,29.752252211686606],[72.71613640149602,30.833910768027806],[72.82407604411762,30.97892964549868],[73.01681880305824,30.96479988936291],[73.38293561444117,31.367311113124302],[73.42806205121492,31.5633913781782],[73.39524113061545,31.733443366784936],[73.51940847995435,32.34408955103559],[73.39504879916295,32.61486994448734],[73.41766230319234,32.92708106290112],[73.38129758868915,33.085863103712065],[73.41187623349015,33.325503304179435],[73.57892836887495,33.65806456332798],[73.5036433051249,33.74653357413037],[73.72089732892226,34.56384974587841],[73.90544803909407,35.32814991274429],[74.43047111081124,37.37794316562423],[74.08669160636937,38.24872642841035],[73.19150156322952,40.469754763810634],[72.18316299164616,42.84347803632628],[71.99718528616648,43.306189268405554],[71.37218179552465,44.713723680155596],[70.64217397000886,46.3375410274568],[69.39876532494723,46.74349855123749],[68.72570507823916,46.94772620715563],[68.04853634057903,47.17654212726326],[65.4505778080242,47.98600790134093],[64.69389598379128,47.928966339128095],[65.04036098931634,48.443674296599156],[65.48621825154191,49.069476399367204],[64.70830270168364,49.50424395143411],[64.28488296990452,49.543072993521626],[63.78699170919905,49.41290094199773],[63.44451602098009,49.459380246462935],[63.116632149593634,49.15824388705257],[62.86571240098894,49.12022798939889],[62.723091026675824,49.32108549997391],[62.56265624503241,49.38222600570691],[62.53572495069295,49.52502509962822],[62.151438814873195,49.670301127642084],[61.951253652632936,49.902684565014425],[61.8291756214382,50.2325161276575],[61.888581242108074,50.2691656120446],[61.68404876573248,50.482640448195546],[61.6074980165984,50.687326951986236],[61.702514676946976,51.08199202907624],[61.59299483089567,51.1902930339466],[61.35890790463598,51.157529597146265],[61.1148437800631,51.169891501393195],[61.00562751120714,51.01237549533405],[60.82404957201976,50.96202868645837],[60.57445023468691,51.009771017192364],[60.1947969443416,50.9505744528219],[60.0836019638425,50.88751964665941],[59.965846349400266,50.71471594807469],[59.56103537163164,50.718919256972356],[58.40753894397183,51.41366337827041],[57.72561959165896,52.4864078667236],[56.34100509915352,52.870656159114695],[55.69073238919994,53.0691546450735],[54.397822045483366,53.41716384374196],[53.107363143359834,53.76999607437035],[52.460967935690874,53.9598341733482],[51.177833514907434,54.30027165351571],[51.17289418613043,54.32793119190543],[50.211435096653396,54.58700799867355],[49.258143931522476,54.817615954241624],[48.587027072022096,55.00593611522529],[46.9711418243508,55.42373849333867],[46.3901193745058,55.59423423482898],[45.445339159115335,55.82688845194786],[44.18298929221999,56.15070875104915],[43.55177507338359,56.320426946520186],[42.29567764427769,56.63528972563572],[41.672843588598326,56.766553765247835],[41.66799408869815,56.79807308850195],[39.818270374569906,57.263171794062366],[38.38246905455713,56.968242011027655],[37.04095964245304,56.44354358062307],[35.36033273455381,55.78041479344863],[34.64072543401255,55.90944698264693],[34.06163583903006,55.02604228247535],[33.26081927492087,53.756756027819996],[32.6914593661213,52.84830092013629],[32.51653994158565,52.51347735517689],[31.993864356727865,51.644280612952706],[30.753345462133645,49.54308311812171],[30.881444575106286,49.398326873274925],[31.096770224557307,49.43701723176665],[31.294249835693943,49.425987896957935],[31.54303639493411,49.2797076636006],[31.774512751926572,49.282382032823826],[32.098777049409215,48.86788397956371],[32.31539065970811,48.640946694472156],[32.31666429901804,48.534931951492716],[33.32826966166799,48.391477980214034],[35.615865747462124,48.07607670354151],[37.48771800736876,47.8225520216253],[38.72788452904937,47.412761397930545],[39.082504549827696,47.313579215881816],[39.286146858687765,47.37850262996212],[39.59443819521896,47.32763213893424],[39.70778710053308,47.21575538972853],[39.91737994693348,47.219244392403915],[40.15585419097405,47.367550039423776],[40.43940436277576,47.396141250478614],[40.49914850221931,47.289328828979464],[40.66084595382664,47.32197579750872],[40.87542162942364,47.24308615694371],[41.08065169850329,47.301474210971065],[41.494366685987345,47.15257583974933],[41.719909890606466,47.19932657845954],[41.852028739693,47.12764778468816],[42.09739161667927,47.14640451005606],[42.37950049990607,47.03333352326877],[42.49942714902919,47.03893657627347],[42.525596454084194,46.8532145629638],[42.68578615729823,46.81900658276894],[42.40829929722763,46.55703556280667],[42.61797832862974,46.379889445397104],[42.83966315509113,46.36920619102547],[43.109209541002876,46.45702818225335],[43.285928053117615,46.282662789112806],[43.70304286545991,46.29052679206296],[43.92621181102633,46.12043214855423],[44.06457986277384,46.09640262560865],[44.24316163391212,45.92140092621145],[44.0428545453019,45.853382295929784],[44.31890531477694,45.56680599968289],[44.1865919264344,45.27053631307221],[44.29172733446243,45.05131402610465],[44.21340221742255,44.86595344811973],[43.98833184328351,44.700456374667475],[44.06356269690392,44.57789724119396],[43.91647320303387,44.33002114496851],[44.09772598824687,44.262715323998826],[44.393764136546935,44.311522229196605],[44.5773811944692,44.302406526390264],[44.85245435210603,44.52652607332497],[45.043732311613965,44.43416157466776],[45.113774765007484,44.29048998332916],[44.941117167023414,44.05828909577924],[44.79567992940876,43.58623765656174],[44.778512941090284,43.42198407920589],[45.055913811484075,43.270599531291644],[45.191957719334155,43.091901200568884],[46.30796150580435,42.997736239794285],[46.4115107009268,43.65923518491036],[46.83780180774498,43.88754472856755],[47.48470209481893,44.505341916201935],[47.77295834863797,44.991156904066706],[49.5013592685482,45.1049356440445],[51.99222072868171,44.29509974044662],[52.16340765499934,44.23448120604896],[51.32885988867803,43.600700277376305],[51.02615864677117,43.348438608511515],[50.23275586022013,42.23824805045567],[49.64587695484697,40.13809888865439],[49.6837123359882,40.140891669866754],[49.147608325043485,38.17578785493595],[49.09629566034854,38.04232376321015],[49.004177820789955,37.284631397999334],[48.849785474472924,35.73584214408787],[48.83621674825784,35.362100129047796],[48.91692561252267,33.64485185636286],[49.286773535881906,32.13290739541768],[49.78538958062279,29.952026531083973],[50.17036245745686,28.272522495195947]]]},"properties":{"name":"Michigan","ns_code":"01779789","geoid":"26","usps_abbrev":"MI","fips_code":"26"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-66.14937212144588,20.85133770303588],[-66.51414029254477,18.28913267755052],[-66.70181901240139,17.103674779916705],[-66.91125085603706,15.644835375522801],[-67.26095392753037,13.186069034856116],[-67.51091439873119,11.44409119843858],[-67.76281911819255,9.632472520714792],[-68.00514988462709,7.929118542286623],[-68.26618779951605,6.161077689722425],[-68.44824695422317,5.064539343107781],[-68.88968021516625,1.899633559407581],[-68.89832582517238,1.0954021708186683],[-69.10350646213794,-0.3475001253983465],[-69.14812008412093,-0.7421638190247458],[-69.52407181961003,-3.427563605934836],[-69.69895376554851,-4.53168439623577],[-70.06615646820839,-7.199983140779321],[-69.11663339287611,-7.330990650637876],[-65.61542294127172,-7.791159036737113],[-62.70294771651034,-8.149849313805525],[-61.21849623307697,-8.32998402965444],[-59.21903468185595,-8.565909577948586],[-57.93017929093201,-8.712987944836321],[-57.89451012470379,-8.77233624792452],[-56.33192226014067,-8.94381983253033],[-54.14510436927682,-9.172408601251224],[-51.131652327134695,-9.471803807439555],[-48.648637511446495,-9.72092100147679],[-47.565332986345396,-9.841132605054584],[-45.4061527763659,-10.034806046172159],[-43.68534476498087,-10.185462161406354],[-40.75368422510607,-10.40416716489011],[-38.96509412679895,-10.53308834404615],[-36.16422165377581,-10.736986504068158],[-35.11137927281883,-10.814640988565417],[-34.45563211878416,-10.893299507143515],[-32.63945317059252,-11.020160389765309],[-30.763083521479004,-11.15169750347356],[-30.570701703559973,-8.1963047021963],[-30.43849538148796,-6.152684837351922],[-30.32281829261948,-4.090539137087066],[-30.14217736442976,-1.2198186228302819],[-30.012316451238505,0.8302801151070469],[-29.874707663042038,3.0733682855467483],[-29.71153210195261,5.884414175138174],[-29.54964031643803,8.565261677234583],[-29.438000494282,10.359026182719287],[-29.20939593005242,13.848449319910548],[-29.097518612734977,15.534579610933758],[-28.980312746595526,17.32193630084639],[-31.670678751960846,17.491372041018977],[-33.11141891629698,17.587866065381615],[-35.9763818856077,17.78999892346702],[-37.59322726934955,17.909202668195448],[-39.637481438049264,18.070139517390814],[-42.681102830587875,18.324642497628123],[-43.90485516831376,18.408579862527656],[-46.48869548711621,18.643306715049064],[-48.53497843202123,18.830570914072386],[-50.3124971612377,19.00736048014103],[-51.65431238331545,19.15696277903088],[-52.31716901737298,19.24645572814525],[-53.30418577750853,19.351015399427133],[-55.305687574094705,19.575618365847927],[-56.56858251529825,19.711234146408312],[-59.26929550047583,20.01429319404913],[-60.8367305258635,20.20016346781668],[-61.551479664287534,20.275157217139913],[-63.37771496347499,20.4930575128233],[-66.14937212144588,20.85133770303588]]]},"properties":{"name":"Colorado","ns_code":"01779779","geoid":"08","usps_abbrev":"CO","fips_code":"08"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[115.53818983339688,30.238673686360286],[115.2416899437473,30.102906270853417],[115.18496969476226,29.95918116546346],[114.94967687349475,29.674189641624427],[114.8697965465033,29.413286155187475],[114.90369026318061,29.23698348118835],[114.84810740899236,28.970455127072242],[114.70248790905828,28.665911434985166],[114.44271391921411,28.42090216805526],[114.48660952538015,28.24094721803975],[114.34896809991949,28.131464269144356],[114.32385717444805,27.95272109693584],[114.03565067072951,27.734127350004282],[113.85444823060385,27.542018903386335],[113.98089511138157,27.317979291218435],[114.43990498793418,26.88869284694525],[114.42404578929323,26.71890916575502],[114.28316138773887,26.313119427628692],[114.15062318384118,26.170957171786206],[113.97433863518815,26.163071100443045],[113.88470336921932,25.97225878472674],[113.98462544637415,25.873063640049985],[113.93998181363963,25.58423452211511],[114.10642499437441,25.486398410292036],[114.02418104697068,25.31976241264672],[114.07351902104267,25.09900611363453],[114.30123990917106,24.809420774284337],[114.48226113009443,24.92120748603816],[114.67958892112331,24.905915485249754],[114.88664279725484,24.774575575199584],[115.01128353747316,24.3878052592151],[115.00755539825691,24.226893969462633],[115.11262780655908,24.016437626040386],[115.29233745699943,23.939193498348875],[115.47224516996847,24.013635809187974],[115.6394943860357,23.970012991151847],[115.88164717803328,23.609448351176596],[116.32546868724116,23.41173111710756],[116.53271748696623,23.151824014299617],[116.96848532124822,22.998303400779],[117.09999635255255,22.8266340606484],[117.30753352264205,22.70353262285802],[117.31963881777467,22.608556332272556],[117.02398570346605,22.370275085728114],[116.81842834159809,22.35097117727565],[116.7033770681652,22.06205575074993],[116.33366000659103,21.86505327977783],[115.9958939714613,21.46852661578317],[115.833389168443,21.363429550769293],[115.7328847126472,21.123117949045692],[115.52077468855103,20.991657909164207],[115.46054575482466,20.87786683943845],[115.55632026138787,20.639118897667363],[115.54483560748544,20.47650441955551],[115.26849250496733,20.34303913198919],[115.14415392161564,20.196292861405333],[114.89434386354408,20.057925048777648],[114.58593025771071,19.993365950532837],[114.21033256534885,19.588752782427065],[114.03072818528783,19.3005429810196],[113.99594774493909,19.065140862669],[113.88704537090452,18.794016708753702],[113.88778315142473,18.58139978688695],[113.70644726464364,18.28885591797057],[113.78361376110078,18.104656589614695],[114.03651441492316,17.992103847073],[113.9824477041137,17.726551396530862],[114.07957051855006,17.438305039440976],[113.91679586429542,17.387942229797382],[113.97079480848309,17.1165160505407],[114.74329480156902,16.56901213619873],[115.56469745619918,16.00870218207952],[116.09354034800272,15.465188193861561],[116.52528559714304,14.98866147580366],[116.68527317135417,14.860377313688904],[117.92824875280894,13.214670635245072],[118.35076623968659,13.92753447554447],[118.82280226714899,14.222363766941614],[118.97788624678365,14.549575357530742],[119.17159769519772,14.81692292270676],[119.18438698205458,15.069286337008068],[119.29799856722684,15.383709033587326],[119.45632677848018,15.665890430679623],[119.39650539143312,15.867799770003298],[119.70126071984564,16.678991610503196],[120.07119174520932,17.3346455696993],[120.42274694502825,17.491548925883112],[120.55890871674954,17.61671035644726],[120.91546488181305,18.37488808670896],[120.95298939289728,18.59483347137621],[121.17407762707487,19.2060162191185],[121.44159097956675,20.079559131527244],[121.58562761832192,20.8054685092312],[121.47593502287309,21.643198911268],[121.41530307452798,22.32728311721048],[121.37294265519013,23.216856410003082],[121.45608651657416,24.356631665948136],[121.39723856022526,24.819154299357645],[121.1592524382962,25.7364043746665],[120.76905083575932,25.891243646110137],[119.39170831154998,25.27872966646907],[119.1973251393997,25.37008378935204],[119.16886736103139,25.661777409463244],[119.31268875751685,25.7927850958454],[119.34513165471877,26.06899975016623],[119.27629641469133,26.27581934397854],[119.3598089971422,26.396416094220587],[119.56615648678113,26.411013774776578],[120.00755349656075,26.567263825209537],[120.0820270197065,26.900703189700813],[120.05374201698032,27.26789417079528],[120.20139676319339,27.759617542363213],[120.27289038605407,28.177875698876736],[120.29218983617032,28.786245451731943],[120.23410618546232,28.875251524958042],[118.57689714869815,29.336999906260125],[117.87303630019342,29.522150469521574],[116.94347315625474,29.820239250732623],[115.53818983339688,30.238673686360286]]]},"properties":{"name":"New Jersey","ns_code":"01779795","geoid":"34","usps_abbrev":"NJ","fips_code":"34"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[112.34975158979492,18.650546356829768],[112.4627006754848,18.156026599618144],[113.01207230094438,16.28960854584161],[113.46694209900181,14.730132793450496],[114.23519404399333,12.070079948009354],[114.78134545014746,10.16153430152521],[116.28857264095097,10.430831770715029],[117.28892724536449,10.638673039837714],[118.61556646702499,10.932796329643827],[118.50065360503365,11.461773231194927],[118.32247876970006,12.032106329575942],[118.24669672995006,12.153927251458903],[118.15533158564351,12.525340868157953],[118.0019543708621,12.91711816126738],[117.92824875280894,13.214670635245072],[116.68527317135417,14.860377313688904],[116.52528559714304,14.98866147580366],[116.09354034800272,15.465188193861561],[115.56469745619918,16.00870218207952],[114.74329480156902,16.56901213619873],[113.97079480848309,17.1165160505407],[113.91679586429542,17.387942229797382],[114.07957051855006,17.438305039440976],[113.9824477041137,17.726551396530862],[114.03651441492316,17.992103847073],[113.78361376110078,18.104656589614695],[113.70644726464364,18.28885591797057],[113.88778315142473,18.58139978688695],[113.88704537090452,18.794016708753702],[113.99594774493909,19.065140862669],[114.03072818528783,19.3005429810196],[114.21033256534885,19.588752782427065],[113.81816964895312,19.697833632565867],[113.3624134230362,19.674483799978663],[112.97736474959864,19.52229975310984],[112.78408256181218,19.37837366103872],[112.61292384595062,19.179403594401926],[112.48155272207383,18.91447266458286],[112.42844151920987,18.666657043059057],[112.34975158979492,18.650546356829768]]]},"properties":{"name":"Delaware","ns_code":"01779781","geoid":"10","usps_abbrev":"DE","fips_code":"10"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-90.99343519826625,63.834866645392054],[-91.41635087465394,62.951215068861096],[-92.12512112168136,61.414518536597],[-92.50396477001635,60.5394039234623],[-92.42654120740224,60.515035892910866],[-92.32081079622053,60.33939117682492],[-92.20940053753245,60.27195242513569],[-92.00817316476744,60.00722833460322],[-91.9046975748262,60.02002401825045],[-91.79857342357916,59.93025557513477],[-91.83749835970153,59.77555133528439],[-91.77893721381261,59.651948140825134],[-91.6421265967429,59.65701213145886],[-91.61821207997384,59.55113007753327],[-91.38014835456212,59.40011618879797],[-91.50369159991641,59.26422676665507],[-91.35051293426332,59.131679780430396],[-91.37974856645086,59.03427364236548],[-91.74483633320732,58.905974470944],[-91.73882883990369,58.86848022964928],[-91.350411674692,58.58605214349638],[-91.36613665358335,58.50819215059524],[-91.58643201014226,58.53439482408306],[-91.88079348768994,58.50291529840974],[-91.50139388001578,58.310380170017936],[-91.46911925870806,58.21873951307168],[-91.33550560925899,58.22300804040478],[-91.06924762680902,58.06946332140919],[-91.02221584417812,57.8691026280469],[-90.57616256121698,57.74601367557616],[-90.51684077755878,57.67687336365893],[-90.11883899634559,57.60393676864678],[-90.03250514708965,57.45589230805563],[-90.10669013409726,57.33618936893601],[-89.93147882930324,57.29169977353459],[-89.89746475748288,57.171158285264944],[-89.6675977639288,57.06724468915313],[-89.38061821946852,56.706702536752594],[-89.29312017220623,56.68290530647265],[-89.20931749210565,56.36984531970081],[-88.98692034693876,56.33750293568479],[-88.84282516685656,56.167498432487626],[-88.70020652278224,56.11145191582895],[-88.77891863338168,56.02962019227588],[-88.79798552505606,55.749480552514456],[-88.52902863952066,55.612440143117006],[-88.42830322502415,55.52712586776113],[-88.22661417140371,55.492786770335414],[-88.14841348308701,55.39044117976327],[-88.32339879225603,55.22868028898832],[-88.16591421273772,55.14179592502507],[-87.9816331718592,55.18953500487746],[-87.84367214442429,55.28367075464401],[-87.61662550571948,55.21756280462395],[-87.52476248489695,55.110340190637416],[-87.66266205060518,55.01023360186045],[-87.66337470678454,54.92709298476934],[-87.4977679728829,54.797797366038914],[-87.25191062609973,54.81959701627397],[-86.88719563415295,54.72257775579357],[-86.7993596920961,54.78482327351337],[-86.31494178946598,54.81813927243801],[-86.16106293923929,54.7042627986891],[-86.30210498968837,54.42077242248435],[-86.42265359423855,54.333115164372906],[-86.48191742915492,54.1646077516203],[-86.76109955960237,54.14753230242258],[-86.69928476341256,53.9766116718056],[-86.79164643111528,53.7805328330216],[-87.00792899386948,53.69975989154768],[-86.97742912027599,53.603939234872925],[-87.03588603672476,53.48287049077054],[-87.1731768270893,53.36737747391748],[-87.17327549752103,53.272605467364535],[-87.41024844148977,53.21754974173016],[-87.3523527634422,53.10263318284562],[-87.41895301524542,52.79674976784032],[-87.5850017645591,52.784664323680566],[-87.76432916776442,52.828219528883956],[-87.84721014767415,52.66062826731338],[-87.63777243259838,52.58227085494244],[-87.59014630882645,52.491443373485716],[-87.66497903625023,52.37555365818734],[-87.8123560895538,52.33437364803742],[-87.71113994624982,52.077011255899215],[-87.52654763442725,51.97421561208454],[-87.49837901563323,51.874647720223535],[-87.6693291883066,51.796402269181314],[-87.5403452327651,51.626505307349404],[-87.63951214833872,51.492722520400555],[-88.17455895298858,51.4514457301838],[-88.22610962207092,51.373152717426606],[-88.5512003725821,51.17250958788527],[-88.50375258753195,51.02855413381185],[-88.32089454601713,50.90571278322607],[-88.30282841642895,50.81903395110718],[-88.42618328592464,50.624204594370646],[-88.7340177938925,50.542759837208486],[-88.64797884799707,50.41295908894331],[-88.77363663006271,50.33242009030501],[-88.7647038306975,50.217392408825646],[-88.59871469024829,50.231482098753055],[-88.22257113620375,50.00305510236464],[-88.23474864696128,49.94529062236458],[-87.95952075057849,49.78772095106933],[-87.90015643438022,49.63685509297375],[-87.54882548081235,49.68987652954162],[-87.34594781187238,49.85221273591023],[-87.30997861405102,49.96368314574297],[-87.04860221410887,49.88975569313734],[-86.9658905735545,49.94883793620986],[-86.73801251215868,49.94867945758191],[-86.63838934975551,50.061408582562926],[-86.45382491235286,50.07082617803106],[-86.31162290754847,50.22326350885041],[-86.00679243496165,50.327515460044175],[-85.98725298872998,50.485677617049355],[-85.75030835582457,50.50237856587903],[-85.56913730826788,50.43529664262099],[-85.58394801764423,50.344100429635304],[-85.45327573366642,50.20635344818566],[-85.51642541948686,50.112036719578484],[-85.30986450528229,50.082228505722185],[-85.06678646632047,49.95165052788023],[-85.0458345314222,49.85498940129217],[-85.1870143858536,49.79712681303831],[-85.30840121452346,49.59911924078826],[-85.01665261539411,49.533962967809266],[-84.9993154210179,49.37007934846713],[-85.08962376600805,49.337981113763774],[-85.16585504224567,49.04208703217728],[-84.98963597106976,48.95207646778573],[-85.09383563419907,48.665584013478345],[-84.86974286658273,48.37953487184669],[-84.95384953397543,48.33313948787357],[-84.78231179104611,48.16854881197474],[-84.745929654667,48.05862268880722],[-84.56412767401085,47.898233345902405],[-84.58863707592522,47.75829072125636],[-84.4764194079906,47.54785162676585],[-84.26401638805181,47.521002199437994],[-84.32663983269494,47.41992722656075],[-84.0335909776272,47.21658257576567],[-84.12264141952404,46.73540451045286],[-84.38841243135218,46.71300403830784],[-84.40628757892017,46.5946370106507],[-84.3038021215638,46.393079880033326],[-84.30178812523009,46.28586528414839],[-84.169265178733,46.15406099229678],[-83.86960369688889,46.00067766969817],[-83.83769448096555,45.819022594583174],[-83.32460238549132,45.94687205979752],[-83.08346749201243,45.80840158973612],[-83.03375974824513,45.728560842729706],[-82.8129762086703,45.62550596824374],[-82.86130477156503,45.56923407915845],[-82.72412071875146,45.39342281698656],[-82.74388698226296,45.23728569391496],[-82.61637450871036,45.12621104425848],[-82.63924833171296,44.81654838166224],[-82.81898624987483,44.739566570961934],[-82.62089346172597,44.54646221051603],[-82.67837921053717,44.43513963746094],[-82.50937302597359,44.31944777958712],[-82.64822881649037,44.18046638688894],[-82.58749198793586,43.93804658520494],[-82.36890290625163,43.730717552634594],[-82.22028901093569,43.67396833298079],[-81.91109750292608,43.36304256488154],[-81.72641289912016,43.439142420649766],[-81.70267510852527,43.54672716294243],[-81.80401400972366,43.70077539154197],[-81.43373362060049,43.967093904978405],[-81.09281334991884,44.02471909461615],[-80.84800443552457,43.90027207400634],[-80.53474508691889,43.883849267668126],[-80.28039897702233,43.820052764126146],[-80.05621236419333,43.67685196894061],[-79.89971737779798,43.74612687599422],[-79.52236598434114,43.54418750890504],[-79.38129631598272,43.61418443147915],[-79.30158777261782,43.736796915286696],[-79.26836407687915,43.922320786583825],[-79.05730821308192,43.949572000077964],[-78.85653167907765,44.07780097022259],[-78.57573670033504,44.01962520032266],[-78.56465908033108,43.911276588818225],[-78.38864519691947,43.834689281585355],[-78.11799127036235,43.82597236060136],[-77.96231863029739,43.73036316694827],[-77.61617064853019,43.81044331775267],[-77.35944600602579,43.72260280667109],[-77.18025071348845,43.810054919437704],[-76.76401798617766,43.790887663761374],[-76.60425045804242,43.490552199130015],[-75.95746575036304,43.679547979267795],[-75.53545139233373,43.58052237151758],[-75.39349032218603,43.61855010792095],[-74.95709461329355,43.46346936110381],[-75.0128580238525,43.800352171404],[-74.68258494617295,44.07470141255043],[-74.72429126757649,44.259252097126875],[-74.5853633368475,44.31699547280972],[-74.23461802757296,44.33255893244024],[-74.09037864795337,44.447872949269666],[-73.92213571020076,44.33984153184105],[-73.74908754853588,44.147748418351085],[-73.60652899241313,43.875666678765185],[-73.4597138284,43.71009151775263],[-73.58064179607796,43.680285681644484],[-73.56422738941274,43.497389971920995],[-73.32828284565808,43.41355467461046],[-73.15939330000766,43.02899130161172],[-72.77560308200106,42.84692105176968],[-72.63669976978649,43.626570796806],[-72.37254577993053,44.849779228508325],[-72.21237114457928,45.5183957061764],[-70.86627676112258,45.3771927038873],[-70.4811571129134,45.28082894466711],[-68.97418089510765,45.124516625112186],[-68.76653618898702,45.13675348007],[-67.95841571959816,45.027894457441185],[-67.5048813366632,45.019192915399955],[-65.71647001771628,44.82048411587307],[-62.48386084323597,44.51548585059443],[-62.38038055042575,44.47219881571612],[-59.47341198213282,44.19242807378208],[-56.9654127029659,43.968087215455974],[-55.73300624460669,43.852502825925285],[-54.47932958715376,43.74507991483814],[-52.65069038701232,43.57951142612157],[-52.40725562614251,43.540504349825184],[-50.109743107180634,43.340412258518924],[-48.23345722196269,43.183261000037284],[-46.6177589120615,43.05738064153352],[-46.538175226511676,43.08955633160228],[-45.56072716424567,43.01233522835387],[-43.216763290047105,42.839625066021696],[-40.821491912220374,42.66703942418085],[-38.784869254483475,42.52617515068762],[-37.234577658947664,42.42305144937504],[-37.13811506639031,42.489656404850585],[-36.919407303376566,44.36501718168924],[-36.704904486512795,46.243773439609534],[-36.601311095276046,47.195627540121286],[-36.49208434197749,48.05504201486602],[-36.25964444908887,49.84649416289695],[-36.06701163775746,51.325402443626004],[-35.88879595881776,52.5738490171517],[-35.68648115023779,53.98664740695673],[-35.50695311231086,55.1753631206094],[-35.43052107845807,55.627674548321735],[-35.378820674899764,56.047480593928064],[-35.221144971110206,57.135444477530015],[-34.959251090885886,58.84084449641368],[-34.786523235013895,59.89079855553816],[-35.73933825884607,59.93041331386863],[-38.09962945578851,60.03459235907528],[-40.896495184149664,60.1687219542633],[-42.59432583426335,60.2548954116561],[-44.519947605207804,60.35254831025635],[-46.90038912834338,60.48307113177894],[-49.119221047724245,60.60973086816222],[-50.776506780400226,60.70415385802943],[-53.62606782199636,60.876965288466906],[-55.17094078297601,60.97349546713723],[-58.06724593180032,61.16145137854979],[-59.444082336838946,61.258037705936026],[-61.534686036425285,61.399462332904776],[-63.81493740006523,61.55829263735242],[-66.89341000218045,61.78011241832297],[-69.82297866775045,61.99874512942189],[-70.99049295183347,62.09086773176718],[-72.74188924390172,62.234472534264356],[-75.41972071352872,62.450553864043385],[-77.49342232101375,62.62159316374288],[-80.05228200454195,62.83650042599689],[-81.75542928860287,62.98810664097555],[-82.64495044574755,63.07278483319819],[-83.97899939064709,63.190550155371085],[-87.09407343863616,63.46689775253752],[-89.00351191560054,63.64741739578105],[-90.99343519826625,63.834866645392054]]]},"properties":{"name":"Montana","ns_code":"00767982","geoid":"30","usps_abbrev":"MT","fips_code":"30"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-99.65519411180787,53.58499338642594],[-99.68223395417837,53.87178181175595],[-99.8216274627491,54.02710355393097],[-99.70466843345119,54.03817265798496],[-99.4303415629969,54.26579034899642],[-99.56445665148964,54.44882767903119],[-99.49003797461663,54.55054032013414],[-99.50396219063431,54.701235796161285],[-99.58089264166192,54.77482846109161],[-99.53167768988631,54.859615721032945],[-99.66690912449859,54.958591348229355],[-99.64548907739726,55.03325654414974],[-99.77708485935077,55.08610085813727],[-99.58267209149332,55.3973378692192],[-98.79056689214441,57.342171940348855],[-98.28299667879376,58.545182753007495],[-97.91977020108561,59.37618962122769],[-97.39248219999922,60.57634322079348],[-96.94192975715798,61.53062510842902],[-96.50988131802622,62.37151843638346],[-96.33364860617566,62.73591851668078],[-95.73753287537865,63.893285516375784],[-95.54646537387694,64.26681900007063],[-97.53837484037697,64.46731697993452],[-99.44110781310616,64.65662404910464],[-100.81930075012676,64.79459952919403],[-102.48345632099776,64.96360472093977],[-105.19987037229137,65.24393198186041],[-106.34934619948946,65.36378540905643],[-109.22100960173958,65.66430603328233],[-112.498952391197,66.01815244125093],[-114.37145969167103,66.22520014826537],[-117.23520842102238,66.52815045193634],[-118.8101982637074,66.7167483185535],[-121.72475789796964,67.04309622831882],[-124.3831769921858,67.34399506028396],[-123.293015419521,66.73008256547625],[-123.42139885363532,66.55846847782396],[-124.77972102985316,66.49967391478872],[-124.7786801004886,66.348188388889],[-124.8161829861873,66.07756970438797],[-124.73827983619687,65.78332723888803],[-124.5921596938622,65.67213281386542],[-125.4815907237206,65.35735607811593],[-126.94963676494348,65.35595255346975],[-127.57132394647111,65.48250213903567],[-128.96531151650922,65.828316660273],[-130.41651396640165,66.31063990319916],[-131.90937986713672,66.79284787352726],[-132.0400098708331,66.76907618856609],[-132.00748962202024,66.64610502305823],[-132.34704628360078,66.60631073256985],[-132.45696036919784,66.52557205543809],[-132.45115748665856,66.40263869970438],[-132.37482751893484,66.33198723403544],[-132.39207601343705,66.25126775644908],[-132.55580171524363,66.20205911466523],[-132.6209246654782,66.07937704885481],[-132.86800923428171,66.06641031592243],[-133.04762912897093,65.96936670299358],[-133.02981791224823,65.8318799390839],[-132.94066072170656,65.69210054386365],[-133.11797882391463,65.56420318966217],[-133.2056278317353,65.45875909750912],[-133.23270961889668,65.3447754607132],[-133.11849891292357,65.27498399363415],[-133.16884652003347,65.17764666001473],[-133.06410679046755,65.09467334284649],[-133.00416335882662,64.94818346274172],[-132.82307404119018,64.8649938746873],[-132.81434748603016,64.79979461264502],[-132.70468700149738,64.72573447091396],[-132.67103651083383,64.61451669474194],[-132.5623726389975,64.49299486960399],[-132.72581443908248,64.43064773909958],[-132.82046983957392,64.34304591700831],[-132.7908332623952,64.26577922702609],[-132.57539404747598,64.18116527213546],[-132.40456561016293,64.1763308604623],[-132.42035914853355,64.01257088349817],[-132.51371971451664,63.71826765285264],[-132.58334842752473,63.64370240456914],[-132.5766764600357,63.55058374165584],[-132.71968046466628,63.455294391152336],[-132.71124014016522,63.24268392044032],[-132.60645690298563,63.15979268613242],[-132.63633673622647,63.053358325329036],[-132.48622649633472,62.93703371944239],[-132.54457204730832,62.429468941574456],[-132.70036786204207,62.11712918060426],[-132.82903656840477,61.984117382952476],[-132.8927710506802,61.765373993108454],[-132.8101108497485,61.69578476869526],[-132.8041866279932,61.586527273023314],[-132.88773345216288,61.284438501949616],[-132.93549176337268,60.94939965739423],[-133.01654908896936,60.754429017093976],[-133.4854733035522,59.973862644384155],[-133.84253014526234,59.65504217364156],[-133.8503386459278,59.61639161524287],[-133.25962723946873,59.53678584280185],[-132.96557011394586,59.51311558933344],[-132.8130735313798,59.37203631028614],[-132.5436217350538,59.315883888556094],[-132.06021951024687,59.31475072226461],[-131.85607627982253,59.3399499769877],[-131.63991013813737,59.23492408744335],[-131.438507556662,59.23670100086436],[-131.15167507577817,59.18171382906721],[-130.61645853153436,59.150348000802964],[-130.4506287012739,58.97314197545696],[-130.5633518385455,58.80712350711431],[-130.3519770320266,58.63887025760216],[-129.9217127775598,58.566673406925126],[-129.29283171213697,58.640831928092545],[-129.06044777755628,58.590962904958424],[-128.63277003082533,58.325846621324],[-128.4930400450816,58.19120821410508],[-128.2564023464232,58.07226536102502],[-128.23678108583408,57.86289716690573],[-128.16569467432342,57.785499330742375],[-128.1442373113732,57.64887747695836],[-128.07088508519053,57.55864579906777],[-128.1546766830405,57.379205232086555],[-128.11754727567933,57.19287748416701],[-128.28247045232592,56.986235780373484],[-128.21611034477448,56.85661818570046],[-128.26248158058482,56.67620580550404],[-128.43838820341188,56.483604202493375],[-128.43329564803875,56.387177586015],[-128.08495646748935,56.170175568725135],[-127.50851628723443,55.98727378298148],[-127.05781411821225,55.77926232562888],[-126.75328065474334,55.781944972649086],[-126.63388274438591,55.73569302269658],[-126.57291380035855,55.63729795215453],[-126.27003378394186,55.57027739471496],[-125.91813747092297,55.598992048748016],[-125.80657094722989,55.637352204710666],[-125.39137765019946,55.59902176696066],[-125.07422158008288,55.654457113575255],[-124.86635000232852,55.64832095497419],[-124.33388029241551,55.72483157589509],[-124.0619081047129,55.8439500980345],[-123.76785491627473,55.85395637444821],[-123.42618967138792,55.74765202283844],[-123.08455027182,55.740330129388454],[-122.90667206011003,55.710849543479945],[-122.39407998112577,55.72236150057828],[-122.2417206172067,55.67501092615321],[-122.1040318858975,55.57234078073915],[-121.82622329232774,55.49375992049335],[-121.49595474081877,55.49310204314805],[-121.28698046540413,55.38559627782858],[-120.97229504164495,55.27054817928192],[-120.93958678014943,54.991759163272576],[-120.68341633007745,54.96597081747248],[-120.38590693802111,55.08132711416142],[-119.69111040966355,55.01025475758482],[-119.4828554453222,54.9209552061232],[-119.2378409957217,55.004477088485636],[-118.88897141877919,55.01322272836178],[-118.35537528474254,55.056934942157824],[-118.0385188401837,55.13541451574395],[-117.6885954438038,55.05075918873896],[-117.50002285414476,54.86001751133606],[-117.39691272592924,54.820595370292246],[-117.01022472268563,54.7823706570807],[-116.39418433179655,54.78198405922647],[-116.03047573944093,54.748089872545464],[-115.77156990824062,54.862099047682854],[-115.61123542291706,54.88559734276033],[-115.24660897778101,54.882056544138436],[-114.67361188527518,54.962905830954696],[-114.38608636701545,54.93634998022849],[-113.84673855409517,54.93887910026438],[-113.70692915921758,54.91008922985628],[-113.19042230943441,54.882120220924996],[-112.8808795520754,55.04283082528548],[-112.59665543746394,55.08498274966601],[-112.39993935305469,54.98549503910587],[-112.22662896903906,54.95068203534847],[-112.02635557843034,54.96830191126389],[-111.6052602764371,54.925441404957596],[-111.38336336352003,54.94234321142187],[-111.05676395917158,54.92387040992788],[-110.78055668840496,54.833317425101704],[-110.43737054220327,54.805259329873344],[-109.79125177413361,54.909244045088414],[-109.65285970941079,54.97637817018781],[-108.59426227063867,54.83187980576948],[-105.9817612815105,54.46445968345878],[-103.52732086629378,54.12519621948708],[-102.37941560477907,53.96033693072191],[-101.691203591329,53.87127990504971],[-99.65519411180787,53.58499338642594]]]},"properties":{"name":"Washington","ns_code":"01779804","geoid":"53","usps_abbrev":"WA","fips_code":"53"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[129.30327410471773,37.03541946101093],[129.26805403031352,37.119929047734686],[127.87137523133403,36.854952247282085],[127.51089307782698,36.79880398548543],[125.54113438178682,36.41884398437745],[125.3183077228798,36.34888357361547],[124.65945060831648,36.25598685583092],[124.40779282543596,36.16280712114335],[124.37795074982209,35.99643131545959],[124.13194559515136,35.91445198693301],[124.08079089413489,36.137057889640005],[122.9704822745992,35.930828478882376],[120.89304614664769,35.58742343807646],[120.61600394280916,35.52724198182706],[120.68775435052373,35.24283992721372],[120.98504303618371,33.8325032988035],[121.16732624740258,33.01164532026735],[121.55903641091639,31.05854200775914],[122.0513799029547,30.63558854486694],[120.96999729152816,29.694488689396216],[121.49495941687137,29.231752746392697],[121.5328256871971,29.063050584249776],[121.81707867280363,28.905483575869155],[123.57606149475072,29.759976799319713],[124.7664030636971,30.405228390517564],[127.04730839080045,31.469680276885715],[129.1985508886449,32.466032060031544],[129.46992665613607,32.702295566453195],[129.8963861681831,32.91842215972009],[130.0212371708676,32.908748720381695],[130.05319408964203,33.076378641754495],[130.24804048899696,33.059689266235935],[130.35340574319244,33.2172399542754],[130.1648509582426,33.59971196562281],[130.3812406841101,33.684456639040995],[130.0017956483847,35.06950927592851],[129.44964621865003,36.60799814422786],[129.30327410471773,37.03541946101093]]]},"properties":{"name":"Connecticut","ns_code":"01779780","geoid":"09","usps_abbrev":"CT","fips_code":"09"}},{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-131.17850221701602,-20.382726770827713],[-131.6129192894161,-20.287188797149785],[-131.82505051014837,-20.34811913471495],[-131.94376163009161,-20.792489385199953],[-131.79604962231514,-21.084825131751277],[-131.54018141682553,-21.150256188811163],[-131.24599015086787,-21.109530449504064],[-131.06706603092516,-20.841897094575582],[-131.04001201925482,-20.66327185750264],[-131.17850221701602,-20.382726770827713]]],[[[-145.4387453198595,14.422684597889303],[-145.60139226178694,14.514638310381127],[-145.72603797097008,14.807357816584377],[-145.9632856783172,14.941502338513263],[-146.29770189823802,14.813698245069064],[-146.37659142862762,14.627242619078269],[-146.25018523432956,14.269893587945978],[-146.04862260272068,14.171079941179284],[-146.00078080360188,13.86147182983078],[-145.8346425588736,13.61143922921644],[-145.70443920278126,13.535867449864158],[-145.37878901513162,13.614552086305283],[-145.2381031642418,13.824310601739763],[-145.2450403308969,14.077986401890502],[-145.4387453198595,14.422684597889303]]],[[[-135.2844817668789,-21.53496218121574],[-135.22092918093222,-21.711704718405034],[-135.07825745117762,-21.88581990690057],[-134.74412071354453,-22.095112081153644],[-134.30463160452402,-22.200683823162205],[-133.92814839778035,-22.115543760494855],[-133.754664522866,-21.81349548361789],[-133.8180409241948,-21.62283484491228],[-134.0300697628802,-21.357540236757742],[-134.53616969635843,-20.990466729302057],[-134.93780115514062,-20.958080781522014],[-135.16633598332444,-21.04774092312906],[-135.2823427343995,-21.241369033290887],[-135.2844817668789,-21.53496218121574]]],[[[-128.42737515552815,-25.493535605051104],[-128.97632372910644,-24.794852849443853],[-129.13775869602162,-24.325734799173958],[-129.32646812987755,-23.96437117205674],[-129.5145990228086,-23.838653276106175],[-129.88536497929195,-23.785876408328733],[-130.1385215739895,-23.949414206974733],[-130.19080535605502,-24.27035756940463],[-130.04383878543644,-24.302918053926433],[-130.04894235478162,-24.53338879746007],[-129.9586251599906,-24.807749994448272],[-129.95289512508106,-25.058300391854466],[-129.74404972109227,-25.622489468326414],[-129.59386267858648,-25.760910377762595],[-129.44886581294784,-25.991976972564782],[-129.26041518445876,-26.144013414621732],[-129.09365962159978,-26.167581020357716],[-128.88934559319102,-26.09024842114154],[-128.5675263307078,-26.13773882300761],[-128.3091436607427,-25.947852365103653],[-128.2940544653923,-25.721549073459677],[-128.42737515552815,-25.493535605051104]]],[[[-127.4058040557432,-22.05855531399549],[-127.42079800424165,-21.935791426007587],[-127.61673285376818,-21.68113651555766],[-128.02055801652634,-21.422474338460063],[-128.16545639835968,-21.227858095987315],[-128.44814939106448,-21.04602827014757],[-128.9556195193511,-20.919648485212132],[-129.15658081605199,-20.94704447057632],[-129.3054258773444,-21.059991175620308],[-129.37357541087277,-21.2698971627499],[-129.34855194895735,-21.427187993568335],[-129.15336466308506,-21.79429811893915],[-128.87428913459644,-21.98089747448123],[-128.90744577341547,-22.245543079933928],[-128.8119425146086,-22.566250314739513],[-128.66469093135882,-22.733650655824082],[-128.4958620567543,-22.824861155459942],[-128.1017362887328,-22.937053801888],[-127.79875747978689,-23.121276180907348],[-127.64888927116846,-23.134403656191957],[-127.36141468093807,-23.051544953999834],[-127.18947357190163,-22.813782155218878],[-127.21874648321005,-22.41605985769362],[-127.40131161041181,-22.1489205459123],[-127.4058040557432,-22.05855531399549]]],[[[-132.92865969424352,-16.262650234514652],[-133.12573251575242,-15.998958627067168],[-133.40224282852373,-15.822277260306446],[-133.69577036101992,-15.817607487416339],[-133.97675425784107,-15.950231381721608],[-134.15122589594486,-15.738893032535472],[-134.4192910148245,-15.558365159252203],[-134.69642851315322,-15.522628448420347],[-134.88238034783012,-15.388607018177224],[-135.4275530384229,-15.17344714819922],[-135.66677373671166,-15.238237275506727],[-135.9323888809301,-15.42805699911121],[-136.01806051522837,-15.32872087687679],[-136.365435183373,-15.251506969399271],[-136.90462591680912,-15.210276350223793],[-137.06149359441972,-15.275511731296136],[-137.3960779858134,-15.196350367662532],[-137.509859521398,-14.904246832853774],[-137.76657069832302,-14.645808873902633],[-137.84993810185262,-14.429789290338167],[-138.1503001237076,-14.268549016208034],[-138.49821657711118,-14.370497638634557],[-138.6150328603649,-14.22693122686461],[-138.84496325392018,-14.164860737929743],[-138.99233059557253,-14.196891459906798],[-139.1737239927219,-14.389239134767724],[-139.18379536571922,-14.613776184640564],[-138.94349853985463,-14.853720947648196],[-138.98533768370223,-15.109130899822413],[-138.90776896328487,-15.292998685458858],[-138.75968984878554,-15.43871018789345],[-138.44563280642325,-15.511646733286865],[-138.2210033566794,-15.682990961360648],[-137.8206449137407,-15.730803781229236],[-137.74422413796253,-16.027789049484717],[-137.53104087918425,-16.404871037254978],[-137.14021555934286,-16.78255683726637],[-136.94052683963054,-16.84921651223538],[-136.40738418905107,-16.781171092504092],[-136.14918954715296,-16.690299325208386],[-135.82942063291668,-16.675672486314156],[-135.63144130089213,-16.481205790708334],[-135.43936366652213,-16.733503009746922],[-135.23922820674719,-16.86389214435104],[-135.02746011585378,-16.839490894227925],[-134.56079907417592,-16.951619446841118],[-134.10849323558412,-16.86381722757908],[-133.91390413308162,-16.921770709757894],[-133.49641924536826,-16.929934962047458],[-133.2069707108279,-16.763359888833538],[-132.9171336952313,-17.02692536826892],[-132.62210527329287,-17.114072026865585],[-132.2316833324512,-17.05687209373281],[-132.06624760104205,-16.938175221364443],[-132.00849155519242,-16.789549438775836],[-132.02940558732826,-16.590811967683404],[-132.2040959934733,-16.395999703180596],[-132.92865969424352,-16.262650234514652]]],[[[-143.6076597113233,41.56756840099671],[-143.50920934233739,41.51440644457659],[-143.4733481936462,41.3028385081228],[-143.57687472132207,41.11880446302514],[-143.54307094937292,41.014634747053286],[-143.67976474057775,40.798861036669564],[-143.81689698424026,40.826733588965716],[-144.02673054900848,41.03322399235193],[-144.26865270152584,41.06381637159915],[-144.44216191787757,40.95922036800607],[-144.52957589658294,40.79764697452787],[-144.449710111365,40.54305559490519],[-144.17484046477097,40.19593312336488],[-143.68475570391436,39.777876198224014],[-143.7663522901678,39.56854616040584],[-143.7289269593416,39.36534467663129],[-143.79176370044215,39.1812523105204],[-143.71494076434982,38.98458642702632],[-143.75332555162933,38.85074213370999],[-143.75932305209778,38.531292835731925],[-143.94989539561638,38.0906672804498],[-144.1812387483372,38.19024434208239],[-144.47122847946437,38.10961560303907],[-144.572840027539,37.86236581389353],[-144.44998410724745,37.69444192182736],[-144.2494377163788,37.61362268915546],[-144.64666105621703,37.08420894235834],[-144.95034217696332,37.00072168923759],[-145.04300473924133,36.87766039483368],[-145.10544705068,36.640788593370665],[-145.05430469439904,36.15240953053573],[-144.96641722615732,36.05581026609334],[-145.14941273123327,35.79179006444185],[-145.49930621642324,35.381837197428986],[-146.0532315792522,34.90043260505566],[-146.61831160935583,34.43178359508534],[-147.31928550012597,33.73769322541881],[-147.42208725567303,33.53447227340623],[-147.61275439106356,33.37421042508896],[-147.706788581836,33.1613352999037],[-147.57521337060717,32.76583511475176],[-147.6168390206271,32.48390205170366],[-147.78142518659604,32.196920219237484],[-147.8041028911657,32.01263865642813],[-147.7148937354862,31.814759123120005],[-147.3255240650342,31.24990768962291],[-147.25273510702738,31.20485641905979],[-147.12623534817348,30.91197472396211],[-146.79843185419676,30.64807692290766],[-146.76183304097685,30.55111434573867],[-146.8332573225932,30.30104206689884],[-146.73232434167915,30.06545024797837],[-146.5907495776314,29.985241663333206],[-146.45284825238804,29.680009588380553],[-146.39751307996002,29.421105585740715],[-146.29445761514737,29.282567990407586],[-146.29379012343037,29.129944859917615],[-146.19318391066406,28.849183448405476],[-146.07939427824198,28.71768911398382],[-146.18618057554554,28.162949799271978],[-146.06187346709666,27.886062356733632],[-146.22176656120095,27.286219542328052],[-146.2053934058732,27.087175683178685],[-146.4635666502573,26.882539628803393],[-146.6808446666129,26.569833438624624],[-146.95121682276107,25.8633682317699],[-146.94698331827993,25.14186011863735],[-146.98816156503855,24.825453992587803],[-146.92043907388828,24.517806105042705],[-146.8798114911395,23.82080999169841],[-146.95322840867976,23.61792866247386],[-147.17142859332222,23.548328372690186],[-147.29741322773242,23.385499809660278],[-147.30502475550728,22.920846212087145],[-147.13401885403113,22.621791571818505],[-147.08916948838223,22.4042687337109],[-146.7840225042944,21.833701302310075],[-146.60647230883583,21.65908311067193],[-146.5794447273825,21.493285972412597],[-146.29872851479237,21.15839978978843],[-146.1467035271445,20.65210298400313],[-145.9431914860022,20.16701372055273],[-145.85663935074754,19.83413465679333],[-145.68355334529048,19.704022286548025],[-145.63374686031713,19.549134202757376],[-145.47760349407702,19.3561502876163],[-145.24955187492756,19.181999913353764],[-145.1604628793801,18.879714052593712],[-145.06404058451184,18.749668113487267],[-144.9886184900421,18.42588792202618],[-145.09020643720936,18.101155763856966],[-144.8136063178617,17.449225295643714],[-144.75050674795173,16.953252353735298],[-145.2396059492182,16.280204414153367],[-145.3679963321691,16.19006865931451],[-145.45441073741821,15.957584959124585],[-145.4193559866626,15.769395657609296],[-145.20990529098444,15.59043279558545],[-144.8413560356427,15.479777988538455],[-144.4329924134451,15.603900410686997],[-144.2826271752045,15.355602217126952],[-144.27429609278946,15.160271899228723],[-144.05777521232423,14.917491942971632],[-143.93415893883855,14.621398069908782],[-143.7620690045412,14.485641982939208],[-143.54089294930404,14.44484878500503],[-143.26750064765997,14.126720633234996],[-143.18962416706097,13.916943330082225],[-143.2106213647515,13.710583441639281],[-143.37714812404994,12.874463321209245],[-143.57186036652132,12.587937800486802],[-143.6941030400248,11.944184270627813],[-143.6270196862661,11.616614085185532],[-143.45932584217093,11.449828705308873],[-143.483899418081,11.238896329112297],[-143.42057203768513,10.701378445480588],[-143.6996060233982,10.107147245125475],[-143.73459228260035,9.58484599680866],[-143.68957064875983,9.366663423866441],[-143.5050764515183,9.017823047191001],[-143.47951437159224,8.683237839766797],[-143.16375973605395,8.513823129462462],[-143.019084142355,8.251481479876352],[-142.95843841718477,7.945384717492991],[-142.6136559749819,7.528637876496541],[-142.1573552074682,7.15993911850388],[-142.18216272664492,6.905140681003101],[-142.25873752358248,5.236112488082884],[-142.58544551884043,4.946945723527341],[-142.62717838037094,4.688454305676642],[-142.562604886587,4.49906296465476],[-142.64292289542928,4.309027235514407],[-142.60234604119745,3.9809388100335013],[-142.63402546701846,3.7555870724254548],[-142.60467810500342,3.3615114876083214],[-142.66244471988236,3.187014163609684],[-142.72953925062177,2.6776184173656237],[-142.54176677068006,2.338632058297422],[-142.44564688121534,2.0246068546277987],[-142.31542737164833,1.8540035970773763],[-141.93732379864176,1.522210303927564],[-141.76512513568247,1.2278349987843808],[-141.59472575519067,0.6999110910655261],[-141.57734305221751,0.20175572111150783],[-141.48061900030416,-0.04539020912849284],[-141.20418910209875,-0.31055313430155945],[-141.1245781035513,-0.9329198977932821],[-141.0637772224993,-1.1038287511636387],[-140.86310567208284,-1.3457673899820812],[-140.65120213887224,-1.7945844168113085],[-140.61109789760582,-2.0918427664896364],[-140.62768298810454,-2.4343430806516904],[-140.55370974707358,-2.5696074379385294],[-140.49541560030588,-2.883737004259645],[-140.31893858109774,-3.054981284282814],[-139.89707412526596,-3.353857449518828],[-139.80729646928873,-3.545195563281301],[-139.74350468772724,-3.896153011795193],[-139.31638231637547,-4.728125083405137],[-139.04361962878443,-4.867103044890105],[-138.76441189325234,-5.078420092961597],[-138.79225023360766,-5.399950593121352],[-139.0561626022552,-5.761553191864652],[-139.19305707471048,-6.0697281896464474],[-139.06115270606693,-6.521468270068765],[-138.75969706432141,-6.967930961415329],[-138.53724454979067,-7.184305885469271],[-138.24832063107365,-7.314529386935683],[-138.12408861397543,-7.315741785913847],[-137.95065349289595,-7.470376568536901],[-138.10859188908233,-7.945103777879749],[-138.34364542941003,-8.371114787097596],[-138.43463736570342,-8.46595347684962],[-138.57328063304385,-8.800843568022996],[-138.5176593565305,-9.059166051684656],[-138.33987788275346,-9.284215381716237],[-138.66845904742837,-9.860790770350997],[-138.55428748634233,-10.271584495944083],[-138.7715787899509,-10.59042232647402],[-138.94129930003876,-10.756785010267913],[-139.06125553202872,-11.075567808131517],[-138.97833611328568,-11.397646001298922],[-138.7838211880377,-11.618602796230117],[-138.5125457175105,-11.686765558609475],[-138.34450653661833,-11.843923522486044],[-138.27610768235587,-12.121850647787742],[-138.26920207369415,-12.364849866262954],[-138.17137604565698,-12.508918834116452],[-137.91091894042515,-12.66260171676234],[-137.40682099490513,-12.666270279272075],[-136.93719210443638,-12.720017544908265],[-136.07041229485552,-12.90784488370695],[-135.84227806198805,-13.057956012552731],[-135.5773878935949,-13.101807565523595],[-134.98353340932636,-13.521509297909413],[-134.84341618491825,-13.662137716703016],[-134.5113744227421,-13.788442895076487],[-134.26051747775216,-13.771423390295393],[-133.9379090588976,-14.036055997794406],[-133.80378068955727,-14.086290884780226],[-133.43325849254532,-13.966249371057769],[-133.065285176017,-14.09316324112331],[-132.93059355677525,-14.245900514783362],[-132.6515589156588,-14.44424666348209],[-132.51756233917004,-14.715649595791817],[-132.1864899385638,-14.949580718198208],[-132.07783949261204,-15.136132128377795],[-131.8723931595238,-15.274238216886127],[-131.75618581249938,-15.992464549196944],[-131.61862190734692,-16.271771486346186],[-131.50722928873154,-16.60899710225056],[-131.20985478229588,-16.837645438363392],[-130.5044586981527,-17.18423471360945],[-130.11500757784253,-17.431174843915322],[-129.75362309192911,-17.55643296282492],[-129.46307714978755,-17.893426748263877],[-129.19212149743726,-17.91788106914574],[-128.85395555612976,-17.81491582551805],[-128.56798993976898,-17.888514263358207],[-128.26295912242517,-17.90297355859857],[-127.87106106950552,-17.990206445894543],[-127.73599736966281,-18.26453655050602],[-127.47635425353496,-19.054262953982764],[-127.4738790990379,-19.122599356213005],[-127.76601100987847,-19.306745019278143],[-127.85561744433451,-19.631260183663976],[-127.79641395282276,-19.84045211762505],[-127.61769092368593,-20.049403457101068],[-127.39743105780931,-20.200061264118172],[-127.20421855553481,-20.40485567010785],[-126.79615100015263,-20.49627707342782],[-126.53742059792036,-20.36608041458388],[-126.12776874827571,-20.450732702432365],[-125.88956943398547,-20.46503519409486],[-125.79285537345582,-20.787076258484884],[-125.50530828598716,-21.155905873589138],[-125.3441433200283,-21.30272056774727],[-125.03237984527907,-21.672534860598144],[-124.45134337947744,-22.198369310725035],[-124.15166844200539,-22.813175032084143],[-123.9934997562448,-22.85620611802308],[-123.59631832525224,-23.392992420553558],[-123.33105942097761,-23.650687502362032],[-123.10951463911302,-23.99023931453528],[-123.03636566376979,-24.185371817945832],[-122.76290922504691,-24.676174823739785],[-122.58158196283237,-25.39648066817884],[-122.55199234341154,-26.54214931533083],[-122.76084735765517,-26.911895188872805],[-122.74965666775647,-27.14719695966585],[-122.8787905921721,-27.871593500980424],[-122.86406392923139,-28.091927109588767],[-122.72833549464427,-28.33269331060219],[-122.59688124265321,-28.414778329138557],[-122.41960228757438,-28.40893841519962],[-122.45918250389954,-28.997310940419055],[-121.9908135848774,-29.055809814228862],[-120.01345769231398,-29.261203617565577],[-118.25068838784381,-29.444392329202294],[-115.55250575245378,-29.719356887975888],[-114.09612659449208,-29.871890438888332],[-112.3802743058536,-30.04435709601348],[-110.81497714666388,-30.205725782059705],[-107.65625525819341,-30.527220995306912],[-107.45342726200973,-30.439693640297815],[-107.03612592409301,-30.572204492764286],[-106.82704692134448,-30.567218912039817],[-106.70525560620338,-30.495942017588742],[-106.47484193028947,-30.487658045528992],[-106.45560084666384,-30.275814565294727],[-106.29565304804403,-30.143144685504986],[-106.01414127131207,-30.009686005078986],[-105.89183620365718,-29.632094698589025],[-105.95763684226517,-29.44050198817148],[-105.85173388914895,-29.328712198224157],[-105.96473051135462,-29.224935366958544],[-105.99344949425596,-28.91611513667504],[-106.05624658632837,-28.824651710959994],[-106.38777781080005,-28.732632046856512],[-106.63527333969179,-28.742061795176966],[-106.73100635589381,-28.6092375358991],[-106.92335850935629,-28.622611679133097],[-106.9649302963726,-28.319007403065843],[-107.05605677780636,-28.216640221935513],[-106.79869810575411,-27.841856091146855],[-106.68194673214319,-27.453416013101283],[-106.74111391946963,-27.31458114797644],[-106.6341676925809,-27.171301628829063],[-106.8775849797565,-27.011349947551807],[-106.90366089018833,-26.913022261894465],[-106.67922650634915,-26.7269869392927],[-106.63442046597224,-26.57701414382593],[-106.69064796344519,-26.26040020357106],[-106.13783122529694,-26.226114758204403],[-106.0591001279947,-26.053292792605014],[-105.80071527747941,-25.80135694306869],[-105.61602161562485,-25.73585588834],[-105.57689801677665,-25.638238062102875],[-105.35256685478998,-25.542971531910982],[-105.3941620086277,-25.28194519728655],[-105.2591734079388,-25.174469660072546],[-105.27192755719385,-24.925624649081506],[-105.16629910862203,-24.695707172571897],[-104.99216099820792,-24.653574052310994],[-105.03195256991361,-24.397834704462067],[-104.95468973188359,-24.18666220252007],[-105.01028448007489,-23.862005221636245],[-104.97313491234824,-23.64681200514262],[-104.8002033875719,-23.55934014036977],[-104.89198240208276,-23.143018946979378],[-104.77962905053668,-22.958271704406688],[-104.64361452636753,-22.941384961353325],[-104.36998815134828,-22.77437129575893],[-104.20432172007585,-22.61032394649825],[-104.091070927799,-22.192248165587262],[-103.95790980980371,-22.079012449575398],[-103.65871673699976,-22.059075109477053],[-103.39244674384689,-21.98386669559316],[-103.1280959619548,-21.80094498996343],[-102.93651511918974,-21.814384603846243],[-102.31473029701253,-21.396568343478034],[-102.13952547239167,-21.385704716305014],[-102.09395412659032,-21.08442754534635],[-102.25270525180579,-20.740557218582854],[-102.51215013541393,-20.579662843374955],[-102.67587344300597,-20.31335872368053],[-102.82481603371669,-20.221482690696146],[-102.85790668210599,-20.098360935575936],[-103.04514895508099,-19.894462957227315],[-103.23219403790233,-19.890677469962032],[-103.30576169149748,-19.80187196182959],[-103.17295291507531,-19.330548991058127],[-103.25723880032909,-19.038701139014822],[-103.39773526393817,-18.844836630533376],[-103.36620945100371,-18.501359495304982],[-103.4377197189206,-18.008986130004548],[-103.6613596052714,-17.801166109160025],[-103.82501294172411,-17.55992456888235],[-103.94723029595491,-17.01675045447402],[-104.12044429271214,-16.826419626193456],[-103.95926651835927,-16.015896682325312],[-103.95635518857927,-15.884671342375682],[-105.59283122160056,-13.504153237296105],[-106.07454348134796,-12.814172027768393],[-106.78608715069849,-11.75420317281139],[-108.51546033149725,-9.20248864588888],[-109.72552602132556,-7.4046970106968875],[-111.19030713605365,-5.211439664277684],[-111.76124887651667,-4.368210294186503],[-112.23134949852958,-3.647186700076669],[-113.37845213637786,-1.9269060996531262],[-114.46244223175184,-0.2882601819980282],[-116.07140275413252,2.1234382874526307],[-116.61261400100724,2.952157706071371],[-117.52375577896079,4.30281502810857],[-118.21692728970686,5.365692264819126],[-120.3226277158217,8.497234178853809],[-121.755031689671,10.636963455959537],[-121.99846930579847,10.984917540347595],[-123.35296097309259,12.986988234095776],[-124.861097177026,15.18652364784632],[-125.54145907271865,16.163419789919196],[-127.07792708247742,18.374909099066006],[-126.61506232664622,20.180854160109757],[-126.43105770798756,20.841499870134598],[-125.98430058518477,22.343457905028846],[-125.72438329085857,23.278240948122182],[-125.29479966882506,24.73503295443007],[-124.57452416607735,27.202039771017887],[-124.22591202346189,28.402504712360784],[-123.87509384606707,29.64423757941368],[-123.47449859770224,31.00449693500313],[-123.0495624179153,32.403491180404934],[-122.3545150195674,34.62316191888699],[-121.6844942768826,36.74731269520441],[-123.17607574590927,37.04791850023876],[-124.9871767849233,37.42802939101513],[-126.96017070981259,37.84735729797708],[-127.41698749832199,37.96051176421868],[-128.50296282223104,38.19501583694355],[-129.6822992376996,38.46147022410515],[-131.0608259078927,38.78668152979424],[-131.83767972922226,38.961069865163005],[-132.653014473519,39.16119510404131],[-133.74073824642883,39.41024770038051],[-135.04782212124658,39.672010804335066],[-136.3623234269235,39.951562193692624],[-137.12689704655835,40.1245999042852],[-137.62262820999211,40.270834995699744],[-138.6609792019808,40.4462493127599],[-139.0969448534485,40.55893143592608],[-140.05691335427923,40.76572425967242],[-140.23021105890652,40.77831344005613],[-142.4611204188709,41.295477701828375],[-143.6076597113233,41.56756840099671]]]]},"properties":{"name":"California","ns_code":"01779778","geoid":"06","usps_abbrev":"CA","fips_code":"06"}},{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[40.28382366690882,-14.451419584142306],[40.375637997522105,-14.23865509568735],[40.27963302351395,-13.95069272460474],[39.98635984307271,-13.881733254083315],[39.77113578197755,-14.064412374128374],[39.845752312227454,-14.292191020575443],[39.97868976983181,-14.468523305765057],[40.28382366690882,-14.451419584142306]]],[[[81.6223371843472,-2.587927429285713],[81.13414467167324,-2.669177850074498],[81.0071095659011,-2.548906895304509],[80.77286866880844,-2.5593016545933205],[80.65416124139733,-2.3286851065097527],[80.52218562440052,-2.355044181841384],[80.3452507303561,-2.127927155313588],[80.1654450578701,-2.1669137143981265],[80.07229497657448,-1.9803497480426042],[79.89156540888139,-1.9777972224178],[79.65139955200942,-1.795512781024302],[79.47128531844132,-1.4760154761008337],[79.43982169343938,-1.321590213918799],[79.30158112184398,-1.123728121997314],[79.08856476018497,-1.0380626912493833],[78.84700098400764,-0.7682565746250029],[78.7581913171688,-0.47863188466755924],[78.43107110483362,-0.34066034584217375],[78.25870186159383,-0.20383733616825053],[78.40155513319608,0.10898318307738868],[78.26618038747748,0.2764788668365534],[78.0959064379731,0.27571981805381773],[77.86217163252795,0.7211380905707748],[77.65195141110199,0.8518666572573984],[77.62420198050121,0.9687010610430442],[77.3219607696849,1.1463042172516638],[77.23848955724954,1.349934013084368],[77.41425353391699,1.4095711698187934],[77.44082460585524,1.7480449281277697],[77.52366385085777,2.102617704781861],[77.44466429864266,2.337566594415545],[77.44666853843515,2.5570130125833703],[77.31161973816478,2.664441818346023],[77.26022528545836,3.2085467658203735],[77.11457246558182,3.5520044022090453],[76.85909717228465,3.673813116165067],[76.56336488821118,3.9955741359172494],[76.39971280083411,4.077195227111696],[76.05484144310795,4.040159208891868],[75.86133986742134,4.111952932984528],[75.69486852627378,4.250532370458052],[75.59257705983369,4.611655470896041],[75.43409479810408,4.930682930774339],[75.39410006021647,5.304526354846226],[75.26467207358812,5.354524698109538],[75.04565878914997,5.243152934822119],[74.88708860860315,5.0942375473471255],[74.58446490122506,5.053484348152193],[74.42730292826704,4.756048679416471],[74.17413149668951,4.593930260222615],[74.08881365318514,4.293662480716848],[73.99184450260657,4.198997945965315],[73.73890455887198,4.135467861377105],[73.48790224311638,4.1884646013526785],[73.28287370483811,3.940782672632556],[73.10509980746232,4.005155395598175],[73.02844234885508,4.193050948001591],[72.73241572572621,4.327158591738465],[72.22428625143797,4.35874086165155],[71.91052725395694,4.517401728610043],[71.43224310071408,4.3212738789560765],[71.31711618691678,4.202985961628573],[71.29576750936221,3.958568603523413],[71.17306180304782,3.8662239827897453],[70.85421728668638,3.9736160552919637],[70.59068080724636,4.003156958842346],[70.47534959762376,4.283278870194467],[70.14430106608431,4.424613580389986],[70.00637124816502,4.662055377896051],[69.3375482133378,4.795542039709238],[68.98548859904783,4.628920610519897],[68.84242810328963,4.60987361669178],[68.35123009001207,4.726732915373601],[68.03296937064961,4.7649569383932455],[67.92159840963224,4.900085331597385],[67.84261916445017,5.36001133151638],[67.50194946256157,5.759523621104794],[67.29652347778972,6.196506491784181],[67.01976960764912,6.342369318915685],[66.73242858691985,6.346631939835574],[66.62369401008276,6.418295427073123],[66.56056678552913,6.714407787697023],[66.41508190832232,6.8451335556982045],[66.15508719583768,6.61321494282005],[65.91970361143774,6.619852436268781],[65.81492657679011,6.482701231871937],[65.50853889167,6.4122794049185785],[65.39034458960228,6.513383699916217],[65.17616693833833,6.564745365028389],[64.99118456090999,6.78358754433464],[64.80633040235348,6.840988125885624],[64.64592560618182,6.606695784008606],[64.46206799465298,6.496961030298087],[64.083708872641,6.104155967765344],[64.45929881664102,5.663112079623896],[64.50496054923201,5.437687523930299],[64.30504608194924,5.145323334381246],[64.36925419895066,5.0009905151169525],[64.66896337838023,5.006178396992976],[64.83381485859036,4.931003080186549],[64.83087768659324,4.777663974950748],[64.65758738299407,4.57929347941213],[64.77318570317941,4.232067633068364],[64.35761366969068,4.241424651756197],[64.1192418415272,4.088612207787986],[63.79884668706582,4.058824984960162],[63.3860967242109,3.7398368527043915],[63.09470784172625,3.430474231988406],[62.8820150841145,3.298340545894095],[62.60802182404086,3.3614615789067983],[62.370985003616205,3.6002008085723736],[62.111071290632204,3.5980697627756135],[61.75636228560986,3.4779896898354408],[61.55532666821855,3.5038650118728083],[61.335668271045584,3.2814989266169046],[61.34222492511285,3.075837139815188],[61.45091754872459,2.920310341803424],[61.48187602731784,2.586348194194126],[61.650472436912786,2.2587478396457437],[61.63522289157719,2.0266578885626307],[61.373506274100414,1.793549285191347],[61.27296555795242,1.5274297997554167],[61.137100138495306,1.433709338289772],[60.8063044338455,1.3425668041232788],[60.6383831392214,1.131200205051002],[60.523856678221755,0.3969143358111046],[60.38213933438672,0.17018128828573614],[60.083699968526986,-0.060839969849916305],[59.860471313822465,0.0676717709972911],[59.64022364272625,-0.008456194986501141],[59.57552710883738,-0.12011484717104175],[59.51992856113022,-0.4464403062293309],[59.35760988025214,-0.6295192202907314],[59.26838574545098,-0.8284131623667021],[59.263337871070654,-1.054881352285868],[59.32711631564137,-1.4277144387737712],[59.27440561292495,-1.9008912627121453],[59.17954640639905,-2.045810114955166],[58.753025619534064,-2.1692903114902653],[58.62868860199358,-2.4424154777011413],[58.42983350065045,-2.1682494236208667],[58.184614487371924,-2.082209978395786],[57.871166800421705,-2.152726449381178],[57.62310336382281,-2.0491318626847956],[57.34519925165786,-1.8714628857030597],[57.25045076485995,-1.56573364433626],[57.25553103355158,-1.2750646011034572],[57.111948105273584,-1.1215854519766941],[56.801804190095645,-0.9267121211977786],[56.64285388898636,-0.9920321297920588],[56.725287224993416,-1.1794235630781225],[56.95280124558824,-1.210547028673452],[56.936030116173285,-1.3867184105822843],[56.693160910597605,-1.4070293561663723],[56.55980923824359,-1.6085655096770577],[56.323369687171336,-1.4645585174928297],[56.21702197766335,-1.6450277186715374],[56.412373621780546,-1.7630976083735215],[56.41961435690005,-1.903945907642393],[56.30510568771615,-2.0361373922774955],[55.9962899809432,-2.103145303606134],[55.94185116445392,-2.218203528166697],[55.985095205321784,-2.6537891626341734],[56.11228179114467,-2.917030262654158],[55.928001748109615,-3.0285779977927234],[55.66713572412167,-3.023351395698949],[55.61434942492142,-3.1510762935473733],[55.62214247014544,-3.4847031058685496],[55.39143556354343,-3.6279501514820987],[55.30726553465606,-3.471561959601008],[55.35928235895188,-3.1559896751714804],[55.16184279071574,-3.1185461434103945],[54.96503196782403,-3.2969687920757647],[54.76059336032363,-3.155672675568776],[54.471570842101954,-2.6483079809626524],[54.35283359646039,-2.5911072353229354],[54.15920678409088,-2.6815927130609416],[53.819090824014154,-3.0947135871597657],[53.507970217395375,-3.1635877771496106],[53.1755740772926,-3.4099869991151097],[53.180389563857695,-3.6454194243004268],[53.07921475829909,-4.138882158576036],[52.97011142984537,-4.254107369326018],[52.76228661422612,-4.282164343404268],[52.67387865714531,-4.078692049601291],[52.52422012959665,-3.9032430046524627],[52.21261280183028,-3.877735214599786],[51.62986272129337,-3.526475151264524],[51.47839926362978,-3.4960509680754694],[51.28057604048659,-3.345871543433114],[50.99284608809306,-3.294979533990022],[50.804661757686496,-3.3849104336045044],[50.56622672131515,-3.6149992860642914],[50.29172784513932,-3.4764966266209876],[50.14604719893817,-3.1864686931589894],[50.01480167639618,-3.1927948500712486],[49.89851901964285,-3.5525501302877736],[50.11525701106813,-3.7730349839481963],[50.1574693844409,-3.971346343741792],[50.025593341307165,-4.198221752103228],[49.70525076954559,-4.2406232131837625],[49.642847162389664,-4.055685489103792],[49.712019581649514,-3.901585014753035],[49.59818699948032,-3.71704465363956],[49.45272618571144,-3.8010586168595255],[49.18866573318164,-3.83853548344641],[49.00595157545373,-3.973408549309207],[48.78920989116035,-3.979189145279691],[48.533374266091585,-3.6723365542115904],[48.40178971702981,-3.64724024073414],[48.194495037778985,-3.9316865695994796],[48.220952608129565,-4.094561396685453],[48.3822166244959,-4.260072791826448],[48.42102727920672,-4.512128941706204],[48.28854882332516,-4.591076732754291],[48.224601496069596,-4.773903413041127],[47.82079586899998,-4.60353711582711],[47.75277772066269,-4.629128611576485],[47.66159751815512,-4.954539060953149],[47.54581286475388,-5.11939235467411],[47.268208107772274,-5.3317217230174405],[47.101374447629226,-5.713062244149514],[47.299844757360155,-6.284107149744111],[47.66984517735192,-6.581061021255934],[47.74562385045744,-6.7509642364443385],[47.64687279764775,-6.985966998277556],[47.345863499888836,-7.019394247690165],[47.00909677537968,-7.128166600244739],[46.55767069569592,-7.214037336915845],[46.38167444919353,-7.316333257222748],[46.08425930247977,-7.619102111942188],[45.82743792920726,-7.474756343348786],[45.601781166226445,-7.6009021906805785],[45.50330533431432,-7.738202210418276],[45.45976024133149,-8.119175014291962],[45.34344807941107,-8.428668023050928],[45.39380542789744,-8.692004610082389],[45.60254003695765,-8.947257817623777],[45.75693544750846,-9.065370385249542],[45.91787353570153,-9.42098393972327],[45.815622275766025,-9.8859714142936],[45.640294894921276,-10.04456251436729],[45.413328951765784,-10.072663521000408],[45.12625419785735,-9.996845105429225],[44.85826250413755,-9.757867755673818],[44.35843058719464,-9.604471764723097],[44.17867863776386,-9.601607640386982],[43.77648829927588,-9.328209640392634],[43.032101013386864,-9.101703499874672],[42.79314180400813,-9.101957917229958],[42.48848369015388,-9.257722656335533],[42.1639978989253,-9.667966158783692],[42.07894873114586,-9.942875847622618],[41.853271116001636,-10.172474571702379],[41.73721541108819,-10.402125897914676],[41.78381827182473,-10.72787874851618],[42.02931500882346,-10.918906030870916],[42.16572717751512,-10.948943253185128],[42.233975489608056,-11.088561964883837],[42.16690913701174,-11.570441612573731],[42.07007779012503,-11.869760178374074],[41.89057696951949,-11.921175243514766],[41.86386144567858,-12.15769328918572],[42.22658643954535,-12.365078306716928],[42.188255866880425,-12.53550812300595],[41.93679483942295,-12.498028556626025],[41.78854133143369,-12.648446894578498],[41.78356035013613,-12.796840448530999],[41.97547115100682,-12.99441740928593],[42.04533329139144,-13.147180645074506],[41.84618419710384,-13.42380593300298],[41.831854727960966,-13.616491080523055],[41.710981374356464,-13.85021601700745],[41.470317377906795,-13.865587954717132],[41.17731742117705,-13.504626337927812],[41.084701675747475,-13.448921719646894],[40.8976275046259,-13.516115635813076],[40.66930026821994,-14.415031520710084],[41.32384165869534,-14.313157164605284],[43.259817647180355,-14.213390531012664],[44.325282615160006,-14.13112865220876],[47.46908842331646,-13.910085630879616],[48.39543920188501,-13.854921417724952],[48.488071769444275,-13.567056167330225],[48.37933805421208,-13.111243738217775],[48.189066083949264,-12.597049114876269],[48.51913038772314,-12.577523531127106],[49.44587290025221,-12.595743987691096],[49.443381790852385,-12.811263144609578],[51.57730213141181,-12.57704119334925],[53.85766250846292,-12.355659161535899],[55.75110072716155,-12.13438943665952],[56.56265647150839,-12.031084133202356],[56.72080896102133,-12.149167446352768],[57.02593371357225,-11.986327833361251],[58.01928238637695,-11.914084599832119],[59.719926572330074,-11.868852432167538],[60.85701629171012,-11.811740760233763],[62.72830165157747,-11.663149991115743],[63.98470689497909,-11.440150415789597],[64.9323617713904,-11.36207516026762],[65.59971978160024,-11.327897695426806],[66.52050520967916,-11.310982681544994],[68.15845717406785,-11.177381491510737],[69.67678437068923,-11.027483651302115],[71.20731257008325,-10.852074693557537],[72.95366851364929,-10.683262726635917],[73.02334235874751,-10.544509541001828],[73.33736989712013,-10.260780987662114],[73.58568582077532,-10.148619607842486],[73.76736951422563,-9.991753404861177],[73.98467257998134,-9.924132478057059],[74.4024765151628,-9.879927180112738],[74.77149942712623,-9.60600834392468],[75.59458640663296,-9.214712713517946],[75.9233191069052,-9.148304761430403],[75.92548730036826,-8.910013497625178],[76.05977310356245,-8.620840430461854],[76.0346115651762,-8.49751409811735],[76.16350725523861,-8.31245785922691],[76.74018704831747,-8.208409981691986],[77.2141028168155,-7.918575341000643],[77.29476761601256,-7.62218706946402],[77.18371868820515,-7.316707422239279],[77.38031982661391,-7.143730352815437],[77.37999883964847,-7.0554310901879544],[77.63420576456225,-7.005578398345154],[77.82324325606345,-6.726721255990658],[77.883418680728,-6.497131813362149],[77.89809284222356,-6.144913834565614],[78.31853561518327,-5.852009975600172],[78.7319608909541,-5.429389631035415],[79.30499090834273,-5.039648788852507],[79.7558280755132,-4.843389288419118],[79.94509049301482,-4.6007822120667345],[80.7816945854411,-3.6076724342930095],[81.6223371843472,-2.587927429285713]]]]},"properties":{"name":"Kentucky","ns_code":"01779786","geoid":"21","usps_abbrev":"KY","fips_code":"21"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[133.9933694062156,34.56384024033656],[134.307237301078,34.5276291670292],[134.4248527302989,34.293341293792935],[134.6443298037935,34.21660047832026],[135.08054473227858,34.37833937582088],[135.16628509385723,34.186040526529254],[135.36537526758138,34.04351476572706],[135.29900562713408,33.848951567997304],[135.46491035985702,33.61462146518683],[135.65134956147227,33.5429161331395],[135.87941979397155,33.550555748154146],[136.06062205921089,33.63965529157697],[136.14459258186028,33.779792084576854],[136.13047257888675,33.98201769816828],[136.32193566221812,34.234692970661584],[136.7119431592376,34.361129414617196],[137.19841539183665,34.46444905518097],[137.529875485945,34.33625168963905],[137.7689679731673,34.46473978456809],[137.95964018240426,34.45995786362955],[138.10257153294492,34.533653152302165],[138.46657281885317,34.408867680992174],[139.08748893628345,34.31835635003039],[139.47066762581707,34.31582445577202],[139.97442971953714,34.41526429901682],[140.16329728644922,34.498956117495275],[140.42059330728267,34.763207189453745],[140.42661688631557,35.03709478133216],[140.2455194055976,35.27596650441579],[139.737289863565,35.71694812078608],[139.52588685059223,35.82012540672979],[139.20888990603132,35.80131256231467],[139.08248182734556,35.70066334440079],[139.05623610029463,35.42358906267324],[139.21439175268893,35.26123259944411],[138.97034327705262,35.154520619885844],[138.81291828113027,35.19231639358903],[138.6013951424721,35.16239562733999],[138.4336308656612,35.2823690168089],[138.27065127415696,35.28940359598327],[137.98603572862396,35.213882977640786],[137.72122082283553,35.02172118928885],[137.58670224887575,35.38013680058163],[137.4395768183997,35.48857977959327],[137.26075771191128,35.520709092467335],[136.9998481154308,35.426120665356635],[136.83455438225087,35.607524245279905],[137.03636557955292,35.69622136524351],[137.2106240319303,35.87171014166918],[137.30384336072413,36.061462268057554],[137.7047131623774,36.23735197865952],[137.9527633936068,36.216486231049345],[138.1468418330883,36.32123532825907],[138.20619054328276,36.4281727671134],[138.42003699832608,36.56734176237449],[138.81481734909266,36.73456632576917],[138.93245075451023,36.62714693245805],[138.89574990782222,36.464673012215975],[138.72356630445086,36.224069613481994],[138.87733361133672,35.976561674835914],[139.06005366137893,35.91764902600587],[139.29077675466095,35.96066612987608],[139.4517094162477,36.145435220365606],[139.67937509378137,36.3272592664439],[139.73032970115096,36.45901988794338],[139.68845300596487,36.791712786409555],[139.74140876766015,36.90435787751022],[139.7923384742891,37.315159796394724],[139.64009538113746,37.78640027044526],[139.4930638729874,38.098210007494394],[139.03283435255105,38.72804217603185],[138.86090052880527,38.902099861712564],[138.25869599879482,39.32031108415888],[137.9158141437711,39.43029384267224],[137.6063505221335,39.477378273419205],[137.32578743134735,39.471159738188945],[137.04556506368309,39.391767532057315],[136.83364268669098,39.24909376552791],[135.11125988942428,39.020407854273344],[134.86093095760856,39.19670612091915],[134.7802379964212,39.468675203524676],[134.50968141491344,39.557925103264644],[134.43008970991303,39.68548177661486],[134.37728834887582,41.10419010553143],[134.45476419885904,41.242204147454885],[134.6102669696198,41.36993074689378],[134.72427556603628,41.696830343320634],[134.5584490738332,41.97352477741904],[134.29793034127027,42.16114263980851],[133.8834661999237,42.162804726798846],[133.5278380812933,42.00481357257008],[133.45419778549024,42.03272300188781],[133.23346933051081,42.297124190546285],[133.1764299966707,42.4862427856795],[133.04166874218075,42.64737208167325],[133.08113474723828,42.74191225455039],[132.65525667769688,42.64258016485941],[132.5370425505697,42.55804447336694],[132.31106363347598,42.63095823449987],[132.08044996870242,42.59652398347294],[131.9304623232988,42.48128836477813],[131.6241714665097,42.36609085118271],[131.556750164767,42.06213602375717],[131.18550194704338,42.07149972584161],[130.97305747690726,41.85961794277567],[131.09301949146953,41.58925773277427],[130.76325481059618,41.5511971055586],[130.60229296226674,41.26506978079449],[128.3079787364996,40.86702867882627],[127.10913044492565,40.66509529319471],[124.67748134534378,40.26871438221356],[122.88898419709365,39.98061450879279],[120.56803459168982,39.59428954639799],[120.52224526442674,38.16192502168683],[120.4478370553605,35.71422906664168],[120.61600394280916,35.52724198182706],[120.89304614664769,35.58742343807646],[122.9704822745992,35.930828478882376],[124.08079089413489,36.137057889640005],[124.13194559515136,35.91445198693301],[124.37795074982209,35.99643131545959],[124.40779282543596,36.16280712114335],[124.65945060831648,36.25598685583092],[125.3183077228798,36.34888357361547],[125.54113438178682,36.41884398437745],[127.51089307782698,36.79880398548543],[127.87137523133403,36.854952247282085],[129.26805403031352,37.119929047734686],[129.30327410471773,37.03541946101093],[131.410467021794,37.53913536682372],[131.64007796643645,36.8439469635909],[131.8496066738795,36.91931555016701],[131.94012025331722,36.72372002114902],[131.9450790801495,36.490836301138984],[132.1305324599862,36.27128638186928],[132.5160374603242,36.18793688400782],[132.99269650816493,35.82767331505208],[133.3422904506853,35.81422141069382],[133.4040807229222,35.49478515177352],[133.47009238906404,35.43926711892609],[133.71219476376652,34.87794423648536],[133.9933694062156,34.56384024033656]]]},"properties":{"name":"Massachusetts","ns_code":"00606926","geoid":"25","usps_abbrev":"MA","fips_code":"25"}},{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[89.02981898113399,-68.08822748501443],[88.85894916066646,-68.17912774543194],[88.66947062077378,-68.22598382255461],[88.55895423730286,-68.3108466557909],[88.58300173946638,-68.38783056295209],[88.67760502807171,-68.43803945415111],[88.9920131870871,-68.4520099022973],[89.1691828947423,-68.42958627823673],[89.50912454248655,-68.42925776807164],[89.77303873524022,-68.34359490989668],[89.95649292996124,-68.16650866085521],[89.92456533892599,-68.07858371680618],[89.6817240688863,-68.026141879943],[89.25628611871916,-68.04847893235485],[89.02981898113399,-68.08822748501443]]],[[[55.432677152303704,-50.40741284955484],[56.17546701693948,-50.269926396553245],[56.76433348535094,-50.13223487116816],[57.007145188462445,-50.15714550442654],[57.72622566812671,-50.04833103131353],[58.16986666106797,-49.946775683024036],[59.10523290665591,-49.77131145220814],[60.28530031504438,-49.58969384035597],[60.6961772512211,-49.550477820370325],[61.04858977523648,-49.547647355425134],[61.455671592006844,-49.57535311321357],[61.67829366571119,-49.55448981314567],[62.22974605317829,-49.547927357569115],[62.966334078395455,-49.597186753950325],[63.56547436659088,-49.67975654693468],[64.74446578172734,-49.90091360082285],[65.08380219921932,-49.977944474433734],[65.87516290126847,-50.22904915666567],[66.26931146200798,-50.42565183698061],[66.65166006090864,-50.55112866775194],[67.14764377239611,-50.648682261970094],[67.46330843586469,-50.861891539697616],[67.78262050336845,-50.99597426670007],[68.00993870307713,-51.053443610569616],[68.37941222922518,-51.07614862336945],[68.26057550864557,-51.23200556076544],[68.2579624752788,-51.397142173476844],[68.31672893825532,-51.58319361803412],[68.44231679627875,-51.81398351050621],[68.66250044448175,-52.087690288058745],[69.005409158802,-52.31550079285715],[69.35006694309712,-52.3221705255529],[69.54228299916488,-52.19311191578445],[69.90026494924486,-52.200236424358195],[70.3068066086552,-52.32168128303401],[70.71850769781136,-52.38736747595735],[70.93488648090397,-52.4948438727847],[71.22523375700864,-52.48421047734058],[71.83905885844167,-52.30673353235077],[72.42155652639548,-52.02673289630432],[72.73290365840431,-51.94079286921642],[72.94700865523137,-51.84328234302305],[73.47397212964461,-51.45258992904894],[73.788656299307,-51.370470687802424],[74.03996584714255,-51.25468953997657],[74.13984525855231,-51.136435992508645],[74.16726038294708,-50.964001044438774],[74.33997791447678,-50.94459133617973],[74.54918876693318,-50.81357331001602],[74.94620344808418,-50.84506040720837],[75.22111742636642,-50.814213420910185],[75.45026217822854,-50.70530020088564],[75.64053419752771,-50.34397648036165],[75.55746543258549,-50.18407817982469],[75.62805844004286,-50.10041374209954],[76.0479777088418,-50.126389156007455],[76.30412403575684,-50.05781774076685],[76.46879490159951,-49.88426074165842],[76.86179995423358,-49.79811808913898],[77.0453895442429,-49.891542533889286],[77.30744178291489,-49.91290159173027],[77.73142398951177,-50.102381100658405],[77.9126798547796,-50.102047142153424],[78.06651401676775,-50.205588941898384],[78.42272425628319,-50.29603395183941],[78.82020549675757,-50.311602205503554],[79.14956433247549,-50.44570626437402],[79.3798501271691,-50.64102800069579],[79.50961784114274,-50.69718641192756],[79.61345976796328,-50.94823236554867],[79.83432260269748,-51.118472896236156],[80.25821390176979,-51.20523210255761],[80.48688545113755,-51.35214799205351],[80.6843926625868,-51.35515605366625],[80.80330724354307,-51.42172062914736],[80.81988245526352,-51.61567123789907],[81.01791306357909,-51.98372383629641],[81.19167222921371,-52.09158689308016],[81.61662464799815,-52.165838106537535],[81.6893307165693,-52.261144870413034],[81.98090998619486,-52.347653694551674],[82.08250753124071,-52.50142319982361],[82.48202824734916,-52.632545486616145],[82.53102416741089,-52.88268599576486],[82.58157301772435,-52.941524527673906],[83.01208201710322,-53.121925880783444],[83.10188239860722,-53.375777121581706],[83.29200921512424,-53.58469738631258],[83.51819456404685,-53.66440334200672],[83.7429340547859,-53.68050629987968],[84.20526611989656,-53.6046581157016],[84.32187133484629,-53.51632292448012],[84.48832859779225,-53.47341645037282],[84.90247954746711,-53.566954434254455],[85.03430478269001,-53.559035998513544],[85.15668266373387,-53.66901085391469],[85.24149125472027,-53.85469388661052],[85.19020091232245,-53.98631443479164],[85.38573205686998,-54.150016256641656],[85.5481841399124,-54.175517956538485],[85.66360302217038,-54.302687615677456],[85.59250391961595,-54.502027637340504],[85.61595199955877,-54.58438686681078],[85.82126663702515,-54.76667701548134],[85.85207436497939,-54.90562477828536],[86.04610428586028,-55.10782120370491],[86.3410059125618,-55.33390808626148],[86.28552656256528,-55.406754329308434],[86.27117877108253,-55.59834222415666],[86.35870241542712,-55.77865698417471],[86.36884638496899,-55.9251850974116],[86.22428206414678,-56.12152078463189],[86.12531644344207,-56.32294264679699],[86.21058746226295,-56.53468003194648],[85.98362801355408,-56.69713887029232],[85.65957255168676,-56.79202305051023],[85.59639720929832,-56.94836674105731],[85.79278430852361,-57.42503454134774],[85.94533952769892,-57.55819874430904],[85.92098969087495,-57.67209616776461],[85.95947465245928,-57.86041355182867],[85.90162477146285,-58.14458667501748],[85.99885419893025,-58.3299755013712],[86.20783879912904,-58.482983653790406],[86.72625193580656,-58.762623992510385],[86.71924714908106,-58.96619365883412],[86.76324536159271,-59.03044724133767],[86.74517587860305,-59.25709537094043],[86.83575060979823,-59.3937072519657],[87.20933130878765,-59.580366670191324],[87.45930509040713,-59.78541217590106],[87.67248123230006,-59.86450530112555],[87.88882312098248,-60.0126546436566],[88.23084949500111,-60.163800067124896],[88.32128216723657,-60.27958614883411],[88.45219203541279,-60.35048149738413],[88.74338647546298,-60.44542467464311],[89.06485592264715,-60.72687224636353],[89.31577704839613,-60.97217146695938],[90.15102370516801,-61.49529658087529],[90.5818715350745,-61.71092873594292],[90.7183273124862,-61.81556429638382],[90.78126159807289,-61.93025337594515],[90.82641271970726,-62.15976711894703],[91.13688997212496,-62.32172175543862],[91.2084543280942,-62.43288887496748],[91.35433364588668,-62.52033470484135],[91.56125320123219,-62.73183133978165],[91.71154289579256,-62.79000140680416],[92.00448278001942,-62.83193778602849],[92.22480104744052,-62.93900931697887],[92.45476956215225,-62.99689062200224],[92.73752483388425,-62.99887218219099],[93.09956194766275,-62.89629175368094],[93.28649218242879,-62.86951295386728],[93.54232318151287,-62.931473691243255],[93.81635728478919,-63.05563376357315],[94.01086521079044,-63.218907658912144],[94.18295429598433,-63.407998902504445],[94.34949233493737,-63.734710421452604],[94.45384088788323,-63.871000275205105],[94.86272850880485,-64.12312458812178],[94.85075285958911,-64.18659816090772],[95.02923993450293,-64.29838282260572],[95.12542941165513,-64.3942301822336],[95.37639099318413,-64.49209721226674],[95.58450960822844,-64.63467542422305],[95.80369196247813,-64.68809661645328],[96.18135234845066,-64.66246673519512],[96.35762662038844,-64.5917845355418],[96.40029387188085,-64.52961613071078],[96.80562874357821,-64.58302603509796],[97.10556640774465,-64.65993141801576],[97.3944389490372,-64.68585470680173],[97.77376959471233,-64.89925687474089],[97.96211936355023,-64.94341436380958],[98.13172580676498,-64.94394291765339],[98.33251277840213,-65.06256278107317],[98.69966347775919,-65.21257528329797],[98.86833323058086,-65.36628844843453],[99.1503482000532,-65.46221795250965],[99.28747463836342,-65.54435448185757],[99.32287706091049,-65.64160433782416],[99.40822427810264,-65.69482034580679],[99.29748666304504,-66.05946295622165],[99.4663130247355,-66.1791340214404],[99.61898119248073,-66.22868277042564],[99.73742492826793,-66.34700577990921],[99.98194968740383,-66.38198302060749],[100.20901119760933,-66.4642659758252],[100.35649292013981,-66.4750978113227],[100.54249908404147,-66.55809429134955],[100.74157983480079,-66.72026846719329],[101.01254648000668,-66.8173030789211],[101.20433657467231,-66.86266872576704],[101.38844876520061,-66.97427296587009],[101.63915484466615,-67.02340815023457],[101.49690187750078,-67.09699361899477],[100.87981927763919,-67.21478708552361],[100.65133747547384,-67.17867561813094],[100.42333923197009,-67.20208864759925],[100.21657826861072,-67.13122442387161],[100.05433753304878,-67.12104899788467],[99.90222230594787,-67.0607324389105],[99.56050068153831,-67.04604636892917],[99.31075945833302,-67.09733679426903],[99.18251025242228,-67.0897038826245],[98.81863374817668,-67.11837835238408],[98.59154437726878,-67.10288711371825],[98.24162591608372,-67.16371547290125],[97.82693992682022,-67.27660794651672],[97.75262712819078,-67.31978607842085],[97.38165404632565,-67.40148700202272],[96.67658450600558,-67.64405387210869],[96.16916175096041,-67.75160985016875],[95.81387672089707,-67.86094211749075],[95.64784377840898,-67.86346742009142],[95.36408253220615,-67.90447850545164],[95.05441287051865,-67.97985862204209],[94.8301976707305,-68.064476269087],[94.4432490665845,-68.01144597815299],[94.07705856293975,-68.02341779153241],[93.91017408211934,-68.05716237304566],[93.65331153583881,-68.17359366881875],[93.64599836944919,-68.30221824600571],[93.75703185125514,-68.35719619716187],[93.97496038502061,-68.39620981212505],[94.46140503537286,-68.36888665461397],[94.65294773807757,-68.29618073382564],[94.78536973548975,-68.35953081195993],[94.98459822088574,-68.39840394130582],[95.31101247775764,-68.39799670211377],[95.31700840502626,-68.50099062536201],[95.56760334333464,-68.5714129426806],[96.08148443347794,-68.53231870758806],[96.41460735128379,-68.47738014723028],[96.55155743830764,-68.4127256157764],[96.71095842751457,-68.37726105128941],[97.0642600037786,-68.40974617724336],[97.69959564364326,-68.30964742266629],[97.8407982341054,-68.2574709063689],[98.12358697565577,-68.20198073616051],[98.22583494420624,-68.11348298645379],[98.13036692443714,-68.02315657118932],[98.20416214503777,-67.98831023189989],[98.47550832784098,-68.00282090081764],[98.80876081729654,-67.93781720131025],[99.03823189949769,-67.92618077785974],[99.60685574098521,-67.82101926110707],[99.74782551232049,-67.81170475712754],[100.14859450186114,-67.69600785998725],[100.27981153792898,-67.68813404028049],[100.49627658113297,-67.62681231035728],[100.65851223850379,-67.65085562941043],[100.97539921572968,-67.64055983663863],[101.15522949141952,-67.61108899461966],[101.29023957984624,-67.53484024742428],[101.43407534817085,-67.51618649702078],[101.90961894894761,-67.36631834131515],[102.07191304500033,-67.34701381291364],[102.3018341753992,-67.24337576220239],[102.54571616236846,-67.19426405797338],[102.73412093790337,-67.18234441487326],[102.95088496406775,-67.09218605487858],[103.3645919629119,-66.96370150827657],[103.50345473490877,-66.93867059453322],[103.68711676517125,-66.86201220947466],[103.87043447347666,-66.75255448753336],[104.14950289800925,-66.66841669962854],[104.27160754812206,-66.58144312409136],[104.54863206940779,-66.53168921804432],[104.63915783578602,-66.49174557939266],[104.69191327650314,-66.3903791295905],[104.8672556473692,-66.33669168923387],[104.93792214826793,-66.20402101677216],[105.13046452170563,-66.14576897327922],[105.25781629516206,-66.06106795432966],[105.40099317378399,-65.91841254296199],[105.70316827864421,-65.79674968218082],[105.78167494006233,-65.65608592786265],[105.65739289145425,-65.5764874857733],[105.773774957516,-65.45022808142757],[105.96674335349272,-65.44860499395786],[106.18775438058545,-65.36422064653148],[106.35669151354699,-65.16981364732024],[106.3323073114046,-65.09484928123324],[106.09989777140534,-65.00926558415847],[106.15211643723906,-64.88480797936847],[106.14216046635762,-64.6816888390338],[106.37213217493975,-64.66464466456777],[106.50406732960391,-64.61313580727929],[106.5381040589545,-64.47882767804013],[106.3986877709308,-64.4045761198513],[106.13417132318199,-64.33914737734857],[106.08661296479215,-64.1273498731785],[106.20142215397428,-64.00975549160876],[106.17511313084673,-63.756386677857094],[106.02450483715391,-63.561944540988335],[106.03739154031949,-63.32845355660974],[105.9708752945103,-62.95290501384751],[105.92801283370082,-62.41136483692987],[105.82069890441855,-62.071386570620824],[105.78922044518545,-61.83570968275134],[105.78885844396281,-61.51395444780599],[105.75792901788164,-61.282050285622866],[105.68865341908163,-61.09794240936237],[105.66135367842142,-60.89831083469738],[105.58021157982735,-60.757554601360866],[105.54759474019596,-60.58459117250539],[105.3177885516334,-60.31475406619705],[104.87317007322635,-59.82134210126055],[104.49648407193762,-59.506771278395824],[104.34011954585598,-59.31778192588891],[104.07146176569978,-59.12478124277345],[103.17494359936043,-58.36814359697988],[103.14003004345247,-58.28571546012809],[102.86629903977561,-58.06882758237096],[102.65510165895653,-57.81231862275222],[102.52286863726408,-57.70025818197696],[102.2117139563658,-57.35350412190086],[101.60175799372719,-56.85638151562216],[101.35914383347216,-56.68095416468494],[100.76081977738127,-56.194753587405636],[100.26206237666864,-55.45619668041568],[100.24871602217044,-55.19246683410811],[100.27641062435835,-54.961284872973344],[100.4738624145326,-54.79978250074319],[100.51527085704957,-54.680997501576975],[100.4159916625931,-54.52607163099385],[100.20233449034407,-54.34554020015621],[100.003852864793,-54.07829357734162],[99.1437622280363,-53.55648147140276],[98.46817637043983,-53.08449289921616],[97.26264548662576,-52.190965911438646],[97.02175312809602,-52.04297812365192],[96.60177169041567,-51.613561504010235],[96.23420464279268,-51.26035162387049],[95.49542141566151,-50.45911809509716],[95.20765135103316,-50.17514723773424],[94.95091215124317,-49.879039819530036],[94.77597724844273,-49.63099403304506],[94.61881662541042,-49.47370148976953],[94.43500501833994,-49.1989434711595],[94.35157434231154,-48.957535156386825],[93.93361535321368,-48.40431103254903],[93.61194488565333,-47.83466522421612],[93.14471253387212,-47.03174577559057],[93.04794940193926,-46.73651620871579],[93.1128371471095,-46.643853425784464],[93.04198587785413,-46.42175062455737],[92.84385152932069,-46.33359346595599],[92.78534525248362,-46.1091930142769],[92.61956603434008,-45.926096800535625],[92.48042581991217,-45.463181189856805],[92.48678673993896,-45.28237369216555],[92.56442275886788,-45.2066518804026],[92.59183171420038,-45.01739862811755],[91.8861189045048,-45.1020206280613],[91.7131102964824,-45.04330432389546],[91.21896785333067,-45.11859381218923],[90.8930629974791,-45.08143856741177],[90.759016593618,-45.14004793742913],[90.65884827512433,-45.02888182129786],[90.31329735646354,-45.09891295413994],[90.1533977487059,-45.01209020107904],[89.80942789705898,-44.935735317304584],[89.26474782360171,-44.928481945633514],[89.1855423288073,-44.82234863155122],[88.7496316735033,-44.89001132484405],[88.73823661694664,-45.08644059365175],[88.54693575265951,-45.056092964685256],[88.52049238371494,-45.20128387885285],[88.36525660145234,-45.29169136872919],[88.43167479164337,-45.49340464619388],[88.37829035278807,-45.65916190610519],[88.761686095956,-46.168700074523514],[88.72253568955561,-46.35441835660682],[88.78899250221109,-46.61573231053122],[88.68899999509495,-46.924003873336446],[88.77375306799121,-47.12732571292057],[88.61562583133015,-47.21066698321153],[88.36487507816017,-47.18325716762123],[87.96926693996579,-47.26637393868941],[87.82220310765028,-47.18823141756077],[87.66360204903384,-46.97379060552429],[87.6597657180251,-46.68022913733847],[87.49179585341936,-46.58508756798463],[87.36773644212734,-46.44800238766053],[87.49198765598551,-46.282005258916236],[85.18833479026303,-46.393266899224514],[82.28112074345374,-46.53408809832304],[79.61860515051032,-46.653280753265],[76.70790269482727,-46.79008610197094],[74.2662686138261,-46.90319657353128],[73.65923920063081,-46.939180411621834],[72.6162468225409,-46.98006281445921],[71.27240879618165,-47.04208629375494],[71.03912872515367,-46.86493515083746],[70.95731145290854,-46.872479718732926],[70.74532090150586,-46.55722541125091],[70.78280328808448,-46.4158626848595],[70.6526340487566,-46.21696207426428],[70.36512158559299,-46.00554183064941],[70.3618910502851,-45.872563319718104],[70.20953297766985,-45.82780414208346],[70.19629910032872,-45.69210057800601],[68.7358723309614,-45.80823604802087],[66.7738477694868,-45.98432513267169],[64.91639136121721,-46.13737095218202],[63.42185456928227,-46.250299454582354],[60.74015587389449,-46.42746089623557],[57.234163634396964,-46.639014860660225],[56.64790107899711,-46.69189861924351],[56.1957565027828,-46.71038249153672],[54.45464744590852,-46.822713026245864],[54.535192510557934,-46.9732492266617],[54.39378139464519,-47.36450033915733],[54.31851777109372,-47.46957187593697],[54.38322082321151,-47.56292172989796],[54.92200575903599,-47.86059407145466],[54.9993239741839,-47.99524438580866],[55.22214012086684,-48.11800456589026],[55.83190072065795,-48.304599446178024],[55.94204980927267,-48.5229907728421],[55.88034000699768,-48.73318016311412],[55.68925075241795,-49.003267434986505],[55.778556812210724,-49.22543362955025],[55.92121943207875,-49.32564678943361],[56.19632780302312,-49.35814661357701],[56.214461496466434,-49.42675432034854],[55.80460403066488,-49.63927232208758],[55.771391925849905,-49.84754572731648],[55.70505917138437,-49.91149978837416],[55.481780446955916,-49.94770803691703],[55.45888789818493,-50.031394843161834],[55.79163391958566,-50.06239902874279],[55.39783258270929,-50.160076470000924],[55.432677152303704,-50.40741284955484]]]]},"properties":{"name":"Florida","ns_code":"00294478","geoid":"12","usps_abbrev":"FL","fips_code":"12"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-72.77560308200106,42.84692105176968],[-73.15939330000766,43.02899130161172],[-73.32828284565808,43.41355467461046],[-73.56422738941274,43.497389971920995],[-73.58064179607796,43.680285681644484],[-73.4597138284,43.71009151775263],[-73.60652899241313,43.875666678765185],[-73.74908754853588,44.147748418351085],[-73.92213571020076,44.33984153184105],[-74.09037864795337,44.447872949269666],[-74.23461802757296,44.33255893244024],[-74.5853633368475,44.31699547280972],[-74.72429126757649,44.259252097126875],[-74.68258494617295,44.07470141255043],[-75.0128580238525,43.800352171404],[-74.95709461329355,43.46346936110381],[-75.39349032218603,43.61855010792095],[-75.53545139233373,43.58052237151758],[-75.95746575036304,43.679547979267795],[-76.60425045804242,43.490552199130015],[-76.76401798617766,43.790887663761374],[-77.18025071348845,43.810054919437704],[-77.35944600602579,43.72260280667109],[-77.61617064853019,43.81044331775267],[-77.96231863029739,43.73036316694827],[-78.11799127036235,43.82597236060136],[-78.38864519691947,43.834689281585355],[-78.56465908033108,43.911276588818225],[-78.57573670033504,44.01962520032266],[-78.85653167907765,44.07780097022259],[-79.05730821308192,43.949572000077964],[-79.26836407687915,43.922320786583825],[-79.30158777261782,43.736796915286696],[-79.38129631598272,43.61418443147915],[-79.52236598434114,43.54418750890504],[-79.89971737779798,43.74612687599422],[-80.05621236419333,43.67685196894061],[-80.28039897702233,43.820052764126146],[-80.53474508691889,43.883849267668126],[-80.84800443552457,43.90027207400634],[-81.09281334991884,44.02471909461615],[-81.43373362060049,43.967093904978405],[-81.80401400972366,43.70077539154197],[-81.70267510852527,43.54672716294243],[-81.72641289912016,43.439142420649766],[-81.91109750292608,43.36304256488154],[-82.22028901093569,43.67396833298079],[-82.36890290625163,43.730717552634594],[-82.58749198793586,43.93804658520494],[-82.64822881649037,44.18046638688894],[-82.50937302597359,44.31944777958712],[-82.67837921053717,44.43513963746094],[-82.62089346172597,44.54646221051603],[-82.81898624987483,44.739566570961934],[-82.63924833171296,44.81654838166224],[-82.61637450871036,45.12621104425848],[-82.74388698226296,45.23728569391496],[-82.72412071875146,45.39342281698656],[-82.86130477156503,45.56923407915845],[-82.8129762086703,45.62550596824374],[-83.03375974824513,45.728560842729706],[-83.08346749201243,45.80840158973612],[-83.32460238549132,45.94687205979752],[-83.83769448096555,45.819022594583174],[-83.86960369688889,46.00067766969817],[-84.169265178733,46.15406099229678],[-84.30178812523009,46.28586528414839],[-84.3038021215638,46.393079880033326],[-84.40628757892017,46.5946370106507],[-84.38841243135218,46.71300403830784],[-84.12264141952404,46.73540451045286],[-84.0335909776272,47.21658257576567],[-84.32663983269494,47.41992722656075],[-84.26401638805181,47.521002199437994],[-84.4764194079906,47.54785162676585],[-84.58863707592522,47.75829072125636],[-84.56412767401085,47.898233345902405],[-84.745929654667,48.05862268880722],[-84.78231179104611,48.16854881197474],[-84.95384953397543,48.33313948787357],[-84.86974286658273,48.37953487184669],[-85.09383563419907,48.665584013478345],[-84.98963597106976,48.95207646778573],[-85.16585504224567,49.04208703217728],[-85.08962376600805,49.337981113763774],[-84.9993154210179,49.37007934846713],[-85.01665261539411,49.533962967809266],[-85.30840121452346,49.59911924078826],[-85.1870143858536,49.79712681303831],[-85.0458345314222,49.85498940129217],[-85.06678646632047,49.95165052788023],[-85.30986450528229,50.082228505722185],[-85.51642541948686,50.112036719578484],[-85.45327573366642,50.20635344818566],[-85.58394801764423,50.344100429635304],[-85.56913730826788,50.43529664262099],[-85.75030835582457,50.50237856587903],[-85.98725298872998,50.485677617049355],[-86.00679243496165,50.327515460044175],[-86.31162290754847,50.22326350885041],[-86.45382491235286,50.07082617803106],[-86.63838934975551,50.061408582562926],[-86.73801251215868,49.94867945758191],[-86.9658905735545,49.94883793620986],[-87.04860221410887,49.88975569313734],[-87.30997861405102,49.96368314574297],[-87.34594781187238,49.85221273591023],[-87.54882548081235,49.68987652954162],[-87.90015643438022,49.63685509297375],[-87.95952075057849,49.78772095106933],[-88.23474864696128,49.94529062236458],[-88.22257113620375,50.00305510236464],[-88.59871469024829,50.231482098753055],[-88.7647038306975,50.217392408825646],[-88.77363663006271,50.33242009030501],[-88.64797884799707,50.41295908894331],[-88.7340177938925,50.542759837208486],[-88.42618328592464,50.624204594370646],[-88.30282841642895,50.81903395110718],[-88.32089454601713,50.90571278322607],[-88.50375258753195,51.02855413381185],[-88.5512003725821,51.17250958788527],[-88.22610962207092,51.373152717426606],[-88.17455895298858,51.4514457301838],[-87.63951214833872,51.492722520400555],[-87.5403452327651,51.626505307349404],[-87.6693291883066,51.796402269181314],[-87.49837901563323,51.874647720223535],[-87.52654763442725,51.97421561208454],[-87.71113994624982,52.077011255899215],[-87.8123560895538,52.33437364803742],[-87.66497903625023,52.37555365818734],[-87.59014630882645,52.491443373485716],[-87.63777243259838,52.58227085494244],[-87.84721014767415,52.66062826731338],[-87.76432916776442,52.828219528883956],[-87.5850017645591,52.784664323680566],[-87.41895301524542,52.79674976784032],[-87.3523527634422,53.10263318284562],[-87.41024844148977,53.21754974173016],[-87.17327549752103,53.272605467364535],[-87.1731768270893,53.36737747391748],[-87.03588603672476,53.48287049077054],[-86.97742912027599,53.603939234872925],[-87.00792899386948,53.69975989154768],[-86.79164643111528,53.7805328330216],[-86.69928476341256,53.9766116718056],[-86.76109955960237,54.14753230242258],[-86.48191742915492,54.1646077516203],[-86.42265359423855,54.333115164372906],[-86.30210498968837,54.42077242248435],[-86.16106293923929,54.7042627986891],[-86.31494178946598,54.81813927243801],[-86.7993596920961,54.78482327351337],[-86.88719563415295,54.72257775579357],[-87.25191062609973,54.81959701627397],[-87.4977679728829,54.797797366038914],[-87.66337470678454,54.92709298476934],[-87.66266205060518,55.01023360186045],[-87.52476248489695,55.110340190637416],[-87.61662550571948,55.21756280462395],[-87.84367214442429,55.28367075464401],[-87.9816331718592,55.18953500487746],[-88.16591421273772,55.14179592502507],[-88.32339879225603,55.22868028898832],[-88.14841348308701,55.39044117976327],[-88.22661417140371,55.492786770335414],[-88.42830322502415,55.52712586776113],[-88.52902863952066,55.612440143117006],[-88.79798552505606,55.749480552514456],[-88.77891863338168,56.02962019227588],[-88.70020652278224,56.11145191582895],[-88.84282516685656,56.167498432487626],[-88.98692034693876,56.33750293568479],[-89.20931749210565,56.36984531970081],[-89.29312017220623,56.68290530647265],[-89.38061821946852,56.706702536752594],[-89.6675977639288,57.06724468915313],[-89.89746475748288,57.171158285264944],[-89.93147882930324,57.29169977353459],[-90.10669013409726,57.33618936893601],[-90.03250514708965,57.45589230805563],[-90.11883899634559,57.60393676864678],[-90.51684077755878,57.67687336365893],[-90.57616256121698,57.74601367557616],[-91.02221584417812,57.8691026280469],[-91.06924762680902,58.06946332140919],[-91.33550560925899,58.22300804040478],[-91.46911925870806,58.21873951307168],[-91.50139388001578,58.310380170017936],[-91.88079348768994,58.50291529840974],[-91.58643201014226,58.53439482408306],[-91.36613665358335,58.50819215059524],[-91.350411674692,58.58605214349638],[-91.73882883990369,58.86848022964928],[-91.74483633320732,58.905974470944],[-91.37974856645086,59.03427364236548],[-91.35051293426332,59.131679780430396],[-91.50369159991641,59.26422676665507],[-91.38014835456212,59.40011618879797],[-91.61821207997384,59.55113007753327],[-91.6421265967429,59.65701213145886],[-91.77893721381261,59.651948140825134],[-91.83749835970153,59.77555133528439],[-91.79857342357916,59.93025557513477],[-91.9046975748262,60.02002401825045],[-92.00817316476744,60.00722833460322],[-92.20940053753245,60.27195242513569],[-92.32081079622053,60.33939117682492],[-92.42654120740224,60.515035892910866],[-92.50396477001635,60.5394039234623],[-92.12512112168136,61.414518536597],[-91.41635087465394,62.951215068861096],[-90.99343519826625,63.834866645392054],[-93.73645525892604,64.09354888508248],[-95.54646537387694,64.26681900007063],[-95.73753287537865,63.893285516375784],[-96.33364860617566,62.73591851668078],[-96.50988131802622,62.37151843638346],[-96.94192975715798,61.53062510842902],[-97.39248219999922,60.57634322079348],[-97.91977020108561,59.37618962122769],[-98.28299667879376,58.545182753007495],[-98.79056689214441,57.342171940348855],[-99.58267209149332,55.3973378692192],[-99.77708485935077,55.08610085813727],[-99.64548907739726,55.03325654414974],[-99.66690912449859,54.958591348229355],[-99.53167768988631,54.859615721032945],[-99.58089264166192,54.77482846109161],[-99.50396219063431,54.701235796161285],[-99.49003797461663,54.55054032013414],[-99.56445665148964,54.44882767903119],[-99.4303415629969,54.26579034899642],[-99.70466843345119,54.03817265798496],[-99.8216274627491,54.02710355393097],[-99.68223395417837,53.87178181175595],[-99.65519411180787,53.58499338642594],[-99.52449807345116,53.39112308053666],[-99.53744474609252,53.22790843557864],[-99.34412523996022,53.02984336899676],[-99.19224283465542,52.74049345960149],[-99.03670384983627,52.763559423652126],[-98.86831457518072,52.71589909271222],[-98.7685494626916,52.53061182406527],[-98.42764197495399,52.471609788781855],[-98.21164919802338,52.24270393227402],[-98.27447080090356,52.05879795486116],[-98.1107380550883,51.854598741904375],[-98.06116547174709,51.63086620374217],[-98.43923014808503,51.43613338372843],[-98.67145286637954,51.26241006201507],[-98.7199203114458,51.08332781583287],[-98.91362005671911,51.01821752020097],[-99.00508976444887,50.8921515332837],[-99.16079383182831,50.82706870572649],[-99.53295748137555,50.513788979317546],[-99.59379917245694,50.33963863116914],[-99.790828269545,50.20046963810494],[-100.06149525014901,49.789067262171194],[-100.3478143330297,49.64644448747876],[-100.52836886882972,49.4576329441944],[-100.83736685505268,49.31886443069326],[-100.94501140556109,49.147402915918356],[-100.89629100378279,48.90243473293274],[-101.06751324847971,48.70856197244175],[-101.34893674241998,48.55154108639806],[-101.59271300657448,48.37520081311834],[-101.63455390654505,48.28941128702149],[-102.00159328835987,48.20863981774457],[-102.23537551250205,48.19025137408067],[-102.39732548417328,48.01147082328849],[-102.61667841818345,47.853694677211976],[-102.66614846514551,47.74280670020851],[-102.8173313553911,47.6373603267232],[-102.8868260584878,47.49550584459218],[-103.01605181510736,47.439780228893675],[-103.043016885453,47.32996334835393],[-103.26397524479476,47.25107314587208],[-103.40520390237555,47.11867658257322],[-103.53647238091946,47.09756135015471],[-103.58132936949927,46.821330115410376],[-103.76661774417218,46.696326136256204],[-103.76512834538075,46.58178693664673],[-103.60208381061173,46.36003822942989],[-103.82341391563706,46.20877291339343],[-103.62563466229177,45.977012701257124],[-103.48178606578387,45.95247379623876],[-103.34430514928228,46.031574474262435],[-103.10417573634216,45.75188259694662],[-102.95375974158272,45.81911546605488],[-102.68283247813967,45.74473741557345],[-102.71732103215253,45.5049289144849],[-102.56001716755374,45.47703635859386],[-102.42345519130927,45.383663589225854],[-102.42535492595087,45.25148721250877],[-102.69820928179095,45.013837403699775],[-102.93661451640374,44.977842512500246],[-102.97420866281541,44.794643366406284],[-102.82546862415712,44.623885331530225],[-103.00338620127158,44.45502489515333],[-103.12137095499337,44.13200145191199],[-103.22189303587803,44.129443622808296],[-103.30301538936111,43.89980017688626],[-103.61561042528409,43.73824615623293],[-103.61979656954036,43.62926353878937],[-104.30105399909925,41.39720865640458],[-104.6921617607558,40.08372732755261],[-105.1545324548961,38.48082692622877],[-105.87478092560248,35.93645644097883],[-106.46404420226641,33.78026638811077],[-104.31192778132018,33.36581054392819],[-103.0893826266503,33.13511965910285],[-102.44677704993042,33.02674323248517],[-100.5242642068822,32.67530139609796],[-97.61678214331693,32.15818197719285],[-96.20430334539437,31.912657858899273],[-95.03593678533751,31.748734799760364],[-93.96900094680741,31.52191471915314],[-93.29275078279323,31.41412303255641],[-91.0947051057272,31.037517701670165],[-90.33473517882668,30.877303989026007],[-88.27544927309998,30.57685599057522],[-85.59393538827628,30.18499100633823],[-83.75030608011934,29.911971823374394],[-81.5113417713196,29.578137009654668],[-81.41513541661094,29.534585688355065],[-80.5767476663345,29.421118773069484],[-77.87014524621921,29.033486328164564],[-75.55878313374993,28.718537400695144],[-75.02552976760673,31.61537016081338],[-74.72989914360193,33.082599456695036],[-74.44256184642381,34.59230711509369],[-74.13631972475936,36.1576828777831],[-73.87439037819183,37.50407454855722],[-73.40151502879577,39.84505711229115],[-73.28828807352137,40.45063917558032],[-72.77560308200106,42.84692105176968]]]},"properties":{"name":"Idaho","ns_code":"01779783","geoid":"16","usps_abbrev":"ID","fips_code":"16"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[11.15817993632201,-15.607246340684972],[14.019792351059385,-15.565278568712136],[15.376344051405509,-15.53707531736063],[17.924495149820324,-15.47489464770237],[19.570358621570605,-15.436279173323959],[21.74441641874613,-15.368783805472427],[23.40600110467133,-15.306723188525936],[23.8933140913726,-15.299232000271587],[25.911999109283276,-15.213349504714875],[28.635107754361403,-15.090305286856136],[29.302143987639354,-15.074262151981163],[31.98889446653313,-14.933454502205953],[34.45372225390078,-14.801411529299058],[36.50370562805858,-14.686484268208192],[36.68404460859383,-15.281283543551083],[36.96408022082457,-15.345955190989583],[37.05761161146479,-15.445518532191814],[36.978684343590245,-15.882952555307314],[37.08986949611283,-16.01391345003748],[36.9932152069695,-16.228813581290115],[36.81816172698048,-16.285359005391065],[36.77424071301694,-16.523612154069223],[36.43233941631891,-16.720545319438113],[36.25227202860081,-16.879639932275566],[36.189061565608185,-17.19137000872146],[35.8719449394597,-17.38171628712585],[35.83580246162693,-17.50058992458322],[35.58811204977749,-17.899151070892714],[35.438314094355995,-18.22226757141799],[36.90761359457927,-18.122665884942],[39.115908061472275,-17.969574673603287],[39.26500269064257,-17.957629768053884],[39.361472033225105,-17.72441427532786],[39.379498527778956,-17.38998800438465],[39.85218016980386,-17.03433569605153],[39.752771828483624,-16.754333657747686],[39.239661444137276,-16.41529190435378],[39.211571148892276,-16.22450657564741],[39.46178823807437,-16.22292334920965],[39.696246084332905,-16.28688155082066],[40.12450608924756,-16.165485762720365],[40.104657518915964,-16.027712840387068],[39.85809927161027,-15.936332912593821],[39.65864933137292,-15.805091721972541],[39.649903738017244,-15.587816549931453],[40.09839005908344,-15.566865293651219],[40.20700537518413,-15.320538326404073],[39.999127539218755,-15.01045492484409],[40.093492288278085,-14.595557770587407],[39.97868976983181,-14.468523305765057],[39.845752312227454,-14.292191020575443],[39.77113578197755,-14.064412374128374],[39.98635984307271,-13.881733254083315],[40.27963302351395,-13.95069272460474],[40.375637997522105,-14.23865509568735],[40.28382366690882,-14.451419584142306],[40.24501954933335,-14.602289103261224],[40.352911368285525,-14.719945412565714],[40.48236603709288,-14.687612295964634],[40.66930026821994,-14.415031520710084],[40.8976275046259,-13.516115635813076],[41.084701675747475,-13.448921719646894],[41.17731742117705,-13.504626337927812],[41.470317377906795,-13.865587954717132],[41.710981374356464,-13.85021601700745],[41.831854727960966,-13.616491080523055],[41.84618419710384,-13.42380593300298],[42.04533329139144,-13.147180645074506],[41.97547115100682,-12.99441740928593],[41.78356035013613,-12.796840448530999],[41.78854133143369,-12.648446894578498],[41.93679483942295,-12.498028556626025],[42.188255866880425,-12.53550812300595],[42.22658643954535,-12.365078306716928],[41.86386144567858,-12.15769328918572],[41.89057696951949,-11.921175243514766],[42.07007779012503,-11.869760178374074],[42.16690913701174,-11.570441612573731],[42.233975489608056,-11.088561964883837],[42.16572717751512,-10.948943253185128],[42.02931500882346,-10.918906030870916],[41.826595902865876,-11.016634258560076],[41.697242880876125,-10.957021532433703],[41.61357150026111,-10.687290100840675],[41.27244728804197,-10.390236243229479],[41.00087425362418,-10.369483913465693],[41.04913914505725,-10.541321363028842],[41.31033057384324,-10.732387597091643],[41.27153438386131,-10.871231135183885],[41.12791514279512,-10.910383754522526],[40.97656780970497,-10.774943523072466],[40.611191166619314,-10.60214862159497],[40.589221667866525,-10.220778506300196],[40.30401248043611,-9.930013777625792],[40.0698265933911,-9.509859894345103],[40.07110951686211,-9.202895966082833],[39.88680553721259,-9.153249812396679],[39.70946597166495,-8.916100974138994],[39.74487955957955,-8.713913951717359],[39.92997923735485,-8.530721060461332],[40.14274888220047,-8.47139187412875],[40.2026884640639,-8.113536167920964],[40.075774599597864,-7.812982268303306],[39.88541418979997,-7.616545556390664],[39.598398839270466,-7.141389640626316],[39.55645754554342,-6.806046530677747],[39.77242892103263,-6.789738004523492],[39.779763474599996,-6.675255212690824],[39.53942683775235,-6.387838600831967],[39.54951614780897,-6.069131216250661],[39.466657423953066,-5.982018687893724],[39.13833014171012,-5.897773457139166],[38.9269055789515,-5.649350235074406],[38.75364570624236,-5.6919807547863055],[38.644363669994426,-5.5931973659844205],[38.67358633195593,-5.404133406871772],[38.20202567718062,-4.999442158902918],[37.873904100224195,-4.9115369140054685],[37.85485439361129,-4.773318841766313],[37.590733140532635,-4.617383825116188],[37.308884765662164,-4.8847145614090985],[36.996435236268844,-4.806225486318696],[36.86460671966089,-4.563551212570213],[36.93649962721861,-4.410408406325724],[37.09009000177457,-4.342206807635736],[37.027353517918435,-4.183547281274452],[36.767969849940776,-4.265681565519528],[36.31554701140561,-3.897209060466638],[36.16100221498926,-3.9040548175269496],[35.96299347922159,-3.740568875963845],[35.93016980460167,-3.59367799353469],[35.69695273325673,-3.5554730215201245],[35.287899869794096,-3.2742998765646374],[35.08917524183904,-2.958909486586947],[34.74636276096354,-2.746667764471987],[34.59709503409951,-2.5239826747154055],[34.494358875300264,-2.084892075500455],[34.48198564050713,-1.7262621055774032],[34.62099596384176,-1.323111163499892],[34.88649868374687,-0.983727517106635],[34.991072511469454,-0.3432457992380856],[35.193303330257585,0.06379486462909392],[35.352025252055086,0.23864002110531032],[35.41165728591256,0.4446227590576482],[35.347069733752335,0.799636529382131],[35.18914948216547,1.0467375572229356],[35.418591025902316,1.4984102384763298],[35.64533639356983,1.695607378241656],[35.676229943629075,2.0672172845215946],[35.19652614924403,2.3141805420177732],[34.893793192301665,2.524281529736155],[34.56688244587193,2.5390291894029957],[34.09517875377449,2.762893490631699],[33.77292937954032,2.806660024422795],[33.65981466020491,2.7357113002479063],[33.59166649872845,2.494096261741557],[33.285100258949356,2.1026185380300904],[33.118583329741185,2.052533789477337],[32.85952912852419,2.173091014162095],[32.62594701233995,2.4419998236286844],[32.51085924620584,2.9225356272140925],[32.301808411628,3.3660482612222036],[32.45586847733624,3.6122456103341194],[32.41429428168557,3.8247399590854143],[32.28111764542598,4.070624550043868],[32.14519068565356,4.753900822266205],[32.00502900057115,4.848644563872421],[31.75899223967253,5.151757289241015],[31.45002942670855,5.391884044049794],[30.96001931804774,5.701955121835456],[30.9285860356661,5.776465569528098],[30.62232227643527,5.905330144447368],[30.37027904986839,6.0748731676913845],[30.22910675029438,6.251705051955103],[30.2111355749887,6.397841751130604],[29.99532700333498,6.70448369864561],[29.735044152758707,6.739881809472998],[29.618416495330436,6.870929779026695],[29.50853919258213,7.152986882366935],[29.30060879305578,7.231864118550506],[28.996240447887615,7.561040970806828],[28.594084773934274,7.860833623062233],[28.476256380166095,7.987561279216836],[28.47725925636208,8.442597133076251],[28.400474966662724,8.561717614446039],[28.0786803185042,8.773145257066087],[27.990125695463256,9.025905324044874],[28.123404112927346,9.294891704550018],[27.681209506801867,10.137747949000373],[27.702545280998812,10.287555540040804],[27.56444267771727,10.767870397305137],[27.534549053524504,11.13719401739156],[27.550389469814935,11.546046008571679],[27.610344031279425,11.844557638254571],[27.75308706531505,12.303522114402103],[27.970598476146584,12.565960353874365],[27.850443626729838,12.616508059920148],[27.626274986859638,12.579595961996988],[27.39365223646377,12.767584519632887],[27.369148043238127,13.102507700364185],[27.14441381440257,13.117960011395798],[26.988940517459294,13.340282195207541],[26.86588092483485,13.403403820850327],[26.826848184063138,13.664267844433354],[26.502253928920393,13.72501393808454],[26.454202244841692,13.935333932747854],[26.228238394896653,14.136673232518838],[25.482973306531253,14.065696092489317],[24.260676105732653,13.972042952077866],[22.177515221359698,13.845938600037732],[21.243935730963845,13.780059873168897],[19.34436744481307,13.690335991123066],[18.01997462416407,13.613200800964595],[16.478373506186482,13.56941524191641],[13.662808845956164,13.454665993667406],[12.530616694410385,13.422649718617294],[10.8592379111042,13.392374568848469],[8.724009035483911,13.399118468582895],[6.05511071764217,13.420658791476566],[4.566633702986271,13.439284734745812],[4.524304813228201,13.390169844207072],[4.613560418195268,13.024601980758263],[4.935511477066024,13.042923323227733],[4.951272460836428,13.242447693604879],[5.071323642050462,13.282660578188313],[5.176765771937176,13.11124695257141],[5.126717302863511,12.96528448192216],[4.9211662714740925,12.880188203929183],[4.958770487169235,12.628488777917802],[5.139060004098508,12.454092709302369],[5.130611975215265,12.253243833874672],[5.234283699761395,11.929296083622926],[5.34135207230563,11.735951728911141],[5.174570297093842,11.596189706233424],[5.717030731083257,11.376775147162574],[5.7016294100410345,11.232749965879616],[5.919099224807783,11.081449431966108],[6.12119598177792,11.043464083788667],[6.169493007748666,10.895615014473329],[6.1277377114886695,10.620629472667467],[6.3297043336144885,10.46917956119775],[6.381175599284466,10.305796793936675],[6.569915340338304,10.20450602868001],[6.446421997339522,9.67722108834969],[6.601560663029592,9.512215114572014],[6.750435022901872,9.544697304392711],[7.0535168363995515,9.323093145878019],[7.370682879678943,8.960469713921997],[7.6149905139732414,8.899177902438877],[7.612336436514287,8.702164050110822],[7.702531242337706,8.61810780735034],[7.938170505738833,8.648889248662297],[7.974278041169988,8.481264381095682],[8.272121094067826,8.350770932637694],[8.541762298081405,8.382171638633482],[8.648344165534755,8.623366743268518],[8.973301239533571,8.638506393383208],[9.083827596009659,8.586303334472309],[9.060353726570169,8.288783444107393],[9.324274489846369,8.167776811344714],[9.40928593788372,7.974511003403423],[9.33306771250659,7.859742984913162],[9.175572240030853,7.8498572565853095],[9.217531150903955,7.629497559782909],[9.448011815026327,7.728928455231902],[9.507319937495396,7.595597377163614],[9.419147423627242,7.425915916967337],[9.273046529912655,7.37930997171756],[9.027152727370488,7.5274437317141665],[8.90385132772932,7.431756453996362],[8.913001504006026,7.136232482805796],[8.614129389818752,6.974141840157881],[8.451259382710589,6.637699039205099],[8.444696583367827,6.343655602116607],[8.169694740714364,6.292176606901212],[8.168761145218173,6.05001968621848],[8.48522792944248,5.749330359525648],[8.5813917339368,5.487728014115429],[8.818386583707644,5.384913836765333],[8.914253495274922,5.210351132585056],[9.210506495934165,4.9515808857691725],[9.375110441683805,5.005543384641402],[9.430503177647187,4.886164805076974],[9.261929297114474,4.7090496118149],[9.330838183573544,4.330449262237731],[9.61884764167137,4.1186096616912415],[9.723557172824412,3.9863732123435405],[9.703583741090133,3.7421152173382177],[9.971123403995515,3.682391955438755],[10.083669546426995,3.4885326859336088],[10.233200588046849,3.4128526976295266],[10.488994171881494,3.5172271696255835],[10.652157957630978,3.4540645010576663],[10.700842176267143,3.3107095067228953],[10.942232904280978,3.3626137350808376],[11.040756064804082,3.294577136152732],[10.944250743197683,2.9653427391317586],[10.969712175675513,0.8458103818709393],[10.978285250285774,-1.697595599832909],[11.007986447680219,-3.40698894608187],[11.024645641602872,-5.17660369154813],[11.025854269945661,-6.594127954948864],[11.060071699086222,-8.564991764529054],[11.083149581423152,-10.733698997627359],[11.10561780019015,-12.115701625453237],[11.121876233715414,-13.398448797486239],[11.15817993632201,-15.607246340684972]]]},"properties":{"name":"Missouri","ns_code":"01779791","geoid":"29","usps_abbrev":"MO","fips_code":"29"}},{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[]],[[[-86.976421716419,-59.19176371285572],[-87.1870067956047,-59.13596570244509],[-87.45787156432733,-59.51437913507164],[-87.12145673897376,-59.52297205920951],[-86.88193246459696,-59.42576789603772],[-86.86722683644939,-59.30773724682937],[-86.976421716419,-59.19176371285572]]],[[]],[[]],[[]],[[]],[[]],[[]],[[[-85.41955731276964,-59.00984014245544],[-85.09160214402313,-59.08914045903313],[-84.77007735803029,-59.05209340049514],[-84.64613068745078,-58.967616864461334],[-84.57539567333286,-58.836251827116975],[-84.44010098500468,-58.74203896572752],[-84.02030240720235,-58.6688555413924],[-83.82883379485013,-58.58250592012526],[-83.76784285030078,-58.42691134756018],[-83.80010083339025,-58.35391444087984],[-83.65575231988856,-58.26058698152107],[-83.5928031793589,-58.12705344405945],[-83.73036933741342,-57.985916857945305],[-83.98353819080964,-57.8403559310283],[-84.27308662246789,-57.78520785581053],[-84.54142776238963,-57.81802266073612],[-84.67176304026619,-57.93744646283592],[-84.7726794375977,-58.12338342567573],[-84.94366411700341,-58.160330390432556],[-85.23503373664384,-58.297682122477646],[-85.48599005919844,-58.38223480239169],[-85.6410661301469,-58.599829795243686],[-85.621900734722,-58.86063686638093],[-85.41955731276964,-59.00984014245544]]],[[[-64.33967725567578,-62.12145231925232],[-64.09644759807428,-62.279271290233666],[-63.91448193761405,-62.30156641191102],[-63.89519201033444,-62.46622349518716],[-63.77513285548172,-62.602784163966795],[-63.554801182975964,-62.71733842741465],[-63.34281437223167,-62.7437134607258],[-63.162073409088954,-62.72171378026632],[-62.753480775944006,-62.72573165728349],[-62.55507463953584,-62.65826635538436],[-62.21942283470392,-62.58124372642653],[-61.915626007132225,-62.34383120505626],[-61.96594373980692,-62.201410007427306],[-62.40797944887831,-61.935719881712664],[-62.710693381381745,-61.82361532847959],[-63.01129180101466,-61.77816566123782],[-63.523940462868715,-61.75441517884006],[-63.82848284792668,-61.76029934944814],[-64.18747403168645,-61.84369406277611],[-64.33768024307285,-61.93442828245809],[-64.37809170755988,-62.06603948927598],[-64.33967725567578,-62.12145231925232]]],[[]],[[[-63.692935539235066,-60.81421142663795],[-63.82237581616583,-60.867659005111264],[-64.6563722551029,-60.825443459410366],[-64.82331485551406,-60.778489969979276],[-65.06602811914908,-60.75407369682826],[-65.41390558904655,-60.76059626240902],[-65.63541895992194,-60.84232562747241],[-65.67883384379712,-61.01015533671955],[-65.93515575517154,-61.17114647899671],[-66.04106945196263,-61.2805277605679],[-66.04726762990231,-61.362302355393034],[-65.9308072501743,-61.45977690384293],[-65.7442654621445,-61.532837553076995],[-65.14267394456778,-61.55873805702447],[-64.46001106440656,-61.54054268324979],[-64.07548129352176,-61.51005672585461],[-63.92873051264152,-61.56039002356043],[-63.4172310854918,-61.63082154282622],[-63.01946033761302,-61.71231476951189],[-62.499616000995665,-61.70407689736096],[-62.15357514981829,-61.62137873948033],[-61.39909813448873,-61.38026406738089],[-61.25167184276372,-61.24899192288205],[-61.31266226148663,-61.08625678258212],[-61.49333961549092,-60.98821042090315],[-61.731617045805265,-60.93487063704647],[-62.218772862424,-60.90720518756784],[-62.61148456345145,-60.94677824800706],[-62.75108903864681,-60.91105163860422],[-62.99151867453179,-60.923230399118815],[-63.10618742106225,-60.830122636029685],[-63.271985402320645,-60.78608503829523],[-63.52750898439984,-60.77155258479336],[-63.692935539235066,-60.81421142663795]]],[[[-80.31050275576641,-58.7344055540255],[-79.91313881593763,-58.79389270774227],[-79.64422464908843,-58.732250345279034],[-79.33425478529215,-58.620714997065235],[-78.99901514716677,-58.463667009670694],[-78.83929820283134,-58.345989110759966],[-78.803490694058,-58.25452984289787],[-78.83008249286378,-58.05592029148471],[-78.60107643764137,-57.81062343043394],[-78.54402689769239,-57.656732317859046],[-78.56778891222976,-57.49820070910068],[-78.69710204610286,-57.35641657590664],[-78.98270249341016,-57.17896717901529],[-79.60741900303844,-57.020528381186004],[-79.80706367309676,-57.06730122404922],[-80.14837348544923,-57.03523486764882],[-80.41978571572447,-57.0738304621579],[-80.75403670948165,-57.04337471367897],[-81.00853577509535,-57.08312881330657],[-81.44044439421081,-57.25356943025507],[-81.92751328542211,-57.356347485779],[-82.18940430428141,-57.50449341577804],[-82.22591367752445,-57.60090773643917],[-82.52060772046909,-57.75184302440606],[-82.59140535466973,-57.819828762887155],[-82.60894151934706,-58.04338228075502],[-82.56729566190087,-58.105267854290204],[-82.23826243950208,-58.33145268725227],[-81.85483629906321,-58.43600130922413],[-81.69413854750071,-58.45395554870303],[-81.16151241428793,-58.681373039562864],[-80.87214084397618,-58.68738619139291],[-80.48392281866145,-58.73368111769999],[-80.31050275576641,-58.7344055540255]]],[[[-72.40158477567908,-59.82839959084251],[-72.27516201345674,-59.880028451773164],[-72.29421990906151,-59.978955940988705],[-72.12797755927828,-60.147216111831106],[-71.88723585772289,-60.280736253719006],[-71.73965075957514,-60.445687084238834],[-71.50944260389221,-60.511125718431224],[-71.38536213970836,-60.76703565228537],[-71.2849251519387,-60.838444936827],[-71.02316410310976,-60.88959970324487],[-70.11422157106414,-60.839771380268125],[-69.60759356751635,-60.84792403405864],[-69.34346327699527,-60.975138825406034],[-69.01679477882287,-61.0233962310969],[-68.75669055655628,-60.994268438681836],[-68.58168664227885,-60.94694084040569],[-68.33434572931242,-60.993593238453634],[-68.11636060967882,-60.97463627646145],[-67.65958040929651,-60.7844112058279],[-67.59368957379517,-60.694457868908614],[-67.66171368595107,-60.49293484872323],[-67.79666111683989,-60.4104745234764],[-67.9540986619144,-60.19101773832563],[-67.8774172269996,-60.10797792270926],[-68.01189537564008,-59.98727954895879],[-68.3539539063704,-59.901628905521946],[-68.61313788507337,-59.91671913510031],[-68.81329501997953,-59.81637559051981],[-68.93072618438093,-59.67140592180754],[-69.23402182840557,-59.53982810339619],[-69.48128117525258,-59.23894240837319],[-69.88306830599107,-59.05897799645939],[-70.25336267045759,-59.032738575719115],[-70.60731716631562,-59.11095642581813],[-70.91173597647061,-59.24403214543778],[-71.04112583684592,-59.37300089135012],[-71.26980359672267,-59.46326131651071],[-72.13446748387804,-59.51204993358236],[-72.44295159452676,-59.55491756948937],[-72.58052665378425,-59.670911996538685],[-72.56452407818664,-59.738412863544795],[-72.40158477567908,-59.82839959084251]]],[[[-60.675441827476064,-62.568385572931405],[-60.31773173153872,-62.57961627180863],[-60.237603358429524,-62.6979028278054],[-60.44974776855176,-62.7626703685019],[-60.570028095797866,-62.83150102500272],[-60.89284824973543,-62.832236022408125],[-61.2771769242162,-62.93882479494697],[-61.608445764168636,-63.00482746021856],[-61.804279533575844,-63.078107595351455],[-61.9416195217055,-63.19856479751408],[-61.9131748566001,-63.48506658024812],[-61.61173113378597,-63.48553483895925],[-60.45900460005693,-63.45674516345832],[-60.163464232957345,-63.33881694938499],[-60.09796086800145,-63.24441381123246],[-60.15762816532769,-63.15174518685729],[-59.9662348077913,-63.154387976134736],[-59.70155170534978,-63.22153885004073],[-59.314681661503364,-63.23934938687383],[-58.82867170213299,-63.219632848437215],[-58.55724030349906,-63.17626442555673],[-58.19269548558662,-63.08976120064793],[-57.78750513582752,-63.112627473097824],[-57.372063413658495,-63.02014060617052],[-57.244501494183595,-63.02364709593945],[-56.990064783503456,-62.97449683129629],[-56.623381685308814,-62.81840393932649],[-56.40146658771252,-62.60871096280656],[-56.39433402954744,-62.42227116337405],[-56.47874310683207,-62.241761908660564],[-56.61302448799613,-62.11488414462133],[-56.887955114047024,-62.11539737679368],[-56.88732055508226,-62.19118126072103],[-57.10401920316344,-62.16596748472209],[-57.400809719067205,-62.097219595627706],[-57.633347904711854,-62.00591827943162],[-57.80313778157321,-61.97589136468849],[-58.19943217922935,-61.79585605733232],[-58.72952281895469,-61.68673055444849],[-59.164511494890796,-61.68742780097657],[-59.60416547629174,-61.788695718951466],[-59.913568802942834,-61.80719321524067],[-60.02413356054153,-61.742952136578126],[-60.07710446568842,-61.63791308376758],[-60.1801480707115,-61.58331839984096],[-60.641542796511025,-61.42510921726305],[-60.85279208321749,-61.39110921272044],[-61.38444306964383,-61.44477611730483],[-61.63916188142711,-61.55809639461491],[-61.816604984750256,-61.68454701445292],[-61.928640423870874,-61.87629697162352],[-61.92936566810392,-61.992615277055364],[-61.83244711168577,-62.14458206885236],[-61.72636114094341,-62.22885232541607],[-61.310865283634065,-62.43944678766379],[-61.07676778678766,-62.532425908151815],[-60.82142033829599,-62.53224439435537],[-60.675441827476064,-62.568385572931405]]],[[[-51.80612007410345,-64.69200994635712],[-53.08993923203773,-64.42391382351752],[-53.78094014296531,-64.32910985880329],[-54.036545836728834,-64.33004747816486],[-54.39473353745406,-64.22574957956607],[-54.77899172019775,-64.13219668454953],[-54.869479723059854,-64.08020948868726],[-55.20161608812185,-63.97871267690463],[-55.77584518009442,-63.896422084522065],[-56.24635552141322,-63.94465993441407],[-56.52117320228471,-64.08337180675368],[-56.58562969376138,-64.1661849884019],[-56.58402877073641,-64.37389613280803],[-56.410451544485014,-64.63099927021156],[-56.08582073697759,-64.82793381728995],[-56.45130192414271,-64.99976339499734],[-56.608231239265756,-65.15686839522702],[-56.944005050841916,-65.21529493526214],[-57.21978410819566,-65.35310387522414],[-57.394364805298046,-65.39011406246877],[-57.580016986553595,-65.5106940371674],[-57.65797545849665,-65.71952735180756],[-57.452702568025295,-65.88796947465812],[-57.36049878920629,-66.0050781972822],[-57.09436546350464,-66.07111925963365],[-57.0065383101974,-66.1698314476408],[-56.9364883107857,-66.3519486336408],[-56.84297391781593,-66.44812680190239],[-56.70058985316326,-66.50575076322873],[-56.60116128972976,-66.67320584006632],[-56.46229550865785,-66.79186427249233],[-56.48263159100951,-66.94226698214673],[-56.66344914173132,-67.3513401641101],[-56.66352913557869,-67.44650378523103],[-56.527014349831944,-67.5937562113423],[-56.335649198466335,-67.71654299944896],[-55.990563450919595,-67.80149021877374],[-55.67424009444388,-67.82754380051419],[-55.35888667019029,-67.91585140924869],[-55.076095055251734,-67.95954660279388],[-54.95946322926337,-68.05100707373805],[-54.76531186243995,-68.09250094720778],[-54.55395904635189,-68.09375969420691],[-54.336520439219676,-68.05735157967992],[-53.89830463527998,-67.91005658606815],[-53.76256176262195,-67.83644705742456],[-53.709720024460324,-67.76312411156827],[-53.58496155079681,-67.71155440728197],[-53.42610854112635,-67.53904097761307],[-53.23273068497241,-67.47386309162982],[-52.98226762228646,-67.44089966539818],[-52.7306859851316,-67.3386266124636],[-52.39870150770125,-67.29125712680901],[-52.101442866569734,-67.18546070982927],[-51.83359320776795,-67.1219730810074],[-51.64437749922236,-67.14724648194401],[-51.32053694318809,-67.15437175720353],[-50.80482727545191,-67.08561976062548],[-50.42623050514047,-66.99293222392838],[-50.07821389290976,-66.94369690435762],[-49.68993207381188,-66.8635314208252],[-49.35107218638497,-66.72909179838874],[-49.07519102167938,-66.65847098384856],[-48.823435291222246,-66.57033576576247],[-48.59288683871604,-66.45311388857397],[-48.46688731166826,-66.31073045348273],[-48.48712162664866,-66.22619620156281],[-48.61636175974756,-66.15936404060125],[-48.91450274101888,-66.06415065105398],[-49.271561803869744,-65.99932781206306],[-49.51986792013009,-65.86712522668867],[-49.63833589578237,-65.83385867422263],[-49.634553148257844,-65.74364393303361],[-49.801366881571205,-65.59111068724306],[-49.97394959785095,-65.51923868131237],[-50.34810195233998,-65.4850202504788],[-50.34118622446916,-65.24324169963707],[-50.71114171469799,-65.04500912967372],[-51.07891720409698,-64.90263015932388],[-51.80612007410345,-64.69200994635712]]]]},"properties":{"name":"Hawaii","ns_code":"01779782","geoid":"15","usps_abbrev":"HI","fips_code":"15"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[63.42482494774179,-22.843137506469024],[62.134048965493356,-22.949685482998014],[59.71624178541565,-23.168053705646],[58.44842101369036,-23.28622260041496],[56.32328994947061,-23.469323197838985],[54.886398371047115,-23.564773831332076],[52.891321993088674,-23.691488716424097],[51.55040943357218,-23.796020507964997],[49.59928982564007,-23.933875606776798],[48.42650634592789,-24.00937717466316],[48.450529258033,-24.089261644065356],[48.770717458289354,-24.564396155555613],[49.102318724017394,-24.72005334101876],[49.08372371399291,-25.817439323514556],[49.05084039235424,-26.522101032910896],[49.011877900519295,-28.01249452315756],[48.957799069871726,-30.251326210950456],[48.89622278911415,-32.164863835290184],[48.85108356095347,-34.29276220442066],[48.818302193000655,-35.62190957022789],[48.78443273652495,-37.17310802473811],[48.74705871514406,-39.02631852795543],[48.70202090482549,-40.67147754386478],[48.635251106449125,-42.59494673069236],[48.7921449426802,-43.57473554749848],[48.999732716326236,-44.717498063728094],[49.43300611764585,-47.10715832896062],[49.6735364425197,-48.42361093765877],[49.882096992570645,-49.57311972638721],[50.16270765860933,-51.0128586304241],[50.369966964285055,-50.85987729679268],[50.606667737576686,-50.90329047019945],[50.803978899168534,-50.882983053347104],[51.50356684428442,-50.75605560442921],[51.70578104218372,-50.86537884234699],[52.06973326949439,-50.96590372848481],[52.3552727930551,-50.93622923055497],[52.49132742407167,-50.82480865890757],[52.965361691688365,-50.77157699973285],[53.694329304773625,-50.74191771840816],[54.23228888573714,-50.64698124170037],[54.65802045976985,-50.58937999156783],[55.432677152303704,-50.40741284955484],[55.39783258270929,-50.160076470000924],[55.79163391958566,-50.06239902874279],[55.45888789818493,-50.031394843161834],[55.481780446955916,-49.94770803691703],[55.70505917138437,-49.91149978837416],[55.771391925849905,-49.84754572731648],[55.80460403066488,-49.63927232208758],[56.214461496466434,-49.42675432034854],[56.19632780302312,-49.35814661357701],[55.92121943207875,-49.32564678943361],[55.778556812210724,-49.22543362955025],[55.68925075241795,-49.003267434986505],[55.88034000699768,-48.73318016311412],[55.94204980927267,-48.5229907728421],[55.83190072065795,-48.304599446178024],[55.22214012086684,-48.11800456589026],[54.9993239741839,-47.99524438580866],[54.92200575903599,-47.86059407145466],[54.38322082321151,-47.56292172989796],[54.31851777109372,-47.46957187593697],[54.39378139464519,-47.36450033915733],[54.535192510557934,-46.9732492266617],[54.45464744590852,-46.822713026245864],[56.1957565027828,-46.71038249153672],[56.64790107899711,-46.69189861924351],[57.234163634396964,-46.639014860660225],[60.74015587389449,-46.42746089623557],[63.42185456928227,-46.250299454582354],[64.91639136121721,-46.13737095218202],[66.7738477694868,-45.98432513267169],[68.7358723309614,-45.80823604802087],[70.19629910032872,-45.69210057800601],[70.0988287079811,-45.43342027703474],[69.9775134221617,-45.33687212833131],[69.89719048375117,-45.165049048518654],[69.79360794514375,-45.12403413274162],[69.61133003072719,-44.94340793318844],[69.47351938350666,-44.9186831221116],[69.39840475097725,-44.731904836499524],[69.4410624763717,-44.61288591342831],[69.30992185918646,-44.422739972031636],[69.42431500046223,-44.26250647022132],[69.43619531077319,-44.08907089212956],[69.35505109869972,-43.900827273710576],[69.45338635393999,-43.50208746311834],[69.39364556014804,-43.3559976366992],[69.5169954666728,-42.97271795561201],[69.39159978990268,-42.81671227629591],[69.35520905914618,-42.566557615849966],[69.15926418407966,-42.46448759337489],[69.11123676274981,-42.36742702417077],[68.88032911038079,-42.19342573483923],[68.89275736397595,-42.00670145172606],[68.71454245174245,-41.745937058577255],[68.7512169315937,-41.565507746882034],[68.65979026224501,-41.34525545176124],[68.93928072988811,-40.84698734010655],[68.90039470203128,-40.77885141860553],[69.04679878793986,-40.47603173541186],[68.99475225613098,-40.28305254478265],[69.04290122177706,-40.05045850423539],[68.9047927631641,-39.816885494550206],[69.17958296188097,-39.51925946743698],[69.43923174763418,-39.416767262986596],[69.36387342240704,-39.30189926695326],[69.61684113609299,-39.27177345283864],[69.76003231829094,-39.038060405353754],[69.53244999377507,-38.83479967797245],[69.10142218738754,-38.73796241118222],[69.07190754408029,-38.61230975807568],[69.18099863135441,-38.50533539445314],[69.18583399420908,-38.04883118728757],[69.05024616124861,-38.01633300778022],[68.94965907399772,-37.66058724153553],[68.7949487424158,-37.513362231384036],[68.50631592508438,-37.33141230299216],[68.38662244849968,-37.1299010688702],[68.22542965486726,-36.979482333880725],[68.31546943926574,-36.897161194283164],[68.1530836744863,-36.76485713830245],[68.06453344133321,-36.583028957532534],[68.10750119120276,-36.481665679220754],[67.90723494684319,-36.332523181840656],[68.01915815585218,-36.248052991669496],[67.73501045815965,-36.07702956021999],[67.77312322829931,-35.889565216242666],[67.57114866541467,-35.72772811820122],[67.08924550741122,-34.3459528649659],[66.36916397872132,-32.17132347335651],[65.8480041532393,-30.583753467405295],[65.35334285155002,-29.03775810334111],[64.72273234144755,-27.019045293040904],[64.18677820422954,-25.381793440605563],[63.86179930676535,-24.354809416419766],[63.42482494774179,-22.843137506469024]]]},"properties":{"name":"Alabama","ns_code":"01779775","geoid":"01","usps_abbrev":"AL","fips_code":"01"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[77.76766199990318,-21.098173501567533],[77.75426678073293,-21.49643645198443],[77.54791349928631,-21.60968097318748],[77.33032459103508,-21.966121160718938],[77.11672510368311,-22.009876248129572],[77.11556541184892,-22.15312488188986],[76.73411842652578,-22.66393653547174],[76.75672547064481,-22.906298569503296],[76.639129636322,-23.015735619307264],[76.6371147865837,-23.14769190365468],[76.75182460645489,-23.3793444266158],[76.95940695825877,-23.423561869813213],[77.04011803258982,-23.515221311738983],[77.2746902825852,-23.596685756997413],[77.43078635522446,-23.750849203340668],[77.82177403898275,-23.839166248091946],[78.1136466922666,-24.00773603428736],[78.36350915757598,-24.258524235978335],[78.69850806944197,-24.44143728805723],[78.95560673489317,-24.433062219187676],[79.46391638633034,-24.324134103619112],[79.70526867777363,-24.4719794905524],[79.97843933083279,-25.068233410018525],[80.20265040996036,-25.186563923361813],[80.34166689680922,-25.454440223914848],[80.52559629335536,-25.578534506970765],[80.613888942852,-25.72566469617386],[80.6731931799653,-26.007748184526584],[80.8640482578189,-26.35319798280792],[81.12993022274708,-26.454673951298332],[81.47054139918431,-26.83721108104131],[81.70453535561428,-27.041139123912714],[81.83677864326374,-27.33709887357899],[82.00404776599267,-27.53737923222012],[82.19356703797618,-27.526062978684735],[82.39849400596847,-27.70369808025753],[82.86635233341497,-27.95223614877518],[82.94786322160105,-27.925433886045525],[83.33822096256898,-28.08097105081662],[83.64493880498972,-28.257316065012073],[83.66580648074446,-28.354311930873195],[84.00182986169833,-28.518504117575663],[84.13316778584606,-28.837770240274658],[84.3716238178001,-29.047630165050258],[84.42518358382762,-29.240098318215292],[84.83496748281011,-29.441211270368196],[84.98889392174904,-29.38921873185103],[85.08634800252754,-29.463836030743344],[85.37197039720114,-29.541099279981037],[85.6204247736154,-29.720686413790276],[85.80617471545726,-29.97251229967371],[86.12817336669214,-30.045464553832065],[86.28279909046586,-30.213966550997192],[86.18645107083925,-30.28823171157283],[86.23458334202361,-30.572055265510965],[86.17656638879782,-30.692677885647612],[86.3641722502691,-30.863276565938108],[86.80478811815317,-30.966188902942143],[86.73194593937228,-31.083816545608787],[86.91364636041432,-31.177336547281563],[86.83751715053404,-31.326792236681978],[87.25325486803582,-31.523147428252198],[87.45378102439234,-31.56172920799068],[87.41954835574735,-31.750934624123147],[87.59110465954325,-31.8924187165502],[87.84801022129442,-32.01345872800421],[88.21964827675845,-32.10347634741017],[88.39670504425347,-32.071392612611085],[88.73897829881193,-32.320061325671496],[89.08552792165587,-32.41064131922269],[89.21617313781691,-32.510808708425884],[89.2267965352167,-32.924966943635724],[89.36001092819406,-33.010656508890214],[89.59185600721314,-33.41465024140462],[89.78244170684594,-33.44837168183225],[89.86920971060275,-33.81365018277697],[90.01136666853141,-34.01767950660334],[89.92820325653882,-34.26499710309212],[90.07156204023303,-34.327747134342424],[90.18718227520947,-34.535663771153594],[90.0602427445512,-34.68418854893035],[90.27143018564671,-34.85995107103623],[90.72479118694099,-35.015411381539444],[90.83512668319813,-34.980791834283586],[90.98459396710524,-35.12113169563251],[91.17309004982907,-35.206388787129384],[91.52751470020566,-35.45423676089371],[91.54637862100248,-35.7139078415734],[91.74224586756941,-35.87117690611482],[91.93362878346059,-36.13252524052419],[92.16772844688722,-36.32149849381005],[92.19746016398612,-36.493092772968595],[92.09548022583003,-36.53481882489895],[92.03966933392867,-36.694800704287246],[92.28277850119764,-36.92257869808115],[92.28916397734528,-37.108529147294924],[92.41151986042901,-37.390655847245235],[92.74048511987056,-37.5061963827762],[92.94991339899079,-37.50810545681085],[93.0560889171512,-37.410001956262995],[93.43311280856832,-37.5441518906878],[93.62824435365563,-37.674450500474606],[93.8367392871202,-37.68659212747877],[94.67930476941575,-37.58765270040925],[94.70185314509477,-37.40670139069302],[94.6400351786453,-37.298535897605774],[94.87142722707114,-37.148981939445896],[95.06868141887692,-36.90640423909922],[95.23147735402291,-36.875519823794065],[95.37967397482822,-36.75134366025392],[95.51847310542121,-36.73144094614094],[95.69803900795424,-36.536056153928016],[95.7974044463416,-36.274159609441725],[96.14714094395838,-36.06559356624418],[96.31263768277934,-36.04841759220517],[96.52261512417503,-35.90893700299182],[96.5991665605456,-35.703567528315425],[96.5532749638714,-35.53812335995404],[96.64647084908015,-35.47770868075721],[96.733566751582,-35.28678634296193],[96.89488425976126,-35.16777773552788],[96.94101705353509,-35.03403667797931],[97.10771636309926,-34.945361909231494],[97.17846397358504,-34.67968397412105],[97.41131863543254,-34.50511479471061],[97.6055999765721,-34.50912118341234],[97.8643478313952,-34.424585326461155],[97.99096880404718,-34.25872894378713],[97.99698824405787,-34.106443729053126],[98.32642069684948,-33.99432916105886],[98.63379805112109,-33.962409616443374],[98.93186317470722,-33.62266491950732],[99.26917928362579,-33.39775963444977],[99.39364809154719,-33.20717288084966],[99.55579436601501,-33.11767892960492],[99.6982708000617,-32.87783373485644],[99.70399402820202,-32.71345103674165],[100.07901834136884,-32.530131683382585],[100.22386611825047,-32.362162211382156],[100.32646605053479,-32.14221578432499],[100.46831147645078,-32.08062355498314],[100.59173660062643,-31.890075680857795],[100.86551800118784,-31.730823666943355],[101.0164286325808,-31.325933756915372],[101.21964965479955,-31.239804895931062],[101.30920024724287,-31.11151679637032],[101.72918863449453,-31.130454397475827],[102.00348019487421,-31.024178974846787],[102.17605983822094,-30.43078496215162],[102.49204761698108,-30.270899462307916],[102.64006513030252,-29.975018483681644],[102.83522076458704,-29.74171307121525],[103.09618084910917,-29.577797005342628],[103.14034521143928,-29.382918270210553],[103.05405849017187,-29.226863790315768],[102.81768031610052,-29.062464519482994],[102.90089157096752,-28.678674733089377],[102.85251233005795,-28.273678637298058],[103.04999868843937,-27.678015607980146],[103.25004786785694,-27.4378838814433],[103.39583487969439,-27.091723086756065],[103.705807722573,-26.564206651289656],[104.0098252329385,-26.133235261070368],[104.2487976440452,-25.846225756327105],[104.6567648314145,-25.467055320795023],[104.9511165996769,-25.27677729654171],[105.69307225187308,-24.91272972026431],[105.40117888217257,-24.708122819895326],[103.10652524368457,-23.202153899823763],[100.87552246584264,-21.72263667713465],[99.80313947923015,-20.968647948800808],[97.66448117592878,-19.54485992163963],[96.52140585755068,-19.72587535823846],[94.85485068809201,-19.949101301421816],[92.59327679921813,-20.262130757251967],[91.21852622673208,-20.455934849124137],[91.17402040784998,-19.668496158960654],[90.10370166259662,-18.64964472751929],[89.56569638481284,-19.1629070117072],[89.45331332283322,-19.057711426268757],[89.4289751055779,-18.89812580740435],[89.54355730230722,-18.716074856125555],[89.42041877728808,-18.49208438271667],[89.28791200555077,-18.469962457072576],[88.16212841965874,-18.57010609902441],[85.36681253852011,-18.84628112577993],[82.88665366675997,-19.098512787368833],[82.34405023738721,-19.132073993844468],[82.11956506308252,-19.227365294115078],[81.84968370378266,-19.26177769357911],[81.66858445601012,-19.118222140377366],[81.51728719606,-19.25502285294858],[81.47618306968162,-19.43499789034963],[81.15918553585999,-19.469127537095684],[80.95475387493408,-19.619568609007953],[80.55575609541307,-19.801196089617928],[80.31430482487133,-19.874198937540864],[80.02934145350153,-20.16091274715415],[79.8640165473195,-20.19105000032777],[79.67959964279204,-20.39205010459256],[79.54104542573003,-20.291097505830503],[77.76766199990318,-21.098173501567533]]]},"properties":{"name":"South Carolina","ns_code":"01779799","geoid":"45","usps_abbrev":"SC","fips_code":"45"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[125.33173354769006,52.03404327888572],[125.18900699574655,51.882384098377756],[125.3636186834371,51.78973446362172],[125.40831832817523,51.67403230509751],[125.548214198375,51.587469675014354],[125.38135667103712,51.36720553646322],[125.40867600817954,51.237889262660836],[125.32245036898077,51.122853272093636],[125.367813188991,50.992165806777436],[125.17162546282515,50.809161344406526],[125.23901951910437,50.70536142152174],[125.45043604702781,50.59289225179665],[125.57212419656433,50.424495215287685],[125.70063048091207,50.40036000998462],[125.81297086674402,50.23856321728435],[125.93783421550377,50.15071012731711],[125.90221522830652,50.06459919136289],[125.69348470452633,49.96112771919476],[125.85257381875628,49.91032726264964],[125.7891253550237,49.80351297573415],[125.8152231575149,49.658401375318405],[125.59671806579415,49.49615124240602],[125.59631771035129,49.40880507686415],[125.3840327610332,49.213121809186894],[125.02064189162161,49.10591180913796],[124.94206544110659,49.00575882882672],[124.9931357948419,48.89895302154721],[124.73706182178657,48.748829688101324],[124.54656576542033,48.7730592594782],[124.45644099816184,48.70548718658891],[124.20041581004547,48.66141201360286],[124.04393421779352,48.55046273255042],[123.90867908538934,48.36132182830789],[124.04852155777398,48.1499572164835],[124.0469273540822,47.90634342237279],[124.21070332745423,47.78167677619729],[124.40252637776258,47.43647531789678],[124.25422819574872,47.10094029802606],[124.14151819876415,46.94883354139368],[124.29636003882914,46.78801907807668],[124.22590761390973,46.726351074009436],[124.25411853016107,46.583846520969026],[124.13944046153603,46.480856998586674],[124.04043490842754,46.22318448337693],[124.14390919066214,46.01198017862321],[124.0075191849875,45.66873673062816],[123.83581189871776,45.56200979008499],[123.73745637493076,45.34504496844419],[123.79235453696997,45.21296816653346],[123.73067640800826,45.03909139773924],[123.7886275140211,44.86132427101542],[123.6124206649462,44.72298518283338],[123.63571065571405,44.51873948611975],[123.5988694690055,44.35342773422813],[123.7277710469728,44.25881595828186],[123.70714929443511,44.150409314464284],[123.78470343005151,43.59935995824878],[123.96235460675688,43.362995052711675],[123.95295584720955,43.20129271477746],[123.86230677666292,42.981052646423045],[123.94050151765924,42.75611956547159],[123.89897043240951,42.701232446064296],[123.97879115123585,42.42791772353158],[124.12712459109257,42.30838041292245],[124.17060954647097,42.15868028858966],[124.05750805661215,41.974904520746655],[124.16453907085881,41.79942874411229],[124.16944201792201,41.54436905567323],[123.90492970718502,41.39787591760065],[124.0107694644384,41.21076467185411],[123.92450323100823,41.0119087849881],[123.95902767134878,40.83735235619776],[124.13260561355408,40.602273179286264],[124.53485878686337,40.41529462394155],[124.67748134534378,40.26871438221356],[127.10913044492565,40.66509529319471],[128.3079787364996,40.86702867882627],[130.60229296226674,41.26506978079449],[130.76325481059618,41.5511971055586],[131.09301949146953,41.58925773277427],[130.97305747690726,41.85961794277567],[131.18550194704338,42.07149972584161],[131.556750164767,42.06213602375717],[131.6241714665097,42.36609085118271],[131.9304623232988,42.48128836477813],[132.08044996870242,42.59652398347294],[132.31106363347598,42.63095823449987],[132.5370425505697,42.55804447336694],[132.65525667769688,42.64258016485941],[133.08113474723828,42.74191225455039],[133.02466486664383,43.023981480278195],[133.1298601613813,43.19814942237109],[133.28746236752278,43.08663736832078],[133.6580433061861,43.06235463890404],[133.8024057151763,43.117289299673445],[133.50461598872863,43.39301706060676],[133.38528186482586,43.40949505195338],[132.92882946984196,43.63620547690788],[132.84647749066417,43.781724400112964],[132.6912137113554,43.74252848759796],[132.16161201109176,43.91407521243357],[132.07699371185493,44.01008335854328],[132.02892051401375,44.21624948199154],[132.0497060639114,44.42067874957083],[131.9804553054598,44.48234578019346],[131.73619200591207,44.53917494309881],[131.50089949387365,44.63843816821173],[131.23340351555717,44.85712999545492],[130.99778022049136,44.88233574425018],[130.81190298194667,45.182143361930876],[130.89384260381516,45.33108190998469],[130.75014295628958,45.50390283419896],[130.7793998108097,45.724626696686386],[130.73445505052513,45.883425870280774],[130.59020296993518,45.953526631356866],[130.09957912864883,46.98578778838331],[129.7541540183064,47.77752620369343],[129.07559413754984,49.249425366936755],[128.50456482599188,50.41392642612356],[128.19306372375905,51.05609949177426],[127.52772604687412,52.29229693861835],[126.95585557464001,53.3574094667694],[126.8216338942304,53.577974960451336],[126.76366101518362,53.55458597675502],[126.69984000649968,53.29427489844497],[126.4812266921463,53.241469130106594],[126.21110186908608,53.23511197901603],[125.80078983961458,53.38727871751414],[125.65778203398038,53.250236300748355],[125.53954704398605,53.20736824286408],[125.51956022248943,53.10617683675783],[125.32435790978728,53.01847804800431],[125.48920293391402,52.91229906338089],[125.41969117048744,52.617213956959674],[125.48155070773068,52.55023903501866],[125.35729036726057,52.356514868204286],[125.28279590105147,52.32054163291843],[125.27465452654269,52.168676749761715],[125.33173354769006,52.03404327888572]]]},"properties":{"name":"New Hampshire","ns_code":"01779794","geoid":"33","usps_abbrev":"NH","fips_code":"33"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-38.42089975162439,31.046166356157094],[-35.435470206022416,30.835870855677726],[-32.40168420170831,30.63817936807173],[-31.038509520669585,30.550494434731803],[-28.449178181411146,30.39699461505357],[-27.089082874793526,30.323986620631644],[-25.900603997596086,30.242488249781623],[-23.802568877144278,30.150390325038412],[-22.038078009167002,30.068388709065175],[-20.164288154664945,29.99437226334395],[-17.6157680736938,29.889274176661395],[-15.55126541776475,29.8150479264762],[-13.268451237170234,29.745366861077578],[-11.660156498285353,29.701273966984807],[-9.653284017760964,29.654230937140433],[-9.50099789307368,29.332200761821905],[-8.8607365743802,29.025387582130133],[-8.777326799110496,28.933523733913088],[-8.42826650254188,28.85005942414416],[-8.232035974124473,28.712446506538623],[-7.766264756361203,28.50082381434388],[-7.4281209911331345,28.241304006588752],[-7.17118774488943,28.117616105344137],[-6.827029462407007,28.165026422850907],[-6.515735936773009,28.453114904710162],[-6.441649665071563,28.71322255187798],[-6.210809280007701,28.774107298356764],[-5.9170938643394235,28.64825178890919],[-5.461083639749054,28.593541454411834],[-5.029074572726973,28.688483048409903],[-4.812902988400563,28.617458701532655],[-4.514906571215436,28.682037559255566],[-4.174435585525769,28.605824498781104],[-4.0578175763258555,28.722707899585146],[-3.664414575101721,28.65452570246484],[-3.4838930889274944,28.7261048816832],[-3.3976597693743695,28.64887365070716],[-3.182958437002049,28.645645775429898],[-3.0252969807448653,28.57913684441256],[-3.000313508323079,28.370422582929802],[-2.679776646177394,28.26265765809505],[-2.5751325356643417,28.109584928693156],[-2.27106218092595,28.11131377219759],[-1.7893199040689165,28.029378719726797],[-1.634919889410364,27.770330691146093],[-1.4204706910430704,27.859832217640847],[-0.8925890481803961,27.666987242256493],[-0.873494259763609,27.463761649225187],[-0.6754029460769706,27.397003133666814],[-0.4872750187000615,27.426893516824006],[-0.2775917097526164,27.33785558119672],[-0.40166750811082036,27.051386278565555],[-0.2779742136903237,26.86564308418313],[-0.023655380726697754,26.689321546245615],[0.03755105341655823,26.442517699830056],[0.15464266536529156,26.38321370115526],[0.39407977125824806,26.484244925053765],[0.5644421654734105,26.417835325608497],[0.6875945186650881,26.240717939910198],[0.9797148313671948,26.290151267204052],[0.8140146479040917,26.293324685638794],[0.7574131046799324,26.42399264068566],[0.8175569541155933,26.71064917228056],[0.7189188335162018,26.867517212648057],[0.6161682349632844,27.18702234673124],[0.15256911964913314,27.646545803127932],[-0.0016972328994087971,27.893991437966044],[0.08213229121287764,28.165535481577717],[0.16691332051285304,28.1663513037544],[0.30278406873266805,28.450337450210387],[0.4752751199019332,28.58263631255613],[0.4672843283971302,28.735863160017722],[0.561890842501714,28.880881392118077],[0.535985504287191,29.074477491339405],[0.7161814669670364,29.263133762233068],[0.6052142084093701,29.39610236293982],[0.7559970892605764,29.58443231871838],[0.6428110839582256,29.708872668579083],[0.6596407663446835,29.831417809932784],[0.9199219472441345,29.920861497313965],[0.9556703928478859,30.12560147114146],[1.0470511928489967,30.264623530931733],[0.8775692426131096,30.503717755218386],[0.8427305450413489,30.896224917036143],[0.6315264133443401,30.871561020887267],[0.43671930562883743,30.92690109817087],[0.4673359030500558,31.06016526543672],[0.2772439854721544,31.216665675980906],[0.5991479647471554,31.44992268497563],[0.545914904565765,31.600549581931844],[0.6165576081197521,31.90549134608896],[0.24916933435598632,32.189203503642396],[0.3070273418123105,32.39241010350416],[0.22204198333311617,32.596672999517864],[0.9736110818548098,32.59276864128454],[0.9866839303716597,34.51691591908545],[0.9908102533559819,35.70438669139522],[1.0060031697166245,37.29603995997629],[1.0254307593061216,39.62595555897181],[1.0300071007365206,40.95710531814725],[1.0358402860510656,42.755734607790174],[0.8575392048559706,43.05080426826421],[0.20514760875891433,43.32315258388948],[-0.09867698255165118,43.33304691900658],[-0.3511788475970739,43.57535599220275],[-0.5078223321922518,43.90089280205305],[-0.9691692084629064,44.34082289250518],[-0.8757390167105714,44.55470908712366],[-0.47761668139843577,44.76146543799582],[-0.4323716392161333,44.81200458148526],[-0.04343724809158762,44.97939948706171],[0.12509091839790584,45.178714668518644],[0.4067097066126685,45.41773359298238],[0.45037641880835183,45.537580066223924],[0.5081726085095676,45.99068655467205],[-2.7805528354880926,46.01281168094331],[-4.055748394564249,46.024048986448896],[-6.767051825159562,46.06220706721373],[-8.683204064720615,46.09681846028056],[-10.381834019830912,46.14020928244068],[-13.062862931282208,46.205610516292694],[-15.365269208643562,46.268471281033364],[-18.08146365896906,46.36020675461896],[-20.27619857183955,46.434380822887896],[-21.717346212991128,46.48454771410048],[-23.59819515891553,46.55756959667688],[-25.410848982078694,46.633709601812456],[-27.09753913918916,46.70807056729681],[-29.19599669078322,46.80477536701994],[-31.343564572368198,46.91069195222916],[-33.25309958547422,47.009638280102415],[-35.1141936051611,47.11021496440881],[-36.601311095276046,47.195627540121286],[-36.704904486512795,46.243773439609534],[-36.919407303376566,44.36501718168924],[-37.13811506639031,42.489656404850585],[-37.234577658947664,42.42305144937504],[-37.29964610900672,41.77605794596337],[-37.51612977447475,39.848442779957004],[-37.67532564637129,38.3695839830172],[-37.823232677634316,36.95800419534266],[-37.982732639546064,35.464426137922366],[-38.1776121869848,33.557716725082756],[-38.42089975162439,31.046166356157094]]]},"properties":{"name":"South Dakota","ns_code":"01785534","geoid":"46","usps_abbrev":"SD","fips_code":"46"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[27.970598476146584,12.565960353874365],[27.75308706531505,12.303522114402103],[27.610344031279425,11.844557638254571],[27.550389469814935,11.546046008571679],[27.534549053524504,11.13719401739156],[27.56444267771727,10.767870397305137],[27.702545280998812,10.287555540040804],[27.681209506801867,10.137747949000373],[28.123404112927346,9.294891704550018],[27.990125695463256,9.025905324044874],[28.0786803185042,8.773145257066087],[28.400474966662724,8.561717614446039],[28.47725925636208,8.442597133076251],[28.476256380166095,7.987561279216836],[28.594084773934274,7.860833623062233],[28.996240447887615,7.561040970806828],[29.30060879305578,7.231864118550506],[29.50853919258213,7.152986882366935],[29.618416495330436,6.870929779026695],[29.735044152758707,6.739881809472998],[29.99532700333498,6.70448369864561],[30.2111355749887,6.397841751130604],[30.22910675029438,6.251705051955103],[30.37027904986839,6.0748731676913845],[30.62232227643527,5.905330144447368],[30.9285860356661,5.776465569528098],[30.96001931804774,5.701955121835456],[31.45002942670855,5.391884044049794],[31.75899223967253,5.151757289241015],[32.00502900057115,4.848644563872421],[32.14519068565356,4.753900822266205],[32.28111764542598,4.070624550043868],[32.41429428168557,3.8247399590854143],[32.45586847733624,3.6122456103341194],[32.301808411628,3.3660482612222036],[32.51085924620584,2.9225356272140925],[32.62594701233995,2.4419998236286844],[32.85952912852419,2.173091014162095],[33.118583329741185,2.052533789477337],[33.285100258949356,2.1026185380300904],[33.59166649872845,2.494096261741557],[33.65981466020491,2.7357113002479063],[33.77292937954032,2.806660024422795],[34.09517875377449,2.762893490631699],[34.56688244587193,2.5390291894029957],[34.893793192301665,2.524281529736155],[35.19652614924403,2.3141805420177732],[35.676229943629075,2.0672172845215946],[35.64533639356983,1.695607378241656],[35.418591025902316,1.4984102384763298],[35.18914948216547,1.0467375572229356],[35.347069733752335,0.799636529382131],[35.41165728591256,0.4446227590576482],[35.352025252055086,0.23864002110531032],[35.193303330257585,0.06379486462909392],[34.991072511469454,-0.3432457992380856],[34.88649868374687,-0.983727517106635],[34.62099596384176,-1.323111163499892],[34.48198564050713,-1.7262621055774032],[34.494358875300264,-2.084892075500455],[34.59709503409951,-2.5239826747154055],[34.74636276096354,-2.746667764471987],[35.08917524183904,-2.958909486586947],[35.287899869794096,-3.2742998765646374],[35.69695273325673,-3.5554730215201245],[35.93016980460167,-3.59367799353469],[35.96299347922159,-3.740568875963845],[36.16100221498926,-3.9040548175269496],[36.31554701140561,-3.897209060466638],[36.767969849940776,-4.265681565519528],[37.027353517918435,-4.183547281274452],[37.09009000177457,-4.342206807635736],[36.93649962721861,-4.410408406325724],[36.86460671966089,-4.563551212570213],[36.996435236268844,-4.806225486318696],[37.308884765662164,-4.8847145614090985],[37.590733140532635,-4.617383825116188],[37.85485439361129,-4.773318841766313],[37.873904100224195,-4.9115369140054685],[38.20202567718062,-4.999442158902918],[38.67358633195593,-5.404133406871772],[38.644363669994426,-5.5931973659844205],[38.75364570624236,-5.6919807547863055],[38.9269055789515,-5.649350235074406],[39.13833014171012,-5.897773457139166],[39.466657423953066,-5.982018687893724],[39.54951614780897,-6.069131216250661],[39.53942683775235,-6.387838600831967],[39.779763474599996,-6.675255212690824],[39.77242892103263,-6.789738004523492],[39.55645754554342,-6.806046530677747],[39.598398839270466,-7.141389640626316],[39.88541418979997,-7.616545556390664],[40.075774599597864,-7.812982268303306],[40.2026884640639,-8.113536167920964],[40.14274888220047,-8.47139187412875],[39.92997923735485,-8.530721060461332],[39.74487955957955,-8.713913951717359],[39.70946597166495,-8.916100974138994],[39.88680553721259,-9.153249812396679],[40.07110951686211,-9.202895966082833],[40.0698265933911,-9.509859894345103],[40.30401248043611,-9.930013777625792],[40.589221667866525,-10.220778506300196],[40.611191166619314,-10.60214862159497],[40.97656780970497,-10.774943523072466],[41.12791514279512,-10.910383754522526],[41.27153438386131,-10.871231135183885],[41.31033057384324,-10.732387597091643],[41.04913914505725,-10.541321363028842],[41.00087425362418,-10.369483913465693],[41.27244728804197,-10.390236243229479],[41.61357150026111,-10.687290100840675],[41.697242880876125,-10.957021532433703],[41.826595902865876,-11.016634258560076],[42.02931500882346,-10.918906030870916],[41.78381827182473,-10.72787874851618],[41.73721541108819,-10.402125897914676],[41.853271116001636,-10.172474571702379],[42.07894873114586,-9.942875847622618],[42.1639978989253,-9.667966158783692],[42.48848369015388,-9.257722656335533],[42.79314180400813,-9.101957917229958],[43.032101013386864,-9.101703499874672],[43.77648829927588,-9.328209640392634],[44.17867863776386,-9.601607640386982],[44.35843058719464,-9.604471764723097],[44.85826250413755,-9.757867755673818],[45.12625419785735,-9.996845105429225],[45.413328951765784,-10.072663521000408],[45.640294894921276,-10.04456251436729],[45.815622275766025,-9.8859714142936],[45.91787353570153,-9.42098393972327],[45.75693544750846,-9.065370385249542],[45.60254003695765,-8.947257817623777],[45.39380542789744,-8.692004610082389],[45.34344807941107,-8.428668023050928],[45.45976024133149,-8.119175014291962],[45.50330533431432,-7.738202210418276],[45.601781166226445,-7.6009021906805785],[45.82743792920726,-7.474756343348786],[46.08425930247977,-7.619102111942188],[46.38167444919353,-7.316333257222748],[46.55767069569592,-7.214037336915845],[47.00909677537968,-7.128166600244739],[47.345863499888836,-7.019394247690165],[47.64687279764775,-6.985966998277556],[47.74562385045744,-6.7509642364443385],[47.66984517735192,-6.581061021255934],[47.299844757360155,-6.284107149744111],[47.101374447629226,-5.713062244149514],[47.268208107772274,-5.3317217230174405],[47.54581286475388,-5.11939235467411],[47.66159751815512,-4.954539060953149],[47.75277772066269,-4.629128611576485],[47.32389073339251,-3.9837531181143886],[47.77648238850776,-3.9375163695114326],[47.60804075973208,-3.508579672171381],[47.73111260799551,-3.3482564858463886],[47.578339694295,-2.964227259776972],[47.92796839297162,-2.681625695645843],[47.94412416275669,-2.4413104366661917],[47.710114569224636,-2.578265115288926],[47.6516309981103,-2.441912300830186],[47.859730003712386,-2.3738850027284304],[48.01541404721793,-2.2396517702458247],[48.18150978297955,-1.9706020803951665],[47.83755281030384,-1.7886308528143078],[47.732338310116866,-1.530974854153102],[47.95611549451001,-1.0512157947154845],[48.4429679600332,-1.134729721943118],[48.53945704874203,-0.9511673082285726],[48.51392337114073,-0.7691104487419872],[48.6373061639245,-0.48164446652757226],[48.75061028503341,-0.4366443897877624],[48.94987654741273,-0.09322169384806234],[48.9986931962876,0.17214657945662074],[48.905006547623934,0.366742378437696],[49.21932993198439,0.49957058674164023],[49.36450431088716,0.7279712901985141],[49.27296701199219,0.8903286762231071],[49.5149113042863,1.2072036819606522],[49.468832503800726,1.3558069404046516],[49.597404031999794,1.7869763284620956],[49.93197964942109,1.935548542491193],[50.00349912242538,2.0535533630211606],[50.076888261593616,2.6976547013144785],[49.88686364083716,2.91131688302663],[49.87176969302376,3.136902377793636],[49.721174090986125,3.2066776512288575],[49.86151511581071,3.668762472073883],[49.871676246471466,3.9106386773825412],[49.77309266998525,4.016720332057655],[49.523909232635894,4.092053700206378],[49.48289164043679,4.606396898628047],[49.20283314946597,4.920284680090491],[48.96235906947449,5.127554262332134],[49.14430997059769,5.503714755310231],[49.31997509983352,5.622563050220832],[49.36556383157906,5.795905272948319],[49.31270356480771,6.016371282395683],[49.17713718055547,6.040183769990792],[49.13952651722871,6.402431572243366],[49.21672851797439,6.572684821286265],[49.520403689753394,6.7004872988201685],[49.31070145507213,8.961518549061534],[49.173895663005894,10.437359082423045],[49.011790864184945,12.3200491362822],[48.80804737440423,14.851532353645092],[48.59910520831439,17.127534813646722],[48.27943715286203,20.454793349799054],[48.018170751464694,23.332301666346563],[49.679014135709465,23.478096303583097],[49.888893951519776,25.701324301721844],[50.17036245745686,28.272522495195947],[48.322146643868074,28.12324540306667],[46.094012221873825,27.940797548044877],[44.64527192640692,27.85150127751966],[43.0368092951476,27.727890656163375],[41.79131926350792,27.64416347903055],[40.88024096510782,27.563380049999616],[39.90115985006474,27.523315905967053],[38.48718337071383,27.446401710559925],[36.36120355580179,27.360233404879427],[34.872672187369986,27.27789428285057],[33.817156066254555,27.23623740197722],[32.52155476900662,27.157648369977238],[31.295089013593266,27.103713553000162],[31.238774894436055,26.909980971738158],[31.401730562651206,26.792452384559123],[31.68855525640139,26.69655185609229],[31.781137603626053,26.536936515264184],[32.1970778043148,26.352465551919153],[32.546995621867126,25.974108173277305],[32.48493503664864,25.710261660954345],[32.55802522288108,25.532606542320565],[32.71803436183088,25.35276129240763],[32.90539276372555,25.23251880593415],[33.0575809473437,25.21209721546635],[33.308682924858275,25.081131280528012],[33.70107261395784,24.932052726100277],[33.752926162562744,24.79295944761995],[33.96112884442261,24.711622059268127],[33.985677059097995,24.224232994914562],[34.13111147047373,23.97713974016284],[34.03362203816671,23.69538498894794],[34.10275297853448,23.338374571032507],[34.029469247333004,23.134628476581568],[33.96729280159735,22.645126958357146],[33.50508952601178,22.38105540643515],[33.3246283480023,22.15160764260727],[33.35275185214712,21.920954904563114],[33.2480365337831,21.78100888762084],[33.21485293037075,21.561036595438722],[33.241314928432814,21.16602232186575],[32.88296702432376,20.995021118956103],[32.64346330930041,20.700649369313776],[32.43835120290535,20.652440553917316],[32.2217631840786,20.69531402022547],[31.94063593612805,20.578506094628665],[31.89086235531989,20.462564750467866],[31.63968313260905,20.232535487571933],[31.211773733602158,20.128967829312874],[30.627603492029152,20.131956465701492],[30.1996188546565,19.882655087882544],[29.95910527223696,19.956037810144462],[29.68416366348127,19.872156259781267],[29.58086724190003,19.77324281077238],[29.506982764331266,19.493999419117767],[29.483761505554654,19.09451675296415],[29.29037097519139,18.673228141666993],[29.304233847993412,18.598668856072756],[29.565797507109487,18.34182757968159],[29.70591686535596,18.122829400017558],[29.98773533035041,18.063118753208347],[30.241938213207177,17.657959488272958],[30.286237237464704,17.24776928766923],[30.222515092504867,16.866250512266525],[30.263668521415465,16.719882916430684],[30.217938814064023,16.487821539057304],[30.03438274878378,16.362182304230387],[29.802887576427242,16.07549491878837],[29.544667099410546,15.667984324675128],[29.581399112496577,15.429929983949672],[29.476082300047278,15.06556800098195],[29.468204816394206,14.700403323410459],[29.13555562691834,14.440108723499003],[28.80005664167075,14.427838018828597],[28.471422315392395,14.318855468603386],[28.21246455185492,14.144271893315615],[27.98455107858742,13.720238274759327],[28.19448744364804,13.518934926923027],[28.226689371041754,13.321694288390757],[28.15251370108082,13.067913543927235],[28.20097398703783,12.67290571879121],[27.970598476146584,12.565960353874365]]]},"properties":{"name":"Illinois","ns_code":"01779784","geoid":"17","usps_abbrev":"IL","fips_code":"17"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[36.260561391102065,-24.877537699148828],[38.75317263796547,-24.745703342726046],[40.258224286720186,-24.649799483237803],[41.01773218852917,-24.611012558355778],[44.26210350594579,-24.39394927370547],[46.024117971988375,-24.267531323959787],[48.450529258033,-24.089261644065356],[48.42650634592789,-24.00937717466316],[49.59928982564007,-23.933875606776798],[51.55040943357218,-23.796020507964997],[52.891321993088674,-23.691488716424097],[54.886398371047115,-23.564773831332076],[56.32328994947061,-23.469323197838985],[58.44842101369036,-23.28622260041496],[59.71624178541565,-23.168053705646],[62.134048965493356,-22.949685482998014],[63.42482494774179,-22.843137506469024],[64.22481316338741,-22.773006512299627],[67.17860657418238,-22.428840514878786],[68.0052751159567,-22.341512169884833],[70.80794660775955,-22.022139403687262],[70.78013527605904,-20.42262712792637],[71.19363587985673,-20.09888826287473],[71.28636332833409,-20.240498857757924],[71.80726018014595,-20.126623929961557],[72.08601286085427,-19.979337277642035],[72.25281681177728,-19.73571687261687],[72.15691262548265,-19.632411882319726],[72.11366212200812,-19.432278014661847],[72.26903446098035,-19.250599834492935],[72.19072706567347,-18.983479212667564],[72.2940167715854,-18.776010950734474],[72.5806237804252,-18.527596585806677],[72.72067271591253,-18.479552543278935],[72.84983267637566,-18.18039793382296],[73.16890276569633,-18.09560005392199],[73.44087375362479,-17.797854600626632],[73.80299737484795,-17.708775711240595],[74.18336181424016,-17.681023212207137],[74.3946220840787,-17.568061733975682],[74.60999847004605,-17.62575119429795],[74.99914504694023,-17.597663380125425],[75.25236438737383,-17.227391972746734],[75.39097166446678,-17.214063894240613],[75.67595312733447,-16.986568470449114],[75.83246731109061,-16.780678290474853],[75.98234483070084,-16.83803252128131],[76.26281747738909,-16.51413955696742],[76.31015168279156,-16.292342169264085],[76.61976364791266,-16.230292010259646],[76.73643134638608,-15.970761853424147],[76.9569200441073,-15.932526071412093],[77.16981227974762,-15.74213215653247],[77.4134027908399,-15.724460954450267],[77.65695412693587,-15.79207944113862],[77.76582550017623,-15.680847128324512],[77.90047033017278,-15.392192080113109],[78.0411421049874,-15.261513535172467],[77.98999758402479,-15.079884072286097],[78.1164215516622,-14.992777311721785],[77.96485535282152,-14.65327606904387],[78.03960105961819,-14.534811458817813],[78.30111178615611,-14.469000711002598],[78.50511882901215,-14.634074815624682],[78.66187057697778,-14.401153539948341],[78.67902925519556,-14.056082927897332],[78.99854096265719,-13.85027273728808],[79.1504335599222,-13.67978143611453],[79.40313409862831,-13.497373159775439],[79.69593975882711,-13.695893519371419],[79.61081120537588,-13.980288460825545],[79.64688316068334,-14.159268265762535],[79.99671370673715,-14.133149139246257],[80.23393131635598,-14.005751668953037],[80.45662713460545,-13.761453568622331],[80.66532261114435,-13.203138569276398],[80.93984846889012,-12.933558718633298],[81.05091234975818,-12.920026699228305],[81.29561465644734,-12.738581505535397],[81.54846287407379,-12.736043618159655],[81.69544942474501,-12.5155902329007],[81.92199610680164,-12.603263486939836],[82.07293971992274,-12.529094547143306],[82.22461971189247,-12.827543935784893],[82.50781494620364,-12.772666077619327],[82.63105675792296,-12.610773477836428],[82.75639459559704,-12.63813099633056],[83.2691216057478,-11.270372895921893],[83.41721245083406,-11.165519230563826],[83.53031592193645,-10.98074478288423],[83.8315144804208,-10.784412401161104],[84.0362864302466,-10.895395765013722],[84.29394183684099,-10.792006350522591],[84.08839031245184,-10.35813774402632],[84.1941169828441,-10.272177327029064],[84.19184742824443,-10.039917846102876],[84.291105376638,-9.935082742902816],[84.23882940208316,-9.665401598348202],[84.14376369207609,-9.467066392202401],[84.27023539876669,-9.208502100457075],[84.25923764886333,-9.07272836103646],[84.40452888412263,-8.879944664676708],[82.85350448747016,-9.079908288255261],[82.81238206534643,-9.244105793510057],[81.2580462916417,-9.458633999196023],[78.94780690658617,-9.801192376388617],[77.4574389103767,-10.009527111662164],[75.35966547147387,-10.28904611852714],[75.2700694672899,-10.270181350235596],[74.01365918116866,-10.441966429495706],[73.02334235874751,-10.544509541001828],[72.95366851364929,-10.683262726635917],[71.20731257008325,-10.852074693557537],[69.67678437068923,-11.027483651302115],[68.15845717406785,-11.177381491510737],[66.52050520967916,-11.310982681544994],[65.59971978160024,-11.327897695426806],[64.9323617713904,-11.36207516026762],[63.98470689497909,-11.440150415789597],[62.72830165157747,-11.663149991115743],[60.85701629171012,-11.811740760233763],[59.719926572330074,-11.868852432167538],[58.01928238637695,-11.914084599832119],[57.02593371357225,-11.986327833361251],[56.72080896102133,-12.149167446352768],[56.56265647150839,-12.031084133202356],[55.75110072716155,-12.13438943665952],[53.85766250846292,-12.355659161535899],[51.57730213141181,-12.57704119334925],[49.443381790852385,-12.811263144609578],[49.44587290025221,-12.595743987691096],[48.51913038772314,-12.577523531127106],[48.189066083949264,-12.597049114876269],[48.37933805421208,-13.111243738217775],[48.488071769444275,-13.567056167330225],[48.39543920188501,-13.854921417724952],[47.46908842331646,-13.910085630879616],[44.325282615160006,-14.13112865220876],[43.259817647180355,-14.213390531012664],[41.32384165869534,-14.313157164605284],[40.66930026821994,-14.415031520710084],[40.48236603709288,-14.687612295964634],[40.352911368285525,-14.719945412565714],[40.24501954933335,-14.602289103261224],[40.28382366690882,-14.451419584142306],[39.97868976983181,-14.468523305765057],[40.093492288278085,-14.595557770587407],[39.999127539218755,-15.01045492484409],[40.20700537518413,-15.320538326404073],[40.09839005908344,-15.566865293651219],[39.649903738017244,-15.587816549931453],[39.65864933137292,-15.805091721972541],[39.85809927161027,-15.936332912593821],[40.104657518915964,-16.027712840387068],[40.12450608924756,-16.165485762720365],[39.696246084332905,-16.28688155082066],[39.46178823807437,-16.22292334920965],[39.211571148892276,-16.22450657564741],[39.239661444137276,-16.41529190435378],[39.752771828483624,-16.754333657747686],[39.85218016980386,-17.03433569605153],[39.379498527778956,-17.38998800438465],[39.361472033225105,-17.72441427532786],[39.26500269064257,-17.957629768053884],[39.115908061472275,-17.969574673603287],[39.24887367351738,-18.22843424928867],[39.59084101201864,-18.452247484392093],[39.67288079515994,-18.65927749986791],[39.55521562762062,-18.748149145098164],[39.26441551619333,-18.606670578351885],[39.106143041893446,-18.61380612200213],[38.9476715714111,-18.831455263700974],[39.021402722705794,-18.956595843834705],[39.32888383148892,-19.062421925099763],[39.365949756733215,-19.191680430608812],[39.15951272632336,-19.29975046608843],[39.061378365848924,-19.272920323047632],[38.8527203735984,-19.406053892008003],[38.729052934177005,-19.65799362889604],[38.41349327656696,-19.78248915193974],[38.23560969059252,-19.668804638554544],[37.996704094847125,-19.827145578212868],[37.98724728476727,-20.15220621789405],[38.152583174630315,-20.356451297675484],[38.39841144349679,-20.377747533512476],[38.55803872871316,-20.268823195331972],[38.58136726845251,-20.496400586696577],[38.358878696042865,-20.64193958495011],[38.07419559280895,-20.758770204982476],[38.02303755334256,-20.860374185479493],[38.10426561595151,-21.01663468287733],[38.31243911465389,-21.090338856633778],[38.28478865066546,-21.32479806979053],[38.127175717141576,-21.29889929278476],[38.04842054868656,-21.16624025531676],[37.85324140468391,-21.041098520946136],[37.571176129617825,-21.135606060059928],[37.52338128652198,-21.357937952445372],[37.57405907457836,-21.513092302783054],[37.7263183897461,-21.68704483404015],[37.671510792708254,-21.940665300707508],[37.46262166930792,-22.083158969773432],[37.443660476723956,-21.6920482950006],[37.34945703098811,-21.62032547379543],[37.15117138324114,-21.698587389498243],[37.102443208103175,-21.8781377905487],[36.88442095620468,-22.022511217501044],[36.841011578323325,-22.272152299898227],[37.04586882916092,-22.24442241769457],[37.041870610807564,-22.110666064024144],[37.20283488117142,-22.078464961862007],[37.44141941587227,-22.244726330510037],[37.27375185695396,-22.527782607500786],[37.28050706059203,-22.781276677289313],[36.9692624583171,-22.857956826279775],[36.948076629050334,-22.972226200968645],[37.054517774448634,-23.11944261569013],[37.35974313717196,-23.132544482233914],[37.4859820298953,-23.27478038661021],[37.39701957203101,-23.5051376545552],[37.284821433880644,-23.55715780858012],[37.60116227583746,-23.881683823435],[37.413525895566686,-24.019520503721356],[37.183942084686805,-23.918530655142664],[36.99134808483628,-24.03423759721473],[36.824770001777395,-24.64463115256318],[36.34067143957052,-24.57137231989583],[36.260561391102065,-24.877537699148828]]]},"properties":{"name":"Tennessee","ns_code":"01325873","geoid":"47","usps_abbrev":"TN","fips_code":"47"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[64.46206799465298,6.496961030298087],[64.33903817453199,7.532787558595136],[64.17054497401708,9.143401607471407],[63.89578134364314,11.501048129000212],[63.758149871900734,12.77329354099837],[63.55954251603414,14.718873077449544],[63.2692092386263,17.161307055451946],[62.986553126148976,19.39005762118276],[62.71681757976824,21.506162424885872],[62.34878730805479,24.272303645536002],[62.295177928639326,24.688403710600074],[61.37728620544562,24.585986895135516],[59.65944542550207,24.40966813658446],[57.33975709361291,24.16934378071564],[55.457284735048276,23.997960676607892],[53.697482910994104,23.82523516117235],[51.42906755473148,23.62565151479636],[49.679014135709465,23.478096303583097],[48.018170751464694,23.332301666346563],[48.27943715286203,20.454793349799054],[48.59910520831439,17.127534813646722],[48.80804737440423,14.851532353645092],[49.011790864184945,12.3200491362822],[49.173895663005894,10.437359082423045],[49.31070145507213,8.961518549061534],[49.520403689753394,6.7004872988201685],[49.21672851797439,6.572684821286265],[49.13952651722871,6.402431572243366],[49.17713718055547,6.040183769990792],[49.31270356480771,6.016371282395683],[49.36556383157906,5.795905272948319],[49.31997509983352,5.622563050220832],[49.14430997059769,5.503714755310231],[48.96235906947449,5.127554262332134],[49.20283314946597,4.920284680090491],[49.48289164043679,4.606396898628047],[49.523909232635894,4.092053700206378],[49.77309266998525,4.016720332057655],[49.871676246471466,3.9106386773825412],[49.86151511581071,3.668762472073883],[49.721174090986125,3.2066776512288575],[49.87176969302376,3.136902377793636],[49.88686364083716,2.91131688302663],[50.076888261593616,2.6976547013144785],[50.00349912242538,2.0535533630211606],[49.93197964942109,1.935548542491193],[49.597404031999794,1.7869763284620956],[49.468832503800726,1.3558069404046516],[49.5149113042863,1.2072036819606522],[49.27296701199219,0.8903286762231071],[49.36450431088716,0.7279712901985141],[49.21932993198439,0.49957058674164023],[48.905006547623934,0.366742378437696],[48.9986931962876,0.17214657945662074],[48.94987654741273,-0.09322169384806234],[48.75061028503341,-0.4366443897877624],[48.6373061639245,-0.48164446652757226],[48.51392337114073,-0.7691104487419872],[48.53945704874203,-0.9511673082285726],[48.4429679600332,-1.134729721943118],[47.95611549451001,-1.0512157947154845],[47.732338310116866,-1.530974854153102],[47.83755281030384,-1.7886308528143078],[48.18150978297955,-1.9706020803951665],[48.01541404721793,-2.2396517702458247],[47.859730003712386,-2.3738850027284304],[47.6516309981103,-2.441912300830186],[47.710114569224636,-2.578265115288926],[47.94412416275669,-2.4413104366661917],[47.92796839297162,-2.681625695645843],[47.578339694295,-2.964227259776972],[47.73111260799551,-3.3482564858463886],[47.60804075973208,-3.508579672171381],[47.77648238850776,-3.9375163695114326],[47.32389073339251,-3.9837531181143886],[47.75277772066269,-4.629128611576485],[47.82079586899998,-4.60353711582711],[48.224601496069596,-4.773903413041127],[48.28854882332516,-4.591076732754291],[48.42102727920672,-4.512128941706204],[48.3822166244959,-4.260072791826448],[48.220952608129565,-4.094561396685453],[48.194495037778985,-3.9316865695994796],[48.40178971702981,-3.64724024073414],[48.533374266091585,-3.6723365542115904],[48.78920989116035,-3.979189145279691],[49.00595157545373,-3.973408549309207],[49.18866573318164,-3.83853548344641],[49.45272618571144,-3.8010586168595255],[49.59818699948032,-3.71704465363956],[49.712019581649514,-3.901585014753035],[49.642847162389664,-4.055685489103792],[49.70525076954559,-4.2406232131837625],[50.025593341307165,-4.198221752103228],[50.1574693844409,-3.971346343741792],[50.11525701106813,-3.7730349839481963],[49.89851901964285,-3.5525501302877736],[50.01480167639618,-3.1927948500712486],[50.14604719893817,-3.1864686931589894],[50.29172784513932,-3.4764966266209876],[50.56622672131515,-3.6149992860642914],[50.804661757686496,-3.3849104336045044],[50.99284608809306,-3.294979533990022],[51.28057604048659,-3.345871543433114],[51.47839926362978,-3.4960509680754694],[51.62986272129337,-3.526475151264524],[52.21261280183028,-3.877735214599786],[52.52422012959665,-3.9032430046524627],[52.67387865714531,-4.078692049601291],[52.76228661422612,-4.282164343404268],[52.97011142984537,-4.254107369326018],[53.07921475829909,-4.138882158576036],[53.180389563857695,-3.6454194243004268],[53.1755740772926,-3.4099869991151097],[53.507970217395375,-3.1635877771496106],[53.819090824014154,-3.0947135871597657],[54.15920678409088,-2.6815927130609416],[54.35283359646039,-2.5911072353229354],[54.471570842101954,-2.6483079809626524],[54.76059336032363,-3.155672675568776],[54.96503196782403,-3.2969687920757647],[55.16184279071574,-3.1185461434103945],[55.35928235895188,-3.1559896751714804],[55.30726553465606,-3.471561959601008],[55.39143556354343,-3.6279501514820987],[55.62214247014544,-3.4847031058685496],[55.61434942492142,-3.1510762935473733],[55.66713572412167,-3.023351395698949],[55.928001748109615,-3.0285779977927234],[56.11228179114467,-2.917030262654158],[55.985095205321784,-2.6537891626341734],[55.94185116445392,-2.218203528166697],[55.9962899809432,-2.103145303606134],[56.30510568771615,-2.0361373922774955],[56.41961435690005,-1.903945907642393],[56.412373621780546,-1.7630976083735215],[56.21702197766335,-1.6450277186715374],[56.323369687171336,-1.4645585174928297],[56.55980923824359,-1.6085655096770577],[56.693160910597605,-1.4070293561663723],[56.936030116173285,-1.3867184105822843],[56.95280124558824,-1.210547028673452],[56.725287224993416,-1.1794235630781225],[56.64285388898636,-0.9920321297920588],[56.801804190095645,-0.9267121211977786],[57.111948105273584,-1.1215854519766941],[57.25553103355158,-1.2750646011034572],[57.25045076485995,-1.56573364433626],[57.34519925165786,-1.8714628857030597],[57.62310336382281,-2.0491318626847956],[57.871166800421705,-2.152726449381178],[58.184614487371924,-2.082209978395786],[58.42983350065045,-2.1682494236208667],[58.62868860199358,-2.4424154777011413],[58.753025619534064,-2.1692903114902653],[59.17954640639905,-2.045810114955166],[59.27440561292495,-1.9008912627121453],[59.32711631564137,-1.4277144387737712],[59.263337871070654,-1.054881352285868],[59.26838574545098,-0.8284131623667021],[59.35760988025214,-0.6295192202907314],[59.51992856113022,-0.4464403062293309],[59.57552710883738,-0.12011484717104175],[59.64022364272625,-0.008456194986501141],[59.860471313822465,0.0676717709972911],[60.083699968526986,-0.060839969849916305],[60.38213933438672,0.17018128828573614],[60.523856678221755,0.3969143358111046],[60.6383831392214,1.131200205051002],[60.8063044338455,1.3425668041232788],[61.137100138495306,1.433709338289772],[61.27296555795242,1.5274297997554167],[61.373506274100414,1.793549285191347],[61.63522289157719,2.0266578885626307],[61.650472436912786,2.2587478396457437],[61.48187602731784,2.586348194194126],[61.45091754872459,2.920310341803424],[61.34222492511285,3.075837139815188],[61.335668271045584,3.2814989266169046],[61.55532666821855,3.5038650118728083],[61.75636228560986,3.4779896898354408],[62.111071290632204,3.5980697627756135],[62.370985003616205,3.6002008085723736],[62.60802182404086,3.3614615789067983],[62.8820150841145,3.298340545894095],[63.09470784172625,3.430474231988406],[63.3860967242109,3.7398368527043915],[63.79884668706582,4.058824984960162],[64.1192418415272,4.088612207787986],[64.35761366969068,4.241424651756197],[64.77318570317941,4.232067633068364],[64.65758738299407,4.57929347941213],[64.83087768659324,4.777663974950748],[64.83381485859036,4.931003080186549],[64.66896337838023,5.006178396992976],[64.36925419895066,5.0009905151169525],[64.30504608194924,5.145323334381246],[64.50496054923201,5.437687523930299],[64.45929881664102,5.663112079623896],[64.083708872641,6.104155967765344],[64.46206799465298,6.496961030298087]]]},"properties":{"name":"Indiana","ns_code":"00448508","geoid":"18","usps_abbrev":"IN","fips_code":"18"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[4.566633702986271,13.439284734745812],[6.05511071764217,13.420658791476566],[8.724009035483911,13.399118468582895],[10.8592379111042,13.392374568848469],[12.530616694410385,13.422649718617294],[13.662808845956164,13.454665993667406],[16.478373506186482,13.56941524191641],[18.01997462416407,13.613200800964595],[19.34436744481307,13.690335991123066],[21.243935730963845,13.780059873168897],[22.177515221359698,13.845938600037732],[24.260676105732653,13.972042952077866],[25.482973306531253,14.065696092489317],[26.228238394896653,14.136673232518838],[26.454202244841692,13.935333932747854],[26.502253928920393,13.72501393808454],[26.826848184063138,13.664267844433354],[26.86588092483485,13.403403820850327],[26.988940517459294,13.340282195207541],[27.14441381440257,13.117960011395798],[27.369148043238127,13.102507700364185],[27.39365223646377,12.767584519632887],[27.626274986859638,12.579595961996988],[27.850443626729838,12.616508059920148],[27.970598476146584,12.565960353874365],[28.20097398703783,12.67290571879121],[28.15251370108082,13.067913543927235],[28.226689371041754,13.321694288390757],[28.19448744364804,13.518934926923027],[27.98455107858742,13.720238274759327],[28.21246455185492,14.144271893315615],[28.471422315392395,14.318855468603386],[28.80005664167075,14.427838018828597],[29.13555562691834,14.440108723499003],[29.468204816394206,14.700403323410459],[29.476082300047278,15.06556800098195],[29.581399112496577,15.429929983949672],[29.544667099410546,15.667984324675128],[29.802887576427242,16.07549491878837],[30.03438274878378,16.362182304230387],[30.217938814064023,16.487821539057304],[30.263668521415465,16.719882916430684],[30.222515092504867,16.866250512266525],[30.286237237464704,17.24776928766923],[30.241938213207177,17.657959488272958],[29.98773533035041,18.063118753208347],[29.70591686535596,18.122829400017558],[29.565797507109487,18.34182757968159],[29.304233847993412,18.598668856072756],[29.29037097519139,18.673228141666993],[29.483761505554654,19.09451675296415],[29.506982764331266,19.493999419117767],[29.58086724190003,19.77324281077238],[29.68416366348127,19.872156259781267],[29.95910527223696,19.956037810144462],[30.1996188546565,19.882655087882544],[30.627603492029152,20.131956465701492],[31.211773733602158,20.128967829312874],[31.63968313260905,20.232535487571933],[31.89086235531989,20.462564750467866],[31.94063593612805,20.578506094628665],[32.2217631840786,20.69531402022547],[32.43835120290535,20.652440553917316],[32.64346330930041,20.700649369313776],[32.88296702432376,20.995021118956103],[33.241314928432814,21.16602232186575],[33.21485293037075,21.561036595438722],[33.2480365337831,21.78100888762084],[33.35275185214712,21.920954904563114],[33.3246283480023,22.15160764260727],[33.50508952601178,22.38105540643515],[33.96729280159735,22.645126958357146],[34.029469247333004,23.134628476581568],[34.10275297853448,23.338374571032507],[34.03362203816671,23.69538498894794],[34.13111147047373,23.97713974016284],[33.985677059097995,24.224232994914562],[33.96112884442261,24.711622059268127],[33.752926162562744,24.79295944761995],[33.70107261395784,24.932052726100277],[33.308682924858275,25.081131280528012],[33.0575809473437,25.21209721546635],[32.90539276372555,25.23251880593415],[32.71803436183088,25.35276129240763],[32.55802522288108,25.532606542320565],[32.48493503664864,25.710261660954345],[32.546995621867126,25.974108173277305],[32.1970778043148,26.352465551919153],[31.781137603626053,26.536936515264184],[31.68855525640139,26.69655185609229],[31.401730562651206,26.792452384559123],[31.238774894436055,26.909980971738158],[31.295089013593266,27.103713553000162],[31.25610002559266,27.330651569250037],[31.021382339683505,27.623045359959598],[30.924008011619627,27.86625156164734],[30.828687323935846,27.9251049521726],[29.601955225602257,28.158172964660938],[29.06868413057472,28.451236250748636],[28.98679048074195,28.57229579890704],[28.758349955817714,29.355971423831484],[28.52761571336651,29.480936563693],[28.490268703657076,29.84534944197953],[28.31694350556365,30.306149322949565],[28.281780060491307,30.489891890014377],[28.279119178409097,30.8975852878614],[28.37462033920655,30.952759809144972],[28.545230058703137,31.31315753621773],[28.740678527468997,31.492703540701573],[28.841438503458434,31.65442181186268],[28.684192232114384,31.878831947987972],[28.447266232070852,32.0784367147982],[28.064008006431965,32.200210342274445],[27.991337963016516,32.29891579759119],[28.068803052300847,32.480767332930995],[28.031754147211803,32.62722424294913],[27.86745746231414,32.86299366831677],[27.92765601723543,33.10950255608115],[25.795529580444896,33.0227700159463],[23.74935733630682,32.948519147876816],[21.512749406205497,32.87234651601961],[19.630204831331824,32.81210273978479],[17.217850635880215,32.748863196080414],[14.021186236851864,32.683048610381796],[12.192648926057934,32.6544919179649],[8.898085636581447,32.61787935435676],[6.223887571918285,32.59372341408471],[3.4497999803169686,32.58612149136622],[0.9736110818548098,32.59276864128454],[0.22204198333311617,32.596672999517864],[0.3070273418123105,32.39241010350416],[0.24916933435598632,32.189203503642396],[0.6165576081197521,31.90549134608896],[0.545914904565765,31.600549581931844],[0.5991479647471554,31.44992268497563],[0.2772439854721544,31.216665675980906],[0.4673359030500558,31.06016526543672],[0.43671930562883743,30.92690109817087],[0.6315264133443401,30.871561020887267],[0.8427305450413489,30.896224917036143],[0.8775692426131096,30.503717755218386],[1.0470511928489967,30.264623530931733],[0.9556703928478859,30.12560147114146],[0.9199219472441345,29.920861497313965],[0.6596407663446835,29.831417809932784],[0.6428110839582256,29.708872668579083],[0.7559970892605764,29.58443231871838],[0.6052142084093701,29.39610236293982],[0.7161814669670364,29.263133762233068],[0.535985504287191,29.074477491339405],[0.561890842501714,28.880881392118077],[0.4672843283971302,28.735863160017722],[0.4752751199019332,28.58263631255613],[0.30278406873266805,28.450337450210387],[0.16691332051285304,28.1663513037544],[0.08213229121287764,28.165535481577717],[-0.0016972328994087971,27.893991437966044],[0.15256911964913314,27.646545803127932],[0.6161682349632844,27.18702234673124],[0.7189188335162018,26.867517212648057],[0.8175569541155933,26.71064917228056],[0.7574131046799324,26.42399264068566],[0.8140146479040917,26.293324685638794],[0.9797148313671948,26.290151267204052],[1.2070468058815351,26.262269786758782],[1.3170001323383436,26.00373940607817],[1.1611366076195317,25.788414424950464],[1.1709047408934936,25.29887387407281],[1.3693593237953312,25.12577642688133],[1.3792358968876897,24.994355771899674],[1.5706342938662072,24.78999406610143],[1.6097082259552298,24.597245422633755],[1.4195502037299796,24.47154674011529],[1.4875224015211121,24.171119171262383],[1.6806816491878092,23.9568001436344],[1.9023080765035387,23.809580592865178],[1.8399784153668197,23.571384414228366],[1.897896580573708,23.3614268798015],[2.0751905634456413,23.354447743388793],[2.135574860918952,23.242839131993424],[2.33584705934872,23.11798969340588],[2.2973517195739834,22.988327656418125],[2.627695344919608,22.854073475946016],[2.558283877426512,22.524337321987396],[2.453777453250886,22.442620226298253],[2.5880045961504554,22.183871221014627],[2.7211726037835264,22.09104717485961],[2.728898856892638,21.916238428320103],[2.9654018379238956,21.700412395240086],[2.752180995823043,21.29620497689652],[2.9070574489596264,21.186143874575272],[2.667914510051546,20.93296388311348],[2.8047524049215204,20.736435784720225],[2.6941523375848706,20.56340798512874],[2.706442810628245,20.428273498465643],[2.8780622447406214,20.24168603368916],[2.7961448642923474,20.04827833548479],[3.0041283583182303,19.814464239922643],[3.126262769132797,19.827832968952553],[3.166775590995487,20.01252868113025],[3.3081925861373076,20.006525582231475],[3.3462961594941834,19.838352609917347],[3.2158645466870652,19.68642998332438],[3.286549328898408,19.551038287006893],[3.6456637837208516,19.50478642640128],[3.7324659969125578,19.418763207557575],[3.6388146224709006,19.026087460007872],[3.68630673415468,18.858217384764597],[3.5357692942157293,18.718680921955404],[3.705644335830788,18.526376403012577],[3.9163060171285817,18.50436202152423],[3.9595308712422734,18.275741007372854],[3.687465630835406,18.253278768302415],[3.7800122386440322,17.967056330525764],[3.7013042738169726,17.77657203595921],[3.758373037296556,17.595235773106445],[4.01290474689483,17.617933465820226],[3.93162669061964,17.385712980164325],[4.041606104449733,16.93999603471849],[3.9362684316088865,16.759875147245435],[4.0504897477605795,16.5878308986067],[4.03688106433218,16.303554571863984],[4.204941017650553,16.191944222820375],[4.182269651757157,15.780487194215638],[4.312981658312283,15.521642598406116],[4.122279003520577,15.383260267491366],[4.179334910070468,15.182242769362636],[4.144606822544939,14.962929195059871],[4.181576179115136,14.773123460110572],[3.942786992715526,14.592770582134653],[3.934243662055091,14.362658551457494],[4.098249197017881,14.256097910467863],[4.151163760908274,14.08341555974057],[4.437417203622507,13.957548473062506],[4.543882487588355,13.702752981410557],[4.643381104437475,13.606319591367356],[4.566633702986271,13.439284734745812]]]},"properties":{"name":"Iowa","ns_code":"01779785","geoid":"19","usps_abbrev":"IA","fips_code":"19"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-75.66672067756258,-42.87870827077865],[-75.20584300687074,-40.41503614082921],[-74.8431870617263,-38.422973340792886],[-74.57934636526043,-36.9299058055318],[-74.23162123045276,-34.909192966754944],[-73.94859456101388,-33.19871589178014],[-73.64139271229433,-31.35232237658829],[-73.28603790761778,-29.108330784372782],[-72.85718263319062,-26.375565755857558],[-72.5130751974101,-24.145700147117658],[-72.0890521622258,-21.327039620607557],[-71.7941053760312,-19.316171511465754],[-71.52733612066665,-17.466140110725757],[-71.29605605667153,-15.869301677173693],[-70.9382265162427,-13.388186587584192],[-70.68518534223044,-11.590768436308707],[-70.41696558431377,-9.6984640341206],[-70.06615646820839,-7.199983140779321],[-72.58110158247436,-6.84904083779033],[-74.00796249026585,-6.651367327837256],[-75.5279546486134,-6.425952144565376],[-78.02327518136048,-6.0556952853108355],[-78.2331802207451,-5.980228143496496],[-79.61788028712324,-5.771627496170111],[-82.52391577881168,-5.331130099729538],[-85.15728377563966,-4.893552579475372],[-86.54481122636447,-4.662414955192292],[-88.22023969126292,-4.37513457277261],[-90.71450887810519,-3.9423124359646518],[-92.39305975068585,-3.6449368696579887],[-95.27385736116857,-3.11524807527112],[-97.92594531658744,-2.60993149468631],[-98.31772662452275,-4.66365116894885],[-98.72704270042878,-6.985690707365453],[-98.8651226862623,-7.625865259013503],[-98.98583520622175,-8.296261402047778],[-99.13323876452229,-8.371689721075727],[-99.83142468409413,-9.368214141490043],[-99.94607923288198,-9.321000752720265],[-100.17133335995302,-9.363574645632715],[-100.34994986157949,-9.326226524304776],[-100.4598297410693,-9.086070582045924],[-100.68350572585013,-8.934350232686866],[-100.6052440877174,-8.840309554367726],[-100.67805508822282,-8.640615713462662],[-100.882596119104,-8.300390081587215],[-101.11417285451137,-8.227259794377257],[-101.31818712678053,-8.339501774782002],[-101.37232622862969,-8.238648138257332],[-101.65750766980236,-8.261820556021087],[-101.64510524407184,-8.100620501857588],[-101.99579047134034,-8.021946356483408],[-102.30006598242925,-8.102790903406197],[-102.32369107142355,-8.032723044651947],[-102.67465901916233,-8.193062385748888],[-102.9735374573064,-8.166913643827721],[-103.11400788372124,-8.273575264538827],[-103.02331386679813,-8.724140783996043],[-103.14090900309125,-8.800049750619609],[-103.19178349896153,-9.061135973897656],[-103.07406471020224,-9.429193623378897],[-103.10228816489881,-9.554091849588364],[-102.901109344497,-9.855803619162337],[-103.18103684900105,-10.002027053177896],[-103.14062016110769,-10.100205604872817],[-103.27127962472096,-10.275829481659759],[-103.24022250530544,-10.634863281789784],[-103.3662841596472,-10.933746558594963],[-103.27059135226342,-11.119497926026362],[-103.36016213553556,-11.37763323152724],[-103.2166531358894,-11.682760161572633],[-103.34804405645531,-11.860260106499497],[-103.34045560298607,-12.209879355546278],[-103.51262577600201,-12.417935558765425],[-103.50106367800551,-12.80315085154365],[-103.34916792857719,-13.101469253839477],[-103.29091778912795,-13.742908130845827],[-103.36875359761396,-14.86217129094591],[-103.46511409694874,-15.081169407746138],[-103.74949530950785,-15.086130292789543],[-103.87800329065054,-15.170740895650214],[-103.68926941971598,-15.428193693979512],[-103.9547468422213,-15.74233503596342],[-103.95635518857927,-15.884671342375682],[-103.95926651835927,-16.015896682325312],[-104.12044429271214,-16.826419626193456],[-103.94723029595491,-17.01675045447402],[-103.82501294172411,-17.55992456888235],[-103.6613596052714,-17.801166109160025],[-103.4377197189206,-18.008986130004548],[-103.36620945100371,-18.501359495304982],[-103.39773526393817,-18.844836630533376],[-103.25723880032909,-19.038701139014822],[-103.17295291507531,-19.330548991058127],[-103.30576169149748,-19.80187196182959],[-103.23219403790233,-19.890677469962032],[-103.04514895508099,-19.894462957227315],[-102.85790668210599,-20.098360935575936],[-102.82481603371669,-20.221482690696146],[-102.67587344300597,-20.31335872368053],[-102.51215013541393,-20.579662843374955],[-102.25270525180579,-20.740557218582854],[-102.09395412659032,-21.08442754534635],[-102.13952547239167,-21.385704716305014],[-102.31473029701253,-21.396568343478034],[-102.93651511918974,-21.814384603846243],[-103.1280959619548,-21.80094498996343],[-103.39244674384689,-21.98386669559316],[-103.65871673699976,-22.059075109477053],[-103.95790980980371,-22.079012449575398],[-104.091070927799,-22.192248165587262],[-104.20432172007585,-22.61032394649825],[-104.36998815134828,-22.77437129575893],[-104.64361452636753,-22.941384961353325],[-104.77962905053668,-22.958271704406688],[-104.89198240208276,-23.143018946979378],[-104.8002033875719,-23.55934014036977],[-104.97313491234824,-23.64681200514262],[-105.01028448007489,-23.862005221636245],[-104.95468973188359,-24.18666220252007],[-105.03195256991361,-24.397834704462067],[-104.99216099820792,-24.653574052310994],[-105.16629910862203,-24.695707172571897],[-105.27192755719385,-24.925624649081506],[-105.2591734079388,-25.174469660072546],[-105.3941620086277,-25.28194519728655],[-105.35256685478998,-25.542971531910982],[-105.57689801677665,-25.638238062102875],[-105.61602161562485,-25.73585588834],[-105.80071527747941,-25.80135694306869],[-106.0591001279947,-26.053292792605014],[-106.13783122529694,-26.226114758204403],[-106.69064796344519,-26.26040020357106],[-106.63442046597224,-26.57701414382593],[-106.67922650634915,-26.7269869392927],[-106.90366089018833,-26.913022261894465],[-106.8775849797565,-27.011349947551807],[-106.6341676925809,-27.171301628829063],[-106.74111391946963,-27.31458114797644],[-106.68194673214319,-27.453416013101283],[-106.79869810575411,-27.841856091146855],[-107.05605677780636,-28.216640221935513],[-106.9649302963726,-28.319007403065843],[-106.92335850935629,-28.622611679133097],[-106.73100635589381,-28.6092375358991],[-106.63527333969179,-28.742061795176966],[-106.38777781080005,-28.732632046856512],[-106.05624658632837,-28.824651710959994],[-105.99344949425596,-28.91611513667504],[-105.96473051135462,-29.224935366958544],[-105.85173388914895,-29.328712198224157],[-105.95763684226517,-29.44050198817148],[-105.89183620365718,-29.632094698589025],[-106.01414127131207,-30.009686005078986],[-106.29565304804403,-30.143144685504986],[-106.45560084666384,-30.275814565294727],[-106.47484193028947,-30.487658045528992],[-106.70525560620338,-30.495942017588742],[-106.82704692134448,-30.567218912039817],[-107.03612592409301,-30.572204492764286],[-107.45342726200973,-30.439693640297815],[-107.65625525819341,-30.527220995306912],[-107.92317803055228,-30.85245162523779],[-108.15302459951818,-31.033204893888367],[-108.32700868977825,-31.056616723860664],[-108.30102200255203,-31.202517648110796],[-108.41965148604548,-31.345448071588702],[-108.39979317809889,-31.548550234053547],[-108.52279076752237,-31.784389864462977],[-106.18000856696423,-32.97796757382814],[-104.76889054298347,-33.690429488155544],[-102.71401600255241,-34.71728018932968],[-101.12221535212252,-35.49933689584529],[-99.2755491086671,-36.40008670760769],[-97.8636461831872,-37.04798457219635],[-95.82100425504446,-37.987240739894986],[-94.1324128261763,-38.75251214101569],[-91.10707938387083,-40.105654071035744],[-89.00762970360155,-41.02449611558609],[-87.8244091734755,-41.53798920566837],[-85.8789786000625,-41.760401011040074],[-84.1373173558697,-41.96567414624672],[-80.62680241685676,-42.349932079690205],[-78.37398694144532,-42.59166262177287],[-75.66672067756258,-42.87870827077865]]]},"properties":{"name":"Arizona","ns_code":"01779777","geoid":"04","usps_abbrev":"AZ","fips_code":"04"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[0.5081726085095676,45.99068655467205],[0.45037641880835183,45.537580066223924],[0.4067097066126685,45.41773359298238],[0.12509091839790584,45.178714668518644],[-0.04343724809158762,44.97939948706171],[-0.4323716392161333,44.81200458148526],[-0.47761668139843577,44.76146543799582],[-0.8757390167105714,44.55470908712366],[-0.9691692084629064,44.34082289250518],[-0.5078223321922518,43.90089280205305],[-0.3511788475970739,43.57535599220275],[-0.09867698255165118,43.33304691900658],[0.20514760875891433,43.32315258388948],[0.8575392048559706,43.05080426826421],[1.0358402860510656,42.755734607790174],[1.0300071007365206,40.95710531814725],[1.0254307593061216,39.62595555897181],[1.0060031697166245,37.29603995997629],[0.9908102533559819,35.70438669139522],[0.9866839303716597,34.51691591908545],[0.9736110818548098,32.59276864128454],[3.4497999803169686,32.58612149136622],[6.223887571918285,32.59372341408471],[8.898085636581447,32.61787935435676],[12.192648926057934,32.6544919179649],[14.021186236851864,32.683048610381796],[17.217850635880215,32.748863196080414],[19.630204831331824,32.81210273978479],[21.512749406205497,32.87234651601961],[23.74935733630682,32.948519147876816],[25.795529580444896,33.0227700159463],[27.92765601723543,33.10950255608115],[27.775917242334216,33.39463238009364],[27.798859940322433,33.62605902574001],[27.624172763088477,33.784066266728296],[27.592020915847815,34.344148490399995],[27.693477771231322,34.731418821946434],[27.593487037896985,34.830411365483],[27.46281560667962,35.147584136670744],[27.066939268098132,35.5381345462518],[27.01974535358221,35.643039186050544],[26.7986372085802,35.803376375599974],[26.609304021172644,36.014216538096115],[26.263392262703803,36.10206832409163],[25.875234665281862,36.135996570683986],[25.53750746930195,36.3312598210325],[25.19171931768627,36.647795142262716],[24.6339096498412,36.87899371100886],[24.327828310206485,37.07626099859232],[24.226464388232632,37.270087039750784],[24.250479892848016,37.36981714746444],[24.016236705115162,37.83252096920267],[23.847353995940544,37.96426904200924],[23.441642124888098,38.11396959552893],[23.35966179447737,38.18247452092611],[22.997566838176596,38.28584329418501],[22.49779998121391,38.3741895719447],[22.17632974747136,38.57339438444454],[22.08984672213719,38.66533760608337],[21.980864911348554,38.92915141614688],[21.823739612981118,39.00587169433496],[21.390950327792172,39.04065846964225],[20.846437026952565,39.03474663073056],[20.690050796617772,39.22967519557695],[20.4154476013018,39.29230560150185],[20.41310697043716,39.419266437448265],[20.190026663056774,39.54768049351847],[19.83684806485278,39.81877742450687],[19.44177589089301,40.01284938875452],[19.636044565350506,40.5057229632988],[19.582391992073003,40.77010122625181],[19.6883409535947,41.0284142550249],[19.585144240458398,41.21341992223126],[19.610725114412837,41.48207051147134],[19.394189412195566,41.70800665874334],[19.675276408484045,41.94357163953732],[19.546614042800005,42.349010687206714],[19.614324944588898,42.525738370298185],[19.545749977782517,42.88902064644142],[19.667483141129534,42.95611118951166],[19.84980309176973,43.148126283572694],[19.82004486906774,43.23736252648631],[20.077968999392972,43.47810141718307],[20.08560606920014,43.699958064219715],[19.9117507666094,43.812639096692045],[19.66724900070536,44.06412877524926],[19.66367488568345,44.20055431622517],[19.420751723970092,44.33321160593779],[19.173412714758495,44.28996672178723],[18.86826391024103,44.35701056384629],[18.834128041079076,44.62543756863332],[18.907552461208276,45.07821379836368],[19.196824723546275,45.2188308378387],[19.317558169737833,45.322219191497894],[19.438869054620966,45.5603781275989],[19.396514930918876,45.63937726865175],[19.645050449654573,45.96570291549164],[20.005149933736654,46.185940821887954],[20.43071592285467,46.284122842929875],[20.55150959647546,46.44271761167195],[20.81442967785834,46.395783574686185],[20.954224052637464,46.61145070616144],[21.111103243425756,46.66969554510653],[21.409531881692356,46.624249084334146],[21.47242950743686,46.83624910416229],[21.67289354373347,46.91442579726936],[21.57774130407355,48.667519612102595],[21.517825264401516,49.711284745741324],[21.650616327806333,49.64559653245087],[21.914094236219544,49.64728351899211],[22.07990907749717,49.83790964985987],[22.009234864868407,49.96010232247501],[22.219582083847467,49.95865656715873],[22.254004120099754,50.06700468475312],[22.48845306324833,50.11740607791418],[22.84111265036028,49.92025395360462],[23.026464445947774,50.01244049188273],[23.534616701029805,50.20984114160884],[24.88483981933787,50.75361399862922],[25.321749939675996,50.93888994579757],[26.17401552421586,51.351030829823245],[27.677328601024563,52.05845971490952],[29.295942850893024,52.80560583108209],[31.196055531530874,52.83160876694376],[32.6914593661213,52.84830092013629],[33.26081927492087,53.756756027819996],[34.06163583903006,55.02604228247535],[34.64072543401255,55.90944698264693],[34.178263930757,55.82097291086161],[33.996415644414725,55.87388287658544],[33.52648393594915,55.84951616071847],[33.433597517472606,55.89628472012353],[33.02489665340869,55.854319168321176],[32.791172606994856,55.72960400744421],[32.65649469510067,55.73314913196335],[32.187031540406835,55.877055205158136],[32.17411289224769,55.95850486342298],[32.015353199825995,56.094203793556126],[31.480403487320284,56.18243804697098],[31.04053828423699,56.153140492023354],[30.734367504611463,56.106671521805325],[30.653613713773645,56.12815343940606],[30.32278989830236,56.062212333184085],[30.185536799286687,56.11262417499849],[30.01917801674518,56.082013690705175],[29.45231339777327,56.052843538414976],[29.330427537648188,56.159209832130095],[29.042656659680755,56.06951942578727],[28.566737294292867,56.0193218363259],[28.468802985996266,56.0309289118973],[28.282803229912403,56.1870509043518],[28.23376374931908,56.33725060136462],[28.099304659221605,56.31720944147874],[28.042511574164525,56.57275414271496],[27.818419061042555,56.59052908169911],[27.390365089828247,56.475064068737865],[27.140043087909714,56.346483256214356],[26.897742646569288,56.309301292898645],[26.12960397682485,55.9058265594774],[25.940657310378924,55.86027643489623],[25.554894983090815,55.83161922182033],[25.279763230329984,55.741275343370184],[25.17354270694174,55.81883326819127],[24.989767656718623,55.810995373977434],[24.578254080480686,55.72330442978355],[24.59202632987051,55.90091224237677],[24.497982357460177,55.93365582062629],[24.25270239309571,55.90634092935234],[24.184336296048865,55.95469872125279],[23.902992272611638,55.96749804898821],[23.960007991376717,56.07590242231759],[23.85974206550114,56.300413891333314],[23.543311502346466,56.29701430181704],[23.371857399501824,56.3372166369751],[23.14243594141446,56.31313257373336],[22.993654214817724,56.42971640983849],[22.748228563600453,56.395482762328704],[22.697181006589737,56.47795730874958],[22.443556472162253,56.5250686495595],[22.403438110653806,56.64865069344821],[22.457808028873906,56.742951350841714],[22.04946478311343,56.859517480822106],[21.67136669684229,56.887549372942075],[21.462027514882244,56.814484320093946],[21.19408694321225,56.84478301565032],[21.069587071397706,56.79591056992282],[21.02494347227104,56.58379306850935],[21.136408835680992,56.41312986601179],[20.97484949706818,56.39497735073616],[20.714678794542323,56.31015181909071],[20.479352385164777,56.59266031279572],[20.20159001543067,56.81204241856487],[20.16384180492995,56.888289073074795],[20.253468600921217,57.00335173841601],[19.998072155661735,57.17768620198516],[19.290377147093768,57.121068610089324],[19.01385594432377,57.21660309999972],[19.071696333188157,57.33940770643459],[19.367113128454537,57.362335090366976],[19.364629569659424,57.527405423886876],[18.921374877422494,57.50549498023431],[17.94447720819711,57.74363546200607],[17.84141196298853,57.83044147897063],[17.676924961736162,57.80249611076423],[17.177570360153616,57.80914771850102],[16.755093876129425,57.785705399793336],[16.613165294084997,57.85542986368866],[16.3871162501403,57.85315312408396],[15.948946218396943,57.785895548336505],[15.840590655548933,57.70309777576116],[15.682137816578933,57.716866355916586],[15.391959575154116,57.62943514593457],[15.392540466853147,57.47174760348384],[15.015495359727263,57.401862368687304],[14.608952064152804,57.40169382284562],[14.548832320547922,57.352098530696615],[13.837553584157899,57.33798203880514],[13.721602657561691,57.390012478535354],[13.77685916972731,57.543602951428355],[13.695410515167465,57.67869947096091],[13.582844862381005,57.764379657802145],[13.187255143954491,57.76653239094065],[12.804556348205608,57.807017212940075],[12.08740428507245,57.80903687010475],[11.67183081870335,57.833819051163424],[11.570206500004794,58.00311958810756],[11.358947082283908,58.043377693187615],[11.197113673984267,58.015984888621844],[10.846755295060516,58.04147309865928],[10.741441019837875,57.98060544989573],[10.2650656471637,58.00561843743851],[10.008628239910031,58.065112615694304],[9.515921973867218,58.29592611763606],[9.464177222620398,58.45115129009745],[9.553533397196428,58.67130304699626],[9.37830222154924,59.09266266028181],[9.230104915998075,59.09165271160189],[9.220626232742887,59.44893496020902],[9.110078642507956,59.52492998295117],[8.985688258367452,59.79844428177478],[8.987163324756398,59.856763605571956],[8.847528651595042,60.13753458066811],[8.887900678636429,60.230864123799684],[8.709513395054328,60.24064404351848],[8.219657397214101,60.39792964275663],[7.745330839213352,60.33658228939616],[7.4735665031813046,60.38181776138634],[7.295995785583051,60.443016902013525],[7.318284072673496,59.07687923127186],[6.299560518089154,59.07217951839052],[3.675059221808148,59.07078891942554],[0.34491155549295627,59.07661952539853],[-1.0987695809648461,59.08269655479607],[-2.514240910251004,59.0930468110162],[-2.544673563402833,58.902113712374515],[-2.3881284110987364,58.662507587206754],[-2.2632713371150275,58.54777201638002],[-2.316896744599685,58.48374481396241],[-2.1624871910125267,58.29231907744561],[-2.099975593618694,58.08063180043035],[-1.9556035746368639,57.94488349710897],[-1.9318050619431526,57.827994891256864],[-2.049753243730531,57.736378843672206],[-2.247808155049092,57.4466774184207],[-2.1945631719553176,57.34453033667036],[-2.1492408897379183,57.088322870864694],[-2.1851397845439573,57.011779704636474],[-2.1033599343086897,56.86956957419518],[-2.228207458939015,56.78979725872343],[-2.221822286042145,56.70467562745023],[-2.0861169756899858,56.61980585484494],[-2.1095831523296584,56.532014110957846],[-2.0425939107751665,56.375839617675794],[-2.1385172378549897,56.20882817600163],[-2.1209589695903497,56.09134275865352],[-2.209631775009159,56.007898773766755],[-2.1977227705035807,55.84235907306892],[-1.9745977363039544,55.55161718226401],[-1.844247497902176,55.44789184773539],[-1.7763993577440162,55.057482997341396],[-1.5980046121266376,54.939232373046174],[-1.6359576402967417,54.79980401487811],[-1.5407438272238536,54.73512908626708],[-1.0406657886228197,53.986868488402884],[-0.9900753432214491,53.77810229127356],[-0.8083793507302905,53.571913097176996],[-0.8689036138645797,53.364039054254796],[-0.8140340832208064,53.17687471062925],[-0.8466217106203335,52.931677881676585],[-0.8966908700908015,52.84319291859724],[-0.7635805970742475,52.68696413109471],[-0.8364522968376281,52.65415623314273],[-0.7306109846913699,52.49414143897698],[-0.797818284450651,52.299420065234706],[-0.7297482677395977,52.04577196863621],[-0.7819846000218355,51.87831742768142],[-0.6983888140141886,51.82885560349115],[-0.7618711897790037,51.70277920807086],[-0.6744457126057841,51.49108510077976],[-0.7250013154828518,51.349778436675855],[-0.6854971699036456,51.23689978917899],[-0.7717499678844988,51.04196960471558],[-0.5658838668028204,50.6877211044601],[-0.40926454098402076,50.62947149412579],[-0.4941801352770946,50.539307336182105],[-0.4892844369879443,50.28915062887876],[-0.6256705711949769,50.15877111102839],[-0.5516720301971151,50.04046274260632],[-0.5257899500516574,49.74915319872003],[-0.6189462640742759,49.53423099981933],[-0.6045297695882347,49.33056397200346],[-0.3604512997842686,49.04961701283427],[-0.3853381571626031,48.923847399841506],[-0.31306909234893515,48.62595422798637],[-0.2085683228377623,48.552228245276886],[-0.22254336620976925,48.418711108950724],[-0.11350729882314771,48.349203689777454],[0.014881392192430341,48.13079467249016],[0.34717285356843175,47.91211802256283],[0.3518479852870505,47.42514239548147],[0.417072108190286,47.30268025106105],[0.3961619133026314,47.184574911065475],[0.5602373225255404,46.72266782933081],[0.4416006544472208,46.443393739325835],[0.5081726085095676,45.99068655467205]]]},"properties":{"name":"Minnesota","ns_code":"00662849","geoid":"27","usps_abbrev":"MN","fips_code":"27"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[16.860657166854118,-54.481653916024285],[17.075335502220355,-54.41604715563201],[17.150859091996058,-54.32098031020782],[17.122276291410124,-54.16905888361166],[17.63480307492702,-54.06151300460846],[18.86249540972926,-53.94669517551689],[19.485425919335842,-53.9537827232053],[19.723079237300663,-54.026996845738445],[20.004586205976654,-53.9774595186271],[20.101612614074405,-53.89922182012277],[20.49843660184829,-53.88377777990059],[21.10940793630116,-53.95795685716853],[22.03704914054961,-54.13650398399134],[23.108949449410733,-54.4211171470023],[23.461587674960708,-54.50338886066344],[24.203142343928338,-54.63394242986352],[24.65714199878478,-54.672184462688904],[25.62218019113803,-54.72533325866301],[26.318214719422258,-54.7873117751785],[26.750118266973317,-54.72304754264806],[27.21576383386842,-54.558020138112326],[27.641408909241864,-54.5501866229403],[27.85014774036835,-54.65139440753393],[27.95682986216184,-54.77191527502721],[28.246723794756154,-54.82763972904648],[28.37133267576049,-54.912187390431214],[28.697666108515072,-54.98283225470791],[28.808087476825484,-55.163967425605954],[28.95269717797689,-55.21428983999575],[29.16510982046854,-55.216343418233215],[29.54791792924455,-55.06023256068348],[29.894252336333675,-55.18471431197974],[30.040790704855752,-55.19450319461544],[30.38332585576637,-55.122509929651414],[30.86280162475231,-55.22190697025331],[31.103715083249227,-55.23017789366717],[31.792833395756126,-55.380633957070025],[32.46269357492662,-55.74350100853682],[32.62889126209163,-55.78778527054424],[33.1658605180907,-55.872987069508795],[33.532156029809684,-55.88687617376646],[33.73313755423474,-55.97032663610871],[34.441152364595254,-56.040627630996426],[34.48057136091389,-56.1171856987862],[34.35503750336242,-56.252246390803634],[34.45912787979764,-56.40942250686285],[34.70725913991961,-56.48845247477884],[35.10677196231915,-56.53140953505975],[35.63544973941866,-56.53618632763662],[36.2683023725282,-56.4905054466885],[37.299387822944425,-56.28373145410467],[37.76418095941743,-56.38040786399215],[38.209083129237776,-56.41842298146813],[38.61144726888814,-56.37426991744331],[39.25475925980547,-56.234294227286625],[39.492518535704356,-56.21402143825606],[39.791799004443405,-56.12366158951729],[40.14145304122473,-55.96942019165645],[40.497492450653226,-55.78445588219308],[43.092404238029985,-55.432468303879475],[43.45150579781013,-55.46998740441804],[43.78409733274765,-55.568781525436584],[44.01827773386855,-55.764868760656086],[44.063036568081145,-55.862044945963206],[44.10167363245096,-56.292579044668464],[43.965761284526,-56.515198788052864],[44.00760775121856,-56.63961060834176],[44.21485864673582,-56.736720778557],[44.40998597557661,-56.7507888609514],[44.65760212553397,-56.677172607460776],[45.26010823313545,-56.23437252267043],[45.53393709048051,-56.186332095507176],[45.70035659752948,-56.24705758800264],[45.79705093111482,-56.363023623896396],[45.97720198839418,-56.42460586023197],[46.20181972816909,-56.4268806662082],[46.42217186607035,-56.32798775348537],[46.45758102676362,-56.25260468066639],[46.70288997027767,-56.060419160228044],[46.897272928745835,-55.96961372357042],[46.96534363590772,-55.73567061176172],[47.37833922081092,-55.589511700046245],[47.4491536229552,-55.435571284531115],[47.45035450450124,-55.25021750852145],[47.374277634821524,-55.10603802219321],[47.217562896970385,-55.041236396348836],[46.706439608747445,-54.97797053848251],[46.40549648236659,-54.909196635295096],[46.23174878110985,-54.773905879612514],[46.11680319899074,-54.73441575591583],[45.93740377050288,-54.56920999894269],[45.88504204407791,-54.371807396979555],[46.01048981661404,-54.247189359460535],[46.29600062816112,-54.18162425420842],[46.491850084736456,-54.08358584938931],[46.93419019387404,-53.706592368651116],[47.20986633794782,-53.5472915226827],[47.44975989523687,-53.34344939416615],[47.705970305810915,-53.0837775676751],[47.82041319281179,-52.92693544900483],[47.98457575462698,-52.526708582554974],[47.99712540837824,-52.18722829758727],[47.93036408293247,-51.95410452132763],[47.822963903683956,-51.772871339511155],[47.588571193358874,-51.54655615929419],[47.40516912419355,-51.44965529854659],[47.18016991529713,-51.40958939239812],[46.98866921780146,-51.11608657598193],[46.740760390257506,-51.17515151949074],[46.38103870410559,-51.184311306668384],[46.193217494366046,-51.11761926136067],[45.926228688955646,-51.235760884522705],[45.226891057578705,-51.00742633725492],[44.83291717222983,-51.144981857639046],[44.60091464084951,-51.186957774397065],[43.813135311787136,-51.225262667918706],[43.282015165324715,-51.3364621083425],[43.05528132750742,-51.176012390248545],[42.85824411478687,-51.25243160488693],[42.56067599074849,-51.06271418110913],[42.454942663856194,-50.92638494945708],[42.42252319560859,-50.563068415445414],[42.24963236683861,-50.48076148516227],[42.064686095421,-50.26752189830786],[42.04322888026133,-50.056428630066684],[41.79441373540688,-49.896147154481845],[41.59559408705114,-49.83959475051187],[41.41511862545073,-49.657154748649475],[41.35046911310887,-49.65698769217699],[41.15011236031368,-49.44131454425635],[41.1236336667782,-49.256066228953514],[40.96765349688798,-49.01064758786943],[40.94607138353791,-48.854449110355354],[41.056089895984854,-48.75470998676572],[40.99103226293645,-48.62723343131249],[41.13890206162125,-48.45523666693729],[41.3030432494887,-47.98537487529906],[41.419675961854836,-47.915221565760405],[41.36924138983298,-47.76736160666619],[41.48200327761686,-47.65403039111164],[41.51096024426994,-47.47925141599118],[38.57513098038582,-47.613755764820866],[35.39532164587088,-47.745341723635285],[33.02963784586749,-47.83173748398703],[29.89510558211698,-47.93157473174307],[30.172206850813353,-47.837227800710515],[30.323651318476198,-47.72806344593669],[30.315851688482105,-47.59386400998455],[29.928237987947554,-47.36812582233414],[29.928357319329994,-47.281844498145716],[30.127274575499875,-47.05709402028256],[30.08316887943337,-46.944223640987055],[29.772911487606184,-46.79506198523065],[29.781085381818777,-46.635111052588975],[30.283796129537798,-46.642448032300535],[30.522790753194126,-46.570202741701586],[30.560503846177163,-46.36392076006198],[30.319222005982883,-46.22685517577921],[30.31803408520602,-46.04471157613793],[30.182947474438844,-46.074632152239126],[30.118952773204782,-45.969999563919906],[30.288667634155512,-45.796809552052146],[30.400617135694066,-46.00462993052711],[30.57630510716313,-46.12468349365375],[30.769492960013174,-46.088060110707865],[30.763503871826327,-45.95881058609916],[30.58759278239539,-45.849777673429436],[30.49728144827107,-45.731308961574136],[30.452662787488997,-45.299069488974695],[30.694452159338667,-45.288294226868615],[30.884177839090693,-45.22537909826137],[31.09260347040591,-45.082272641228805],[30.993567621460443,-44.9452336199678],[30.611525359855666,-45.01142470844938],[30.41677615030726,-44.88145687746803],[30.524197555665125,-44.715467433007774],[30.737196617361736,-44.835572192788504],[30.9868581812678,-44.873342805463444],[31.11782422442552,-44.82208023484961],[31.14041708980422,-44.700617209539644],[31.10865601856145,-44.35812562389832],[31.263668369123373,-44.17017470173547],[31.5548897652602,-44.14366616315775],[31.804835043583182,-44.162136576063105],[31.74913940995634,-44.02391676138005],[31.387974334949785,-44.10784923048225],[31.28628533362601,-43.98148464178651],[31.375404026749326,-43.665207954031295],[31.673780797720585,-43.56834375342127],[31.758946567337798,-43.79720245579836],[31.88900715580514,-43.82566417036314],[31.979247728665015,-43.69907087388232],[31.846296549904228,-43.539250625794075],[32.033908508190294,-43.466103035179835],[32.22057876810456,-43.29471962654843],[32.27929908466076,-43.019300087099175],[32.414141474416844,-42.90295163347925],[32.75744234205274,-42.854302367838216],[32.93365523276877,-42.7029047915429],[32.85814710921028,-42.61483941027547],[32.53116054790444,-42.56593861182257],[32.39965413767137,-42.48518786366061],[32.52874867624489,-42.37490290231188],[32.78495255432622,-42.542049716198555],[32.885892541174385,-42.37509739882212],[33.12741694258222,-42.26443407215226],[33.16539379073121,-42.144352689699886],[33.31238793833236,-42.019847644069564],[33.317756380881946,-41.917144111189],[33.03870550448749,-41.9531185516379],[33.03220004122343,-42.121725504212456],[32.85581540998776,-42.08476852990535],[32.683032955957856,-42.141168714110016],[32.36894115303403,-42.1102392991357],[32.28942337306968,-41.982013427967054],[32.33360149673331,-41.7749143790677],[32.51480131642943,-41.67322716890666],[32.61513522942847,-41.70564004074387],[32.80906835039646,-41.592034967542716],[32.94566792349467,-41.628607415693594],[33.09961556704075,-41.49958762396302],[33.416098512699755,-41.64711195267731],[33.48395815408179,-41.42790212157608],[33.38613415024095,-41.28140300702086],[33.601916241586224,-41.25373521961374],[33.78397328217413,-41.13783284564212],[33.792931478599876,-40.943163843592195],[33.34343798181168,-40.894447649964576],[33.229660172506996,-40.8148736547427],[33.2794251437694,-40.613554552634206],[33.44109009866413,-40.51543542398537],[33.26297907930371,-40.35752021416425],[33.06879580330862,-40.457767264896624],[32.66483442748882,-40.34524098659139],[32.52294908808358,-40.21438794431068],[32.510416313764736,-40.11719011341619],[32.62949992474779,-39.84284476263585],[32.91371375283178,-40.11000322758213],[33.21379992784079,-40.18719997947957],[33.28199818147032,-40.09554378762899],[33.08951195948867,-39.97934687333774],[32.85039352979729,-39.91866913744455],[32.706374807682025,-39.79928816455226],[32.99135305077013,-39.639352125530614],[33.14425263655427,-39.472956288527],[32.99878994938308,-39.288377332058445],[32.87021508410606,-39.51221317618984],[32.45266942562949,-39.65278974726682],[32.31843646604245,-39.58010294268577],[32.24394769252949,-39.350896490794135],[32.392288162796675,-39.19831755220897],[32.750130516330444,-38.98439237853806],[32.75992359257443,-38.84664013274805],[32.37083034005361,-38.7743984426283],[32.22599503664792,-38.787260012105385],[32.123012924737054,-38.702195401096745],[32.12774615337138,-38.39503886527487],[32.22370183024281,-38.20919924067035],[32.44428416019176,-38.12312639929837],[32.641366449449336,-37.94379462537195],[32.661753806834135,-37.728364334234726],[32.56267274735416,-37.63720186581623],[32.512558986050884,-37.450851749748],[32.39041385525742,-37.38352511980817],[32.224341468586,-37.44070844298501],[32.26640418858472,-37.74192387115706],[32.08284982053173,-37.90511974244869],[31.884565480949565,-37.87161262368372],[31.783609821772767,-37.788684006827495],[31.834790477875785,-37.564176236215374],[32.031614119470305,-37.31145749031048],[29.530089104121256,-37.39567088628889],[26.834115214817892,-37.48159696708304],[25.77272847394905,-37.508023486561044],[23.754396494801465,-37.54852914091689],[21.134675563728955,-37.59106294839715],[18.221534641938934,-37.65330840414843],[14.938844508169291,-37.70994947256987],[14.973190192831003,-39.073327638286536],[15.039210349022449,-41.46029194166757],[15.090954695099137,-43.26776292788101],[15.3110766766616,-43.39914298465211],[15.535829002264233,-43.673526769679086],[15.948119608194819,-43.80195610973413],[15.958300498573687,-43.89873835155138],[16.138658999991637,-44.094228900393304],[16.12981742183856,-44.16835784709262],[16.34750240095119,-44.277755930611676],[16.452934364447202,-44.413247174041125],[16.37051854504374,-44.53419580385294],[16.63412438448574,-44.77506388525528],[16.466004656392784,-44.9260682615788],[16.507486285743227,-45.18483605192617],[16.38679814027283,-45.26168565804616],[16.499371457087996,-45.504309064390384],[16.721033849602073,-45.66246643859487],[16.977953042322017,-45.656903949080025],[17.119969101035867,-45.75653741462817],[16.945994427507745,-45.94479022141172],[17.295878746272127,-46.09563746981775],[17.22619186077742,-46.22733914200992],[17.415016003408724,-46.289534335143514],[17.462188197644466,-46.44820746404799],[17.429631415860452,-46.65344048510427],[17.348925726434185,-46.71886355520514],[17.525334094201675,-46.8566652233134],[17.804771424618284,-46.96311708848324],[17.783284799407987,-47.09170997370907],[17.972526553080915,-47.41513656402056],[18.213105211538483,-47.31051957512991],[18.284479016936842,-47.654713908139335],[18.142992710084574,-47.76129376128045],[18.36651502856814,-47.85551031397793],[18.38768507393181,-48.019067452225855],[18.30540826762213,-48.16772265822539],[18.14871916219485,-48.25451656577226],[18.369425040808842,-48.56519565562267],[18.21348424943591,-48.83462902695043],[18.249277929216845,-48.98811165854063],[18.027290473743555,-49.32621373889332],[17.890050877357627,-49.36394352501423],[17.932790365780814,-49.53508084167189],[17.802736100754238,-49.728286895585875],[17.492558368881348,-49.90448713939489],[17.527871827095694,-50.11841840330249],[17.313898458053192,-50.1515997762754],[17.168662092746597,-50.3669133025027],[17.371856537395686,-50.50529931632715],[17.31262456375672,-50.576578627740126],[17.435479426365497,-50.826230951793846],[17.07986477695998,-51.04814010416887],[17.04803295732638,-51.32006816270609],[17.27007744975628,-51.46629762517567],[17.4216090849371,-51.49410315795654],[17.433289504682293,-51.63001257127399],[17.335076797081747,-51.85653410553063],[17.520580849091207,-52.175901030015076],[17.335316217115032,-52.36315658967231],[17.36247149626637,-52.536777673755076],[17.250703873429924,-52.664467576626215],[16.946365879243835,-52.83061407780028],[16.849575534911306,-52.95744128308013],[16.712808131528906,-53.229887410981405],[16.53597613829947,-53.37923266027618],[16.15398994441837,-53.55902210209862],[16.119862695571317,-53.6515120285313],[16.311532463824996,-53.75680294002934],[16.375878899593452,-53.87962853880653],[16.49331460174898,-53.90648904440363],[16.70253829026303,-54.09502765283123],[16.860657166854118,-54.481653916024285]]]},"properties":{"name":"Louisiana","ns_code":"01629543","geoid":"22","usps_abbrev":"LA","fips_code":"22"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[107.02450930933394,10.962213468970118],[107.57852947899858,11.801574062023647],[106.7226389247445,12.369760716237415],[106.38580292615627,11.863649052603156],[106.56947347409032,11.694342116262495],[106.71564066176406,11.678377301226295],[106.97781571304941,11.37570967472036],[107.02450930933394,10.962213468970118]]]},"properties":{"name":"District of Columbia","ns_code":"01702382","geoid":"11","usps_abbrev":"DC","fips_code":"11"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[118.3067932714886,7.778400879750187],[117.85676156328286,7.671075057818993],[115.86945854147275,6.999974523535072],[115.78208881922629,6.78039113526925],[115.81570007043307,6.643084432114052],[115.56479776441456,6.650970782676073],[115.2035100220737,6.469764396734147],[115.03224053131896,6.219182814020738],[114.21520455624739,6.005390282154803],[114.20483340053009,6.291074745864971],[113.92333528821048,6.2850607463882975],[113.60353019997696,6.217904783329489],[112.71322020741007,5.547140766699677],[112.55480126611815,5.646505444821286],[112.05400179117531,5.8313624280248995],[111.61778313716428,5.894552790988313],[111.26497024178423,6.164431845021574],[110.96392881820609,6.201334789340535],[110.79292178299136,6.508536736465467],[110.41368495631839,6.67352154417733],[110.27534463995715,6.949119177250992],[109.76423944970331,6.9381762491140595],[109.21310937642242,6.880729891049097],[109.00759593996705,6.800503754111768],[108.8144942263293,6.820315367767952],[108.53957556350498,6.968444504341259],[108.34658141031935,6.993806006983769],[108.20592913913912,7.319514231146407],[107.9603678037902,7.439302838248477],[107.7549448201775,7.627205271568506],[107.8116028498248,7.7896504098989094],[107.72065366460163,8.132241548419186],[107.50704304545368,8.212217099466644],[107.37053886973963,7.960236779041609],[107.09319283008956,7.905609080569285],[106.98629573448682,7.722731291221307],[106.61401146600438,7.552027785342525],[106.33544775141952,7.572001970673087],[106.17493884982565,7.776248319513229],[106.0066345139295,8.179100664374609],[105.96155155630765,8.4552122797489],[106.17692253658599,9.142806962729404],[106.18498372412752,9.362784532874336],[106.38098125190368,9.580670824623118],[106.75802681570752,9.775026681914209],[106.70447042222509,9.855101870874512],[106.72432058583891,10.134171508578872],[106.91377004148188,10.335655864502204],[107.10555832374921,10.449941629139829],[107.02450930933394,10.962213468970118],[106.97781571304941,11.37570967472036],[106.71564066176406,11.678377301226295],[106.56947347409032,11.694342116262495],[106.38580292615627,11.863649052603156],[106.20849115641765,12.03577091393761],[105.91959900414291,12.004873330505683],[105.64329033725602,12.064808452571778],[105.55752398012893,12.187190189758573],[105.58649122524825,12.337500818983386],[105.0175638232132,12.519051529224463],[104.76735822375218,12.465739464204814],[104.35269871072487,12.475921282043297],[104.19984253622071,12.667473167947952],[103.9788795583627,12.72589643248786],[103.89334227214505,12.904001535121626],[103.95169115562369,13.16123559173858],[104.08419125701731,13.233427759504695],[104.1586527947449,13.512474715193989],[103.98417499624469,13.629353967900819],[103.65622653354558,13.703633358692551],[103.44924718779949,13.957582019946177],[103.34854898444803,13.903809242564225],[103.04188544235926,13.896497218025093],[102.85195172971495,13.971644326188752],[102.61980388839608,13.906021594134234],[102.5055965226112,13.695780022089021],[102.45804469388976,13.270594470621978],[102.36316340811261,12.996981999255743],[102.29137242727693,12.497391979015086],[100.23537486010756,13.617789195945491],[99.57884463135807,14.002004346926869],[99.05801977191796,14.274032231640845],[99.1110546778112,14.01091338499088],[99.0649471447182,13.870312868715665],[99.1814734743431,13.747693175570177],[99.09372837426612,13.521501156574793],[99.24329563545716,13.508479102653537],[99.18293891446149,13.240601528285222],[98.94636038678883,12.76820103305163],[99.07062222555913,12.693686724257637],[98.92128041798566,12.338960961692365],[99.14875991714321,12.163215693155594],[99.04270900372383,12.036262373883801],[98.92108895121618,11.738341846504971],[98.81806170554457,11.685316556282132],[98.42233595914288,11.056526158799564],[98.5563120841372,10.980772621067437],[98.35012669273871,10.558510554460948],[98.17814196507074,10.644324054757904],[97.97572759166393,10.207439415975971],[97.78748856649054,10.034645003671882],[97.65609764636524,10.162694624441425],[97.58288433787857,9.957640986937298],[97.44633076144467,9.821856307387478],[97.16449576604509,8.888749016995671],[96.37822007120101,9.376825893819303],[96.16245804182759,8.917730671676216],[96.02976748945055,8.24421065054114],[96.0843981566309,7.952638331669311],[95.88505363554145,7.864998314899123],[95.81364810862391,7.416434803801922],[95.64177381229904,6.887897528114855],[95.65603840781847,6.660766536044776],[95.46382074559065,6.357872448893635],[95.3665047916681,6.109971044115402],[95.20447375493806,5.991618792049074],[94.25203597869555,6.154308939408794],[93.91247239561783,6.652463108093504],[93.80753809203428,6.757675551006282],[93.14679373698812,6.93800987528841],[93.09771411831886,6.776399592616325],[93.07771723316002,6.338644139586805],[93.0164259658284,6.065793423767053],[93.1228344719632,5.770985227763005],[93.049652717933,5.643933706031471],[92.9290262123249,5.169314120673114],[92.62182396960813,4.762025537572494],[92.78047672154786,4.527136266021934],[92.48806924181659,4.219184814758034],[92.2794876295372,3.8923566955749966],[92.17102028284279,3.482899500750651],[92.22536696603038,3.254170168887328],[92.1075054122022,3.046815420359259],[92.02583427659216,2.6396705048767277],[91.91330570240768,2.3521712248644686],[91.63551556913507,1.9738872705087],[91.31816241750565,1.4710359816021426],[91.20997241669842,1.388496928566473],[91.03696149862323,0.9274684819353612],[90.86302577366178,0.549832622475238],[90.81936562423866,0.32406661816427645],[90.86588177783646,0.20239854299867527],[90.69102740015576,-0.037713989689612766],[90.9026655870174,-0.3352232621154611],[91.18118732208349,-0.42292541482266144],[91.01018557122244,-0.6872003359789802],[90.66288801371131,-0.9728205749387263],[90.77341381978039,-1.0865021501949967],[90.88787594493938,-1.3445321475500915],[90.26083617076304,-1.8747511180689256],[90.01587980751174,-2.111694851003894],[89.8950870850492,-2.0431345828675482],[89.87895389657382,-1.8803410521982176],[89.74913042826057,-1.727136942716769],[89.53374861068022,-1.8216506989808705],[89.07401827773097,-2.2717914442330533],[88.77736378684925,-2.5207245334328183],[88.4435042313688,-2.736968776787344],[88.33980793412992,-2.5917208742452345],[88.00787698519008,-2.418691707674528],[87.88376297055528,-2.541718437606635],[87.803074099317,-2.75565373068083],[88.03270763593724,-2.9885880773082483],[87.79756746953558,-3.2457542367928363],[87.5284866058359,-3.447539093962545],[87.31978638193326,-3.434244805486392],[86.69472696891604,-3.684289120770852],[86.36542666184498,-3.86506391958456],[86.07409784481197,-4.114410222775852],[85.47475673503547,-3.739062436408274],[85.198863118523,-3.5027713580828648],[85.04398452322059,-3.681519575777571],[84.96730465743964,-4.0075044313646195],[84.85250765118431,-4.019014795016701],[84.23994639207109,-4.602745423639396],[83.59141652004418,-4.738501356514239],[83.20803399304192,-4.533451321050716],[83.14754013738052,-4.356304508459577],[82.88451887809933,-4.243201755981756],[82.68679391465419,-4.309947195317347],[82.52383713520493,-4.273363444020781],[82.36722654421125,-4.006424744900486],[82.2281913885714,-3.9836101404907174],[82.02970052420724,-3.8155342912020873],[81.96521784604107,-3.6653589258340404],[81.97443156428163,-3.4339744294449983],[81.84940980071029,-3.265629321886453],[81.56950834207984,-3.15666437463107],[81.52891763447363,-3.0478717123518395],[81.80460992959269,-2.745920527857291],[81.6223371843472,-2.587927429285713],[80.7816945854411,-3.6076724342930095],[79.94509049301482,-4.6007822120667345],[79.7558280755132,-4.843389288419118],[79.30499090834273,-5.039648788852507],[78.7319608909541,-5.429389631035415],[78.31853561518327,-5.852009975600172],[77.89809284222356,-6.144913834565614],[77.883418680728,-6.497131813362149],[77.82324325606345,-6.726721255990658],[77.63420576456225,-7.005578398345154],[77.37999883964847,-7.0554310901879544],[77.38031982661391,-7.143730352815437],[77.18371868820515,-7.316707422239279],[77.29476761601256,-7.62218706946402],[77.2141028168155,-7.918575341000643],[76.74018704831747,-8.208409981691986],[76.16350725523861,-8.31245785922691],[76.0346115651762,-8.49751409811735],[76.05977310356245,-8.620840430461854],[75.92548730036826,-8.910013497625178],[75.9233191069052,-9.148304761430403],[75.59458640663296,-9.214712713517946],[74.77149942712623,-9.60600834392468],[74.4024765151628,-9.879927180112738],[73.98467257998134,-9.924132478057059],[73.76736951422563,-9.991753404861177],[73.58568582077532,-10.148619607842486],[73.33736989712013,-10.260780987662114],[73.02334235874751,-10.544509541001828],[74.01365918116866,-10.441966429495706],[75.2700694672899,-10.270181350235596],[75.35966547147387,-10.28904611852714],[77.4574389103767,-10.009527111662164],[78.94780690658617,-9.801192376388617],[81.2580462916417,-9.458633999196023],[82.81238206534643,-9.244105793510057],[82.85350448747016,-9.079908288255261],[84.40452888412263,-8.879944664676708],[84.25923764886333,-9.07272836103646],[84.69417097697749,-9.016715872885204],[85.14972146071612,-8.993892905179065],[85.97107549461133,-8.9098053559797],[86.46370052650293,-8.831530805045887],[88.03633737522944,-8.666843901529807],[88.98433986405772,-8.55123222421043],[89.59676369120042,-8.430713614571244],[92.05795966983088,-8.163121246954093],[93.07544938449347,-8.003906209399869],[94.34049032550311,-7.789078313311727],[96.15390941767419,-7.49171742734163],[97.90725979563915,-7.184047487190085],[98.91049332540015,-6.999285202839742],[102.03220849372849,-6.439587074293968],[103.48674873875919,-6.142903433833908],[104.08416045667515,-6.035991800944563],[106.27229445365657,-5.604034942250461],[108.37437941961872,-5.1992883374297065],[110.89817971942948,-4.699539299186722],[110.90620142859268,-4.6376306239069915],[111.5383541465546,-4.520289151029984],[114.37096307218879,-3.9339119830992018],[117.12108169757701,-3.346380359213608],[116.88452963506711,-2.851218740888135],[116.40026891774137,-2.078427094631183],[115.82118807210932,-0.7877393623412244],[115.84786004236004,0.08762989253020201],[116.12466780503196,0.5568651268613205],[116.31800284729766,0.7974669529557522],[116.4524792246928,1.1598182584124188],[116.48434059712677,1.4212873750070152],[116.42388263774896,1.6203250333932682],[116.47028892937581,1.8513209139187012],[116.75909286242991,2.404412768211719],[116.71735741369577,2.6206502938536507],[116.85824096635464,3.013251942369583],[116.83735264452206,3.329352573422831],[117.05819370898787,4.081784227924687],[116.91614631577552,4.380509033653408],[116.95655004309509,4.869937704798775],[117.10292182454671,5.634898013679003],[117.26519984923561,6.034986968821054],[117.55631632646725,6.0161590785589345],[117.70523555835028,6.088774455480712],[117.88643698026789,6.352438328213558],[118.06199361496972,7.04794170277495],[118.3067932714886,7.778400879750187]]]},"properties":{"name":"Virginia","ns_code":"01779803","geoid":"51","usps_abbrev":"VA","fips_code":"51"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-36.43045257757133,-14.240447606823222],[-36.65416668109671,-14.224725853685417],[-36.91456613305394,-17.678785956695073],[-37.119183063057974,-20.224301378073704],[-37.24548351756329,-21.769812299292997],[-37.39917350316916,-23.65205673675902],[-37.59656998612709,-26.060917930965182],[-37.83021059438795,-28.779162187074043],[-38.01262163867694,-30.881984496177594],[-38.17054164269268,-32.32517493592396],[-38.31871434071027,-33.71004562798746],[-38.65224228164232,-36.67179220592704],[-38.785012211063425,-38.067669528922025],[-38.91890577599681,-39.48755482895051],[-39.06499942679885,-40.97873789125463],[-39.183416535501486,-42.18978778747151],[-41.05067528277907,-42.085377021019234],[-43.28841465475426,-41.953560297268346],[-45.380024749776325,-41.82453533742719],[-47.59593062478979,-41.679483766598096],[-50.7976674670213,-41.457111895520065],[-53.367431728254395,-41.26867749734346],[-55.17545508789623,-41.125723278127246],[-57.53493890768654,-40.93432655062959],[-60.486531990786126,-40.7002276832302],[-60.628605077616854,-40.79825282043941],[-60.560079919540605,-41.04568132475225],[-60.731545970681054,-41.25462960466579],[-60.6983005555485,-41.41241564196411],[-60.391074635530565,-41.73932804647357],[-60.21299139256785,-41.77086392694232],[-60.11877282891669,-41.90839834598665],[-59.91962872779291,-42.108150913884806],[-59.67261750099027,-42.04548349896354],[-59.27560477380557,-42.25072559688692],[-59.11394035939658,-42.4521959021443],[-59.05010514517801,-42.63044510995069],[-58.91599839928484,-42.824283715571895],[-58.80145155757729,-43.19196470704422],[-58.60718917596187,-43.33059986726018],[-58.49862310426012,-43.63389600132568],[-58.39582730153575,-43.741653922907915],[-58.235861746594196,-43.80262616101478],[-58.01551843536743,-43.96497556182682],[-57.883361207806495,-43.98583840498384],[-57.692740997034655,-44.13189204805771],[-57.28385895133181,-44.1877460844211],[-57.077105712543684,-44.343232353824526],[-56.98302676427084,-44.35645107310257],[-56.88912589395674,-44.62909119124586],[-56.75051728439277,-44.63960806344209],[-56.684820349118674,-44.754173234673836],[-56.530611622548136,-44.7776282691324],[-56.141273763636484,-45.24715928858406],[-56.043584313869694,-45.42528132464498],[-55.84857516402006,-45.46093405777244],[-55.67020907731852,-45.616247134184086],[-55.324170462246315,-45.74174664907451],[-55.298707840105244,-45.82529597368043],[-55.08949205763127,-45.9117484750017],[-54.97997595459568,-46.06096337434372],[-54.96072389987036,-46.24810683346395],[-54.86002074487828,-46.40411225600299],[-54.71466934805146,-46.438876190021766],[-54.534435844013004,-46.618898054732675],[-54.264361190969,-46.76636781413029],[-54.22117711466183,-46.84292648418048],[-53.97430213504034,-46.96490109038332],[-53.92189823927155,-47.13985772683705],[-53.641931387310045,-47.221693330868575],[-53.12997388514514,-47.45724996760292],[-52.92794642817866,-47.436944548086124],[-52.356901658216096,-47.77884878279583],[-52.064714605202894,-48.069761887660185],[-51.85103544662412,-48.117468770936966],[-51.73176768057509,-48.092463640302114],[-51.615489891259955,-48.21222292821927],[-51.56158107024156,-48.46826702368632],[-51.33836184256619,-48.5311317317143],[-51.14645007207857,-48.67984050107292],[-51.043278785314655,-49.041416445679694],[-51.012600658477204,-49.364359312570905],[-50.93689837736119,-49.43036756120161],[-51.024023969786015,-49.53166072221147],[-50.74597905962235,-49.67848517628454],[-50.77082123583404,-49.812495318315676],[-50.48441449175136,-49.982781482527436],[-50.497394075206316,-50.093470637024915],[-50.230983447329685,-50.28755704255872],[-50.10832361918673,-50.56193988223815],[-50.203657108211274,-50.908038975150006],[-50.16409078647587,-50.99989733548304],[-50.31645095108647,-51.135013901234366],[-50.31344174311925,-51.253774342098],[-50.21476094625068,-51.49174448445844],[-50.211295692068475,-51.74264492971583],[-49.982052582242645,-51.95190920663388],[-49.96465352422183,-52.03760028094824],[-49.69925876010882,-52.35722723042778],[-49.65992138426516,-52.49471746902375],[-49.547903050710985,-52.54890160606767],[-49.55142734108448,-52.80663924604674],[-49.442630907059645,-52.87875604944297],[-49.392517876638784,-52.9995354724816],[-49.17228669108151,-53.054541522003255],[-49.11920810173434,-53.1401157422997],[-48.72389454343701,-53.32191038197654],[-48.70875863888986,-53.389461146712556],[-48.38102448100134,-53.560549885561294],[-48.12250873846204,-53.55723754174872],[-47.91506557954622,-53.61316570900587],[-47.60687678664225,-53.764839449742766],[-47.63884890117427,-53.897202341154795],[-47.465508080350496,-54.00668059865191],[-47.4068610585228,-54.13450610691889],[-47.24943570365673,-54.21915150697572],[-47.03970899066944,-54.24799092625822],[-46.903769323166145,-54.36907202221405],[-46.53971479511181,-54.52858188094093],[-46.25065225816966,-54.6090562835707],[-45.96425329717322,-54.62992979462354],[-45.586237591619955,-54.71081815382761],[-45.09982557830361,-54.79135101017075],[-44.95701993172958,-54.98481580439277],[-44.74493360467757,-55.15489068941814],[-44.65076337997382,-55.14459883475439],[-44.23021796310958,-55.26942628564728],[-44.00175066790639,-55.3070121024209],[-43.75477398064208,-55.30364313667931],[-43.56605692067789,-55.386900120014175],[-43.140809436754004,-55.6946677090676],[-42.771902991297374,-55.887699686377026],[-42.47346057872314,-55.90653087066791],[-42.032246173102926,-56.023965146211374],[-41.94511238875259,-56.088496983920216],[-41.651263097064565,-56.073875419464],[-41.34856093923259,-56.14889504548519],[-41.107706759375006,-56.0547207225765],[-40.9698797118997,-55.94357166921712],[-40.96622307105088,-55.80887607039149],[-40.65719622478635,-55.66061448983774],[-40.53260166183712,-55.66493365313059],[-40.39792164281943,-55.57368563512137],[-40.14486633719501,-55.33519952991228],[-39.9760646994234,-55.37585074340834],[-39.7598051077504,-55.329468677123536],[-39.43401524457774,-55.21226499008347],[-39.44745831767723,-55.14304476140679],[-39.65598954052229,-55.047057718736994],[-39.52678129835877,-54.924046443711624],[-39.54837572140662,-54.85821432064348],[-39.430222641554494,-54.67487934545038],[-39.22760759083148,-54.67136713278361],[-39.08537871876717,-54.514723763590204],[-39.109784313478016,-54.366144238549296],[-38.92173717217269,-54.11654203404293],[-38.91297961530434,-53.99489326557843],[-38.7179992792156,-53.91693289600905],[-38.63177204850429,-53.70481028209713],[-38.45379140817187,-53.69751541399656],[-38.396668625874135,-53.51330518816206],[-38.12588787900349,-53.376385027026494],[-38.14752029511003,-53.296069673160545],[-37.99292204906135,-53.10757677776698],[-37.80222199215052,-53.146425748047186],[-37.335640109923595,-53.06456978375467],[-37.19303413632815,-53.12560823062165],[-36.966310221972726,-53.040763995870506],[-36.96961378141359,-52.96429308322684],[-36.71619539925852,-53.0103983518395],[-36.474947817271456,-53.01627482263486],[-36.297300651537334,-53.074098029286915],[-35.8593091743314,-52.643181853243284],[-35.59874113867558,-52.61758816156744],[-35.37264998630426,-52.73133134179629],[-35.134123765894515,-52.796563326157624],[-34.92714678778861,-52.76821129481724],[-34.76311247680832,-52.92209077758011],[-34.50720263254393,-53.02529920281612],[-34.30659220353553,-53.024338674318635],[-34.09257560435469,-53.07294353938904],[-33.66287956689007,-52.96305311321688],[-33.51065223948199,-53.05353483311276],[-33.01918215787093,-53.07854495384272],[-32.853059381195706,-53.02675295542544],[-32.78363845954687,-53.089129704217],[-32.486793263747344,-53.160509958054696],[-32.44683272906489,-53.118864322325784],[-32.02153607919557,-53.24803830303038],[-31.714923750145648,-53.2235851320837],[-31.622720505286768,-53.29742000168309],[-31.365572049830597,-53.222930656146666],[-31.187874077056804,-53.25075882089766],[-31.114996271967946,-53.12628313028295],[-30.913250002576337,-53.137856928093],[-30.95399818408758,-53.290161156081766],[-30.71257182719266,-53.281054416100254],[-30.427998328712846,-53.195971929795846],[-30.40054282356302,-53.356584598241824],[-30.196473280547966,-53.381317013213156],[-30.102006832529547,-53.51026312476579],[-29.966091240177583,-53.57937527654981],[-29.910639373545454,-53.78936389691177],[-29.811793387465585,-53.75223054168542],[-29.60438933663708,-53.77244419194372],[-29.52440274970297,-53.85252382432415],[-29.606771810613946,-53.95645691911072],[-29.618392227463854,-54.08305420005241],[-29.40709449229023,-54.06614092139602],[-29.41363727415469,-53.963598360574856],[-29.294504142054056,-53.902591954346626],[-29.189061401077016,-54.181181737942524],[-29.325000946933628,-54.2947598048604],[-29.169180112422698,-54.349462052445354],[-28.79235040751544,-54.40429544580283],[-28.670833648952403,-54.56402141117131],[-28.272335504149023,-54.607894143920916],[-28.10897583179292,-54.65740428093805],[-27.98277011187157,-54.87781238667992],[-27.795647187259572,-55.05323947792493],[-27.471413772807825,-55.132399975648674],[-27.41774829708328,-55.190227438738674],[-27.08919196305096,-55.306056088974266],[-27.044896182705603,-55.416869329135835],[-26.57110664192068,-55.560231834798074],[-26.381789057048078,-55.81888072979654],[-26.44789197916311,-55.86711887538201],[-26.222817803102195,-56.010395092393146],[-25.846413407619224,-56.17342061693508],[-25.786048366373635,-56.28048934844292],[-25.77718432649865,-56.44934647836222],[-25.716081806966628,-56.57402490329993],[-25.722969064110245,-56.74941742685186],[-25.643498976645432,-56.956749426306516],[-25.462482048045374,-56.96397795551231],[-25.324769149883096,-57.227372522224364],[-25.138906086458697,-57.271680079788325],[-25.098868941472343,-57.44250083045115],[-24.92377697021662,-57.600787339784496],[-24.95824829138327,-57.78252570210978],[-24.904849731281455,-57.90038005506035],[-24.671983918791767,-57.98509334272168],[-24.591645263368502,-58.10417464075011],[-24.29183669962513,-58.205153091350454],[-24.383855182166776,-58.327370994147316],[-24.243098407197824,-58.47242041985603],[-23.919820469965774,-58.53140145237123],[-24.135367453597052,-58.620007938881976],[-23.97893802073235,-58.7179997724983],[-23.95164755597807,-58.79028946595417],[-24.04343190519548,-58.89419099477537],[-23.840736785159848,-59.102681848885304],[-23.68926835649378,-59.21164685518388],[-23.735327937240402,-59.32918345785736],[-23.519607313760698,-59.493683880169016],[-23.30612983997891,-59.517006885410034],[-23.24159209127263,-59.66735397823425],[-22.4721291698901,-59.85317405974845],[-22.27800864145192,-60.078360771015824],[-22.06792416967971,-60.1476590137674],[-22.00151784625983,-60.3186834422505],[-21.905676696768708,-60.410534608369304],[-21.543160531293793,-60.4597901940394],[-21.59359643857824,-60.55299955331471],[-21.470953875775617,-60.68142165534095],[-21.324668523543203,-60.749645305582256],[-21.40075566086806,-60.831151854547464],[-21.262392629834704,-60.92297277409391],[-21.220940304354375,-61.110854248432204],[-21.078449316126942,-61.12326081562001],[-21.04294937821407,-61.206050068819124],[-20.852364647911937,-61.19098376901057],[-20.78888848372251,-61.30241317862456],[-20.59577627770044,-61.33898369147564],[-20.302254961110762,-61.56861924048734],[-20.198077059514418,-61.60843328944713],[-19.970553996281637,-61.59566524067656],[-19.959123128953046,-61.676518116114856],[-19.78925088186257,-61.71105455741937],[-19.560590556148,-61.663844160953055],[-19.402573894662826,-61.74547945585151],[-19.17909231541283,-61.791778864093125],[-18.994262750039326,-61.93404588855055],[-19.06864680307727,-62.000909254053745],[-19.12175447098137,-62.151498888876404],[-18.920776055578994,-62.14980694606917],[-18.81468251671963,-62.22278662876755],[-18.922514352757645,-62.31057459890803],[-18.885781556133672,-62.43673697070662],[-19.010796293910836,-62.6751728453172],[-19.230953840907688,-62.74567335922344],[-18.960489372450983,-62.79298470578916],[-18.977905229501633,-62.891681388299745],[-18.783852921305062,-62.91244377963854],[-18.6337920839556,-62.97322582103175],[-18.652724818933653,-63.07114271540272],[-18.555703163347008,-63.20460759848665],[-18.648189604297116,-63.28841958012525],[-18.596395209133597,-63.37294591198261],[-18.67393158482712,-63.43313166597344],[-18.6326211654143,-63.52077510655399],[-18.74142288556556,-63.55617256217367],[-18.721288509525447,-63.69427900855557],[-18.526941985286147,-63.715640317430726],[-18.29398750019937,-63.855374145408014],[-18.37143021256612,-63.94652625833289],[-18.050866898308374,-64.01825791045339],[-17.955788227408043,-64.06910897459719],[-18.007704681100567,-64.15075897648438],[-17.795287583281215,-64.19963863409609],[-17.630843544811594,-64.27061188509688],[-17.596526680978148,-64.35577118583397],[-17.476549383992992,-64.44149870843293],[-17.471276917234242,-64.57097092691684],[-17.276839417180025,-64.63790862647011],[-17.290887018336655,-64.73111554846864],[-17.237699982866232,-64.84692812452327],[-17.10373418094907,-64.95486687403663],[-17.050967067215836,-65.20773856350347],[-16.80688553448148,-65.24252649629307],[-16.66146669021632,-65.31891924907315],[-16.585136272541988,-65.40265331760914],[-16.717201087027103,-65.53638736883636],[-16.538386684217603,-65.62548878771712],[-16.245216591306907,-65.57985439191697],[-16.080000761837468,-65.64479008087403],[-15.84318299054087,-65.62153849614735],[-15.730585852044765,-65.69351215073979],[-15.38303554986089,-65.71467835653212],[-15.348331748410422,-65.76670816222831],[-15.12807196188412,-65.73310655920052],[-14.998522398297943,-65.75519857518435],[-14.860018222300836,-65.72181557224438],[-14.719063637517925,-65.7550490681124],[-14.589752763981465,-65.85650952809152],[-14.411314974205151,-65.84629915806532],[-14.306655354534538,-65.93681146787749],[-13.970961162938929,-66.05311454523446],[-13.883491273521335,-66.12499470430404],[-13.45683904313034,-66.06595016907569],[-13.339143807875082,-66.07549210818566],[-12.850814740916269,-66.21225116232938],[-12.582817061847171,-66.16651211637847],[-12.455881402860545,-66.24459760856338],[-12.104461052483925,-66.36486394571236],[-11.972806638460991,-66.33522419120251],[-11.756866296141915,-66.35865845602774],[-11.711441763798344,-66.4694173844846],[-11.452956215823058,-66.53174979525804],[-11.228110248450339,-66.61555887550281],[-11.049495163534369,-66.60439888153067],[-10.905932535812653,-66.66522086579114],[-10.727668545221565,-66.6268026950105],[-10.509684829296319,-66.65353828854434],[-10.292222675351892,-66.63794389334508],[-9.87300952770901,-66.7115236603331],[-9.768979124909109,-66.66115308237588],[-9.539357791642388,-66.64821540116658],[-9.404127743005947,-66.68793676547143],[-8.837788125693587,-66.65514073738366],[-8.651102164368158,-66.69343749683283],[-8.356997988080778,-66.67455871650043],[-8.269912329166324,-66.7487182831448],[-7.858879077673099,-66.7815723043386],[-7.476197839397394,-66.76637494728215],[-7.192985275174612,-66.87836672880051],[-6.938151290596029,-67.02302985435006],[-6.606183770908571,-67.07338463502795],[-6.544248305772442,-67.16817617929983],[-6.385216975894405,-67.14225387173512],[-6.220148058052443,-67.16369994183309],[-6.050884916353971,-67.27344673069977],[-5.592661164641258,-67.2996914513733],[-5.4951919188909635,-67.19405090170673],[-5.592312669129176,-67.11911780020472],[-5.436370696576375,-67.06685591724202],[-5.279182972230066,-67.08849560807288],[-4.9566453163889745,-66.9952239479772],[-4.764822396625515,-67.00702257986545],[-4.523619717631566,-66.96617271137045],[-3.753605381349953,-66.94109352533526],[-3.791915293518343,-66.76089216284454],[-3.738057446993473,-66.65848578401766],[-3.8540157354009827,-66.57609475202605],[-3.862964995966607,-66.4744369023861],[-3.956945567011979,-66.16214718946165],[-4.142133794009065,-65.80125798795267],[-4.494704170062871,-65.20828179745621],[-4.72872359683358,-64.95307136883655],[-4.918171351427403,-64.6456778854319],[-5.0247616014831715,-64.42818788297768],[-5.114958955364765,-64.1364805542689],[-5.153492410013288,-63.8847267585146],[-5.121961506578552,-63.57179424784041],[-5.046738772232266,-63.299208398535285],[-4.959849555601238,-63.126417851044856],[-4.65135322985969,-62.66931450251192],[-4.320533789252213,-62.317194004154075],[-3.8347627738774213,-61.85368557075757],[-3.3498208077112017,-61.486533722873986],[-3.1674781629627518,-61.375183980188545],[-2.927878351910208,-61.30682348267275],[-2.765722862274162,-61.062695354768614],[-2.2263527533677183,-60.73820837360813],[-2.0279948867187985,-60.63337805157614],[-1.4044886656040119,-60.358227736355374],[-0.5954045465810478,-60.043452415099985],[-0.03959404800034868,-59.861245496714],[0.9442556627360507,-59.61414849459644],[1.0869740638830794,-59.53458690506933],[1.1562189576246682,-59.428298427531246],[1.2892136104572702,-59.35432323713474],[1.5979836396829858,-59.28196775398488],[1.6838891576160382,-59.19133471474822],[2.1622401940124916,-59.03057477572506],[2.8158192944523766,-58.85494465292852],[4.091168792892375,-58.548683155054995],[4.874802214945355,-58.34063056002168],[6.239789327924319,-57.91746510804551],[6.478095768145959,-57.85971650898401],[6.938700042425697,-57.70535756043063],[7.3550551792548085,-57.657322185462746],[7.550499717966691,-57.59336459353309],[7.636801192809975,-57.499814543885776],[8.13991770332969,-57.29988338670837],[8.429655468997439,-57.14868048902558],[8.683388119050951,-56.983007646502436],[8.894270064776409,-56.88727733160195],[9.009647656207623,-56.68293868328645],[9.544848603647628,-56.53794313072147],[10.089495719385482,-56.31837796421796],[10.952329846796577,-56.02519269161623],[11.317221345160936,-55.8195264132587],[11.610475652800458,-55.823159664864384],[11.756664763818712,-55.74545521676766],[11.867491490180146,-55.57154358469973],[11.699193528201965,-55.41260184241921],[11.853819593940802,-55.35120443475241],[12.629200995280865,-55.122146960731236],[13.42522515367665,-54.918760993276564],[14.93370069516882,-54.50977794896729],[15.497376524300984,-54.3809730507564],[16.287724819195688,-54.37114235346836],[16.480650857380112,-54.38350893630903],[16.647803989359,-54.46919941216256],[16.860657166854118,-54.481653916024285],[16.70253829026303,-54.09502765283123],[16.49331460174898,-53.90648904440363],[16.375878899593452,-53.87962853880653],[16.311532463824996,-53.75680294002934],[16.119862695571317,-53.6515120285313],[16.15398994441837,-53.55902210209862],[16.53597613829947,-53.37923266027618],[16.712808131528906,-53.229887410981405],[16.849575534911306,-52.95744128308013],[16.946365879243835,-52.83061407780028],[17.250703873429924,-52.664467576626215],[17.36247149626637,-52.536777673755076],[17.335316217115032,-52.36315658967231],[17.520580849091207,-52.175901030015076],[17.335076797081747,-51.85653410553063],[17.433289504682293,-51.63001257127399],[17.4216090849371,-51.49410315795654],[17.27007744975628,-51.46629762517567],[17.04803295732638,-51.32006816270609],[17.07986477695998,-51.04814010416887],[17.435479426365497,-50.826230951793846],[17.31262456375672,-50.576578627740126],[17.371856537395686,-50.50529931632715],[17.168662092746597,-50.3669133025027],[17.313898458053192,-50.1515997762754],[17.527871827095694,-50.11841840330249],[17.492558368881348,-49.90448713939489],[17.802736100754238,-49.728286895585875],[17.932790365780814,-49.53508084167189],[17.890050877357627,-49.36394352501423],[18.027290473743555,-49.32621373889332],[18.249277929216845,-48.98811165854063],[18.21348424943591,-48.83462902695043],[18.369425040808842,-48.56519565562267],[18.14871916219485,-48.25451656577226],[18.30540826762213,-48.16772265822539],[18.38768507393181,-48.019067452225855],[18.36651502856814,-47.85551031397793],[18.142992710084574,-47.76129376128045],[18.284479016936842,-47.654713908139335],[18.213105211538483,-47.31051957512991],[17.972526553080915,-47.41513656402056],[17.783284799407987,-47.09170997370907],[17.804771424618284,-46.96311708848324],[17.525334094201675,-46.8566652233134],[17.348925726434185,-46.71886355520514],[17.429631415860452,-46.65344048510427],[17.462188197644466,-46.44820746404799],[17.415016003408724,-46.289534335143514],[17.22619186077742,-46.22733914200992],[17.295878746272127,-46.09563746981775],[16.945994427507745,-45.94479022141172],[17.119969101035867,-45.75653741462817],[16.977953042322017,-45.656903949080025],[16.721033849602073,-45.66246643859487],[16.499371457087996,-45.504309064390384],[16.38679814027283,-45.26168565804616],[16.507486285743227,-45.18483605192617],[16.466004656392784,-44.9260682615788],[16.63412438448574,-44.77506388525528],[16.37051854504374,-44.53419580385294],[16.452934364447202,-44.413247174041125],[16.34750240095119,-44.277755930611676],[16.12981742183856,-44.16835784709262],[16.138658999991637,-44.094228900393304],[15.958300498573687,-43.89873835155138],[15.948119608194819,-43.80195610973413],[15.535829002264233,-43.673526769679086],[15.3110766766616,-43.39914298465211],[15.090954695099137,-43.26776292788101],[15.039210349022449,-41.46029194166757],[14.973190192831003,-39.073327638286536],[14.938844508169291,-37.70994947256987],[14.907324639973321,-36.43508032501178],[14.857164167706863,-34.62120304262815],[14.677297365436807,-34.60203397363033],[14.624163250942505,-34.48624522177896],[14.241670868305176,-34.55487560428714],[14.15081472709045,-34.415830488832846],[14.020002408710457,-34.38427806374433],[13.91004251918931,-34.55212470935728],[13.77853041803739,-34.634348772460854],[13.700538736215915,-34.494892082941746],[13.391065686219665,-34.47153566152299],[13.286489126546305,-34.649429159486786],[13.031212193208116,-34.60016236719403],[13.027691958054028,-34.69847325250416],[12.815205790911714,-34.68531639130821],[12.570809975542652,-34.42605222609139],[12.434106754820833,-34.424013469734014],[12.434057490177294,-34.27219432958021],[12.236049440867859,-34.15307230330095],[12.121386236041337,-34.25676356941846],[11.776249130963231,-34.22791810803691],[11.59980513038351,-33.99813994952377],[11.400318033364544,-33.90056085151786],[11.329400426360658,-34.01046377761611],[11.05858617991393,-33.890747592049436],[10.751297610731065,-33.84660469568585],[10.5341097108586,-33.64071223913361],[10.210019981927386,-33.56215418312257],[10.017143596745036,-33.55774346295809],[9.860306475818073,-33.39673195015044],[9.71534539400772,-33.34222629509246],[9.64307494859161,-33.16047128555067],[9.531949474318715,-33.1793329104714],[9.398979215387461,-32.99245602339075],[9.199480438356684,-32.85259246134763],[8.899326773285507,-32.83353160991025],[8.259017363358353,-32.398917523169615],[7.907776138023254,-32.24399864167019],[7.708430028574624,-32.406839984021545],[7.693599542453075,-32.66193762675159],[7.385557346210354,-32.779207652084665],[7.272498827883708,-32.71444357318791],[7.051966576710337,-32.83006087682136],[6.584354732022144,-32.83437680238695],[6.048508236219153,-32.748316195129554],[5.945829546130719,-32.69697858055599],[5.935355311916452,-32.487531840220356],[5.672056897637451,-32.379152427637486],[5.498017600880411,-32.58911964868686],[5.273747243463999,-32.582568379505574],[5.1367379461497205,-32.70712050176881],[4.876150270540764,-32.659634219125756],[4.738534906566522,-32.68667711591288],[4.769640159049032,-32.87599157666314],[4.659249434296152,-32.96960733613196],[4.391557036932706,-32.881953098179224],[4.305542376503763,-33.03300988938466],[3.7501622279182607,-32.731517562969124],[3.6253569500896465,-32.885638134837706],[3.3177096231906726,-32.93571438544293],[3.020783254827657,-33.02355455635802],[2.810329030673643,-32.96202545752462],[2.4303044744418973,-33.01928498016705],[2.3356506694686234,-33.361684880998915],[2.249159591901649,-33.4845674401022],[2.009474019352672,-33.55739563558723],[1.7550523321403544,-33.43622452129111],[1.59875623172296,-33.41600030200179],[1.5056097585115893,-33.574690785458465],[1.429789461981203,-33.85868808739268],[1.1902759725389804,-33.9016475876117],[1.1234684336562055,-33.73092388075785],[0.7757192376770065,-33.36646187153344],[0.35895381106905416,-33.39987515289564],[0.1745741651607181,-33.09650773795267],[-0.06384497287510292,-33.11918836508316],[-0.3569346213473919,-32.98323949117065],[-0.20366898019325666,-32.78126050490256],[-0.17231507967107795,-32.6580103259396],[-0.3953400204388487,-32.65735353642497],[-0.6491503811879846,-32.55383964928553],[-0.7538164963221266,-32.92990707384907],[-0.8902277929663149,-33.041366514826294],[-1.1720956287732474,-33.08121549638584],[-1.3617162999320243,-32.811678219733444],[-1.5840474241273395,-32.77413963098619],[-1.6409083230863606,-32.90619856354789],[-1.7869927312039589,-32.90355792471418],[-1.95629459172393,-32.640800516631884],[-2.008794969795857,-32.33238301841312],[-2.119637487336145,-32.25894068628824],[-2.4122668621236203,-32.39896022173239],[-2.5435764679755404,-32.35552188731753],[-2.47385625603828,-32.66265649550315],[-2.698957461385117,-32.93679481028151],[-2.912385165427866,-32.99436471822645],[-2.8593600380085684,-33.11072899140353],[-3.121178358633581,-33.18690410728563],[-3.080551992781948,-33.424279627612584],[-3.1450282511292724,-33.636402207947704],[-3.3105785990385934,-33.70761776061593],[-3.4913214315204217,-33.663663229542976],[-3.715370333308204,-33.441641584098925],[-3.7865074784643467,-33.18792957057369],[-3.71907198940169,-33.01837436837566],[-3.554431488973217,-32.96461693228219],[-3.658612860264203,-32.599157383058035],[-3.8167229484305376,-32.50539357400345],[-4.008557108609522,-32.58015156237379],[-4.074537344595367,-32.81840084236963],[-4.41716966858048,-32.79135343105848],[-4.571204276231128,-32.836018723495336],[-4.779145523756367,-33.08250288203316],[-5.0856651300784055,-33.07818146739987],[-5.2970980158048855,-32.92812848336546],[-5.229453946697423,-32.772804477433745],[-5.26204136609087,-32.57317743015289],[-5.510277296761762,-32.46294231274821],[-5.8497825044987435,-32.59431443862732],[-6.031035659946524,-32.55045816070661],[-6.076106665233269,-32.238318703057665],[-6.139786691895077,-32.159273088191604],[-6.444562217904455,-32.01643223615143],[-6.598822067522163,-32.03629882230464],[-6.86680083347235,-32.33942295619654],[-7.048144309269941,-32.352005879622546],[-7.308141863314493,-32.69681573773403],[-7.472531887602555,-32.805848327170416],[-7.731629382419367,-32.84906952784877],[-8.353483089748424,-32.54938467254104],[-8.1911235305138,-32.45262049116131],[-8.1832078718515,-32.18517786918581],[-8.119051741530104,-31.989016818659696],[-8.262829710701908,-31.897797921405754],[-8.672169932202765,-31.963542672806287],[-8.924893916080329,-31.90131086323824],[-9.033263142187181,-31.738536878652273],[-9.012441832826982,-31.611805831915532],[-9.123700063165664,-31.474023160257293],[-8.941869248366238,-31.168169688868332],[-9.047623249880937,-30.971388259517333],[-9.173254757963948,-30.9910479758929],[-9.40159828530702,-31.209927955741833],[-9.584483661743569,-31.190827407304713],[-9.771292998303664,-31.077189601709946],[-10.168063757661145,-31.069466387084574],[-10.296441770294434,-30.973489595519258],[-10.537804893958327,-30.922817072852453],[-10.744559741614337,-31.094966317837528],[-10.748588142821722,-31.24186419717318],[-10.872225343634858,-31.37379381357863],[-11.012821701204206,-31.367720867622037],[-11.271760648721914,-31.488049508918273],[-11.374403805832259,-31.426322104243788],[-11.788558920250672,-30.944322247908946],[-11.937046165703226,-30.870504661442347],[-12.1711846545711,-30.84007650746522],[-12.451851239687656,-31.02686153440561],[-12.899713942043435,-30.993163767061276],[-13.271708813263999,-30.827532818450077],[-13.598208289809145,-30.781375909230356],[-13.791501469072989,-30.682485256604714],[-13.964059809419744,-30.499871438332555],[-14.581553049300771,-30.55848489936959],[-14.720638234928408,-30.48355259801761],[-14.959420791699836,-30.536532841131574],[-15.358781143224942,-30.447583876024016],[-15.47270841616905,-29.85884405301067],[-15.439965573961965,-29.668111179021142],[-15.588383586927216,-29.65574252077145],[-15.601018213802151,-29.491123044095424],[-15.785709934182428,-29.39701340648055],[-15.730380853322808,-29.256505191319913],[-15.883189849753498,-29.185839729174194],[-16.072042187648197,-29.21002112345091],[-16.383095275463464,-28.888949403251335],[-16.50190214852528,-28.990772531817306],[-16.46319979607748,-29.188075852164832],[-16.539571731709604,-29.405372531314406],[-17.22329180761269,-29.141010030690857],[-17.526018912556452,-29.106480087856433],[-17.714858559584773,-29.374824010925774],[-17.993598168916964,-29.31773659595825],[-18.26545581401648,-29.334260033441378],[-18.44603866059102,-29.12504846251198],[-18.597220714508143,-29.05508346912839],[-18.936278499470685,-28.694450333815457],[-18.973888061018243,-28.556395490907914],[-19.151750027118307,-28.463205557763594],[-19.348247569372877,-28.209941522417235],[-19.534875964218802,-28.07750727426012],[-19.718774309394774,-28.01821904176112],[-19.823678543397126,-28.116144103536115],[-19.994665640740436,-28.122836661714373],[-19.932079387687565,-26.79153932912127],[-19.833460713424607,-24.681852044358497],[-19.769547495861268,-23.294001419285724],[-19.652609384205274,-20.720216147423745],[-19.569269109165358,-18.857664709308587],[-19.40814628533552,-15.199315167710163],[-22.369321182613483,-15.073929843633497],[-24.081847126048533,-14.99025905169759],[-26.323341662896443,-14.876808649417603],[-27.896137357976812,-14.791064643822795],[-29.80954224042435,-14.67992666715688],[-32.000236620233004,-14.539887003833952],[-34.294765333962935,-14.389292832881416],[-36.43045257757133,-14.240447606823222]]]},"properties":{"name":"Texas","ns_code":"01779801","geoid":"48","usps_abbrev":"TX","fips_code":"48"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[125.33173354769006,52.03404327888572],[123.88642134807479,51.7889334425857],[122.41149917331867,51.52848639269733],[121.59512730255712,51.391823812341315],[120.56085843921541,51.249339028933505],[120.02164577776038,51.18436694331614],[118.76613596765914,51.003072262606054],[118.17193263105521,50.89838362080273],[117.59311951426727,50.8148163291382],[116.34293700742873,50.59961959981198],[116.32620581312236,50.48731913607965],[116.44457455353606,50.39983009845968],[116.51929756848914,50.198295830139465],[116.45814042267364,50.11871563433572],[116.45623355392952,49.80396486007932],[116.73136472269425,49.68604733518393],[116.7651674384062,49.622228344181025],[116.68946590371982,49.39856877403645],[116.79214086674855,49.0344040438406],[116.77726082614879,48.79582044824158],[116.86352103953985,48.67426540624245],[117.1183511146703,48.533162097456994],[117.45772862630004,48.22010393066117],[117.55845718499167,47.998996732756765],[117.53204753173225,47.79820675385528],[117.46772813678066,47.70737607172842],[117.61953293999632,47.42295044009229],[117.74566593504751,47.26544481234301],[117.74392587857683,47.143137828444914],[117.64606012903432,47.06820255070011],[117.59837412999993,46.90732460871907],[117.4915969486154,46.805669205843984],[117.51978285710966,46.41932059852067],[117.5029783646203,46.066873166367756],[117.67102364855317,45.999893524315915],[117.83369564480829,45.55470047781071],[118.10653648915725,45.294979054186854],[118.16464022327919,45.14945046907818],[118.1183569900502,45.001304549319826],[118.39852141703776,44.79579766601065],[118.37724426818609,44.558907606083125],[118.26683473113651,44.34530847400301],[118.24460345360545,44.05639705248496],[118.31123684645961,44.00915055485067],[118.32598560502586,43.80281651683977],[118.5054101971334,43.7493989720351],[118.57462732408288,44.05567868275201],[118.88554932575377,44.12198157351217],[119.05242934596345,43.90492540858018],[119.20810196313921,43.856143209039345],[119.34874981027826,43.70875770181161],[119.3480702372152,43.62662886005533],[119.7368023475769,42.307679364297016],[120.17631542950036,40.66796950637492],[120.3500205077386,40.04965065815525],[120.34149340337619,39.8697994227833],[120.5099039490052,39.58381706460384],[120.56803459168982,39.59428954639799],[122.88898419709365,39.98061450879279],[124.67748134534378,40.26871438221356],[124.53485878686337,40.41529462394155],[124.13260561355408,40.602273179286264],[123.95902767134878,40.83735235619776],[123.92450323100823,41.0119087849881],[124.0107694644384,41.21076467185411],[123.90492970718502,41.39787591760065],[124.16944201792201,41.54436905567323],[124.16453907085881,41.79942874411229],[124.05750805661215,41.974904520746655],[124.17060954647097,42.15868028858966],[124.12712459109257,42.30838041292245],[123.97879115123585,42.42791772353158],[123.89897043240951,42.701232446064296],[123.94050151765924,42.75611956547159],[123.86230677666292,42.981052646423045],[123.95295584720955,43.20129271477746],[123.96235460675688,43.362995052711675],[123.78470343005151,43.59935995824878],[123.70714929443511,44.150409314464284],[123.7277710469728,44.25881595828186],[123.5988694690055,44.35342773422813],[123.63571065571405,44.51873948611975],[123.6124206649462,44.72298518283338],[123.7886275140211,44.86132427101542],[123.73067640800826,45.03909139773924],[123.79235453696997,45.21296816653346],[123.73745637493076,45.34504496844419],[123.83581189871776,45.56200979008499],[124.0075191849875,45.66873673062816],[124.14390919066214,46.01198017862321],[124.04043490842754,46.22318448337693],[124.13944046153603,46.480856998586674],[124.25411853016107,46.583846520969026],[124.22590761390973,46.726351074009436],[124.29636003882914,46.78801907807668],[124.14151819876415,46.94883354139368],[124.25422819574872,47.10094029802606],[124.40252637776258,47.43647531789678],[124.21070332745423,47.78167677619729],[124.0469273540822,47.90634342237279],[124.04852155777398,48.1499572164835],[123.90867908538934,48.36132182830789],[124.04393421779352,48.55046273255042],[124.20041581004547,48.66141201360286],[124.45644099816184,48.70548718658891],[124.54656576542033,48.7730592594782],[124.73706182178657,48.748829688101324],[124.9931357948419,48.89895302154721],[124.94206544110659,49.00575882882672],[125.02064189162161,49.10591180913796],[125.3840327610332,49.213121809186894],[125.59631771035129,49.40880507686415],[125.59671806579415,49.49615124240602],[125.8152231575149,49.658401375318405],[125.7891253550237,49.80351297573415],[125.85257381875628,49.91032726264964],[125.69348470452633,49.96112771919476],[125.90221522830652,50.06459919136289],[125.93783421550377,50.15071012731711],[125.81297086674402,50.23856321728435],[125.70063048091207,50.40036000998462],[125.57212419656433,50.424495215287685],[125.45043604702781,50.59289225179665],[125.23901951910437,50.70536142152174],[125.17162546282515,50.809161344406526],[125.367813188991,50.992165806777436],[125.32245036898077,51.122853272093636],[125.40867600817954,51.237889262660836],[125.38135667103712,51.36720553646322],[125.548214198375,51.587469675014354],[125.40831832817523,51.67403230509751],[125.3636186834371,51.78973446362172],[125.18900699574655,51.882384098377756],[125.33173354769006,52.03404327888572]]]},"properties":{"name":"Vermont","ns_code":"01779802","geoid":"50","usps_abbrev":"VT","fips_code":"50"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[133.8024057151763,43.117289299673445],[133.92736497186866,43.32818054529733],[133.86550730028725,43.609255951243945],[133.63935055029123,43.78752742006674],[133.41449550505808,43.79498781275054],[133.42890269492173,44.004383495689076],[133.5114547332058,44.159626588158396],[133.72589607897908,44.02976531609657],[133.91697453902853,43.980678887377294],[134.21529544568727,44.078116397982974],[134.29508636677014,44.21069096666324],[134.26541857370603,44.3273490192184],[134.1319421296945,44.447023596092706],[133.96965592035022,44.4978940770469],[133.7329586692134,44.45672151128182],[133.55968177739888,44.5387292078726],[133.5733815457332,44.6886510657581],[133.44512899010945,44.83675121012756],[133.50939624132312,45.034584246537825],[133.8448120367201,45.15578706573646],[134.05944136008165,45.32699561402909],[134.1796653899654,45.70428224986699],[134.3098584373615,45.79892573960227],[134.3613584191233,45.92713032794144],[134.73108967461508,46.50322748233811],[135.9836238965159,47.36565179310913],[136.2122670304954,47.41136289219072],[136.30124235490027,47.48272055972273],[136.4927020058441,47.49850145734127],[136.6272147204988,47.56327797258695],[136.7984110762072,47.846610476896494],[136.98371440858935,47.82769898741222],[137.3004790309887,47.8980195497399],[137.47743009317946,48.077928132900276],[137.4698919706159,48.312714739540354],[137.86363397883204,48.5415674798973],[137.995350208528,48.50839669417293],[137.99880213719496,48.38023590001047],[138.14288820104608,48.20347679602613],[138.32229435351852,48.13412252663614],[138.6173477820658,48.17501395439816],[138.7588239385493,48.29029791007427],[138.8266511596839,48.485993791887275],[138.70701702546347,48.6478531214086],[138.76091833894145,48.71939486272772],[138.9981771402709,48.67410678124802],[139.20809593609158,48.737107632514245],[139.4408364437522,48.915339072798496],[139.50762444143302,49.09086969336034],[139.70337531380528,49.04808695187349],[139.74139773193022,48.944422688940904],[139.97471827463502,48.8275418940734],[140.18755847218046,48.835482442384],[140.36782150027568,48.7223032818149],[140.65124008959612,48.698760114975535],[140.8823717912441,48.75108358371173],[140.99112164918418,48.856593840809836],[141.01770095896458,48.98270630275162],[140.94832554178674,49.100495548834836],[141.0675501027287,49.26105312223572],[141.1870440757305,49.29408925986358],[141.34124264336737,49.42129818589825],[141.36399477405539,49.61609398886591],[141.22808729624313,49.73277842214406],[141.007738685593,49.780098342964976],[140.9428385366027,49.86384710147842],[141.27479747772136,49.859958625495864],[141.62744835453813,49.957649541258945],[141.78364922433533,50.05614114420169],[142.1518002014355,50.52996751626116],[142.50131134456677,50.55829018431054],[142.7653890221283,50.64742841320697],[142.92491996220392,50.85357026533664],[143.19867987455626,50.94778034708817],[143.2804480614235,51.08318113921482],[143.17106617794508,51.36696361626645],[143.3316223339662,51.56444671627885],[143.22500272754982,51.72171287013599],[143.52414703501594,51.84242320996574],[143.73915326857,51.86811688630735],[143.9144328099467,51.993366885526825],[143.92696146329033,52.10655809161554],[144.05411254495698,52.23194588582765],[144.22588586003292,52.175503586899424],[144.43032579134922,52.19031689036551],[144.62633651315826,52.31618672918026],[144.64495215511607,52.43226032746803],[144.53240841334903,52.547269941164075],[144.63972740830832,52.65942071194587],[144.84302494699583,52.60420206579571],[145.16112841415853,52.680684622492656],[145.36945223080227,52.66940885012401],[145.6757824371133,52.78826997595442],[145.96586776283175,53.00043870286901],[146.07815628406175,53.1681516282445],[146.06780133464727,53.34767415621557],[146.2855472549678,53.45496877187292],[146.44269017768528,53.47375537185432],[146.60272919341276,53.56324254845818],[146.64518495986852,53.65127970686117],[146.89095188841677,53.720199383704575],[147.12497463062832,53.882321854266706],[147.44287890490125,54.193407969771734],[147.69039977954307,54.57962691146528],[147.82088808992273,54.66381819375455],[147.9190148328967,54.83041522013452],[148.08668773857747,54.907488338106994],[148.1292543414645,54.99174796558147],[147.83488970602565,55.07287489061368],[147.66983293829594,55.05762582151397],[147.5063887122122,55.192301495975585],[147.47770132519676,55.371464469961744],[147.1303860306747,55.49427386272205],[146.5210215388017,55.896346854778436],[146.3539157449718,56.02526127709895],[146.0262695587167,56.17443016705739],[145.79683810291985,56.17348780892835],[145.69554551759754,56.1227637963778],[145.42130260951345,56.19073219155161],[145.33839773153318,56.160729096609856],[145.39895052497428,56.006421965976386],[145.2312937989161,55.8813959142237],[144.98378187195704,55.95148930051337],[144.40213998295644,56.22849504603623],[144.26368474059726,56.34034332483073],[144.3410450416266,56.6246270385903],[144.2549554115373,56.81353322205005],[143.96047082379445,56.90258347630283],[143.69592084681844,57.1268059473276],[143.92806533225706,57.31677508807284],[143.95058615596056,57.407041756848834],[143.82864361451956,57.52492597453653],[143.66387247226052,57.57843515163908],[143.49918008344198,57.480270049755106],[143.0238552055269,57.4821294061914],[142.56587936270037,57.5033102467476],[142.280048064921,57.65732628105917],[142.11178877974962,57.57523572357791],[141.85605834789638,57.57374364516885],[141.71878002878233,57.75815236307567],[141.84814771916186,57.78538255428766],[141.6422445404327,57.89571772643609],[141.60200226451292,58.03031396828913],[141.73205301589647,58.152232623802206],[141.45305637449394,58.26851002479784],[141.427500713783,58.31529257786734],[141.60693144656764,58.48013655897623],[141.40794720628148,58.54949707620975],[140.74719211659504,59.65285684547039],[140.00831798449528,60.79876522974486],[139.57260712675637,61.47340003896162],[139.02752312499496,62.30918239351374],[138.5184584830112,62.364911434127286],[138.436312843005,62.42921475592511],[138.20600385929745,62.49475183815141],[138.0095212052551,62.602854196769734],[137.80164235059615,62.62622459686165],[137.57508627675918,62.69638789156732],[137.30969036890122,62.724834081451384],[136.83982994633072,62.83110276448414],[136.81379117334163,62.86952783918828],[136.43530704267556,62.89422360316384],[136.36347119576314,62.920015467680884],[135.9206730324865,62.875369692345195],[135.7169607505462,62.77843568193177],[135.7775456958124,62.65641521186554],[135.60386951331805,62.56484819717229],[135.36219763274207,62.585744966299444],[135.16468274418696,62.554495169142164],[135.04232273670976,62.49045824781527],[134.90108005878292,62.489978052840634],[134.84473841461758,62.34323360792631],[134.60591087857046,62.27310663534683],[134.47741426892296,62.28368968876367],[133.9555682026708,62.110835812131505],[133.79065323464926,62.002160889302],[133.58799481252058,61.93986205044981],[133.3682292581883,61.99879213280863],[132.8238960851988,62.05897939447187],[132.61884730899834,62.27368107037903],[132.4992888713992,62.467393372560615],[132.52565317174088,62.57551213950456],[132.35197138635164,62.63846497306539],[132.2804196046381,62.59869655706915],[132.05438078126102,62.6324954219696],[131.77379750037463,62.64314668435445],[131.54185644282265,62.62271909061834],[130.898024053177,61.74926846479438],[130.03601353089553,60.53421717466529],[129.4015150787609,59.6049739515324],[129.65506979952514,58.58487833498558],[129.49118790103046,58.527922567633595],[129.33079237113643,58.31398927030428],[129.20331995223117,58.29201195367039],[129.09746298633289,58.16518337589236],[129.16551194938958,58.05660561044756],[129.0628589136518,58.00976290440022],[129.04119252573528,57.76581183330881],[128.98484059923643,57.58114473986175],[129.3157462906078,57.47095322114154],[129.30764903524843,57.288956983303486],[129.1836621778385,57.27425626087361],[129.14078681430976,57.11018246440474],[129.2753536942488,57.129403024042716],[129.18342186681588,56.960170063622826],[129.27982528587788,56.88108444760827],[129.29900037231423,56.75269241422306],[129.52742592414765,56.77240491423418],[129.69531846937576,56.70410416876484],[129.61264508386697,56.627940408041205],[129.6969597694869,56.55225322667149],[129.60973051802813,56.41396456046447],[129.37131051212734,56.297966281786366],[129.12723431114736,56.02718524261903],[129.2290581200358,55.90589904496193],[129.34754545893216,55.864904507610305],[129.3419617581723,55.74556728936427],[129.1861677417444,55.65528067514689],[129.05452527319466,55.645605379716194],[128.83422371107773,55.444431316673075],[128.7076849952474,55.43029391816296],[128.49335792881698,55.16185035719381],[128.3789018292098,55.11955193176529],[128.25111052465851,54.91222201215575],[128.2926087159265,54.87119783154958],[128.1806521690174,54.695632600633616],[128.24733919312257,54.60477573807409],[128.4955444601205,54.4810681291669],[128.65433600740755,54.47565711850276],[128.85555916615226,54.34018671817996],[128.78469572844844,54.20415295588825],[128.61863581109083,54.25119098816415],[128.46168267862635,54.21013639653132],[128.25025279361995,54.30846468113445],[127.9946137426165,54.299235244120354],[127.89515352675168,54.16184479280468],[128.07009505907692,54.04172765051252],[128.03520599227448,53.92290809762636],[128.13711349862416,53.85644369335638],[128.03907703629963,53.58727473099442],[128.0572515855574,53.4406581653095],[127.9178787307706,53.44308503209912],[127.65879236505606,53.595164704861794],[127.61365460279582,53.731716542126954],[127.22719755322399,53.76829073990569],[127.16135849278794,53.692544604580114],[126.8216338942304,53.577974960451336],[126.95585557464001,53.3574094667694],[127.52772604687412,52.29229693861835],[128.19306372375905,51.05609949177426],[128.50456482599188,50.41392642612356],[129.07559413754984,49.249425366936755],[129.7541540183064,47.77752620369343],[130.09957912864883,46.98578778838331],[130.59020296993518,45.953526631356866],[130.73445505052513,45.883425870280774],[130.7793998108097,45.724626696686386],[130.75014295628958,45.50390283419896],[130.89384260381516,45.33108190998469],[130.81190298194667,45.182143361930876],[130.99778022049136,44.88233574425018],[131.23340351555717,44.85712999545492],[131.50089949387365,44.63843816821173],[131.73619200591207,44.53917494309881],[131.9804553054598,44.48234578019346],[132.0497060639114,44.42067874957083],[132.02892051401375,44.21624948199154],[132.07699371185493,44.01008335854328],[132.16161201109176,43.91407521243357],[132.6912137113554,43.74252848759796],[132.84647749066417,43.781724400112964],[132.92882946984196,43.63620547690788],[133.38528186482586,43.40949505195338],[133.50461598872863,43.39301706060676],[133.8024057151763,43.117289299673445]]]},"properties":{"name":"Maine","ns_code":"01779787","geoid":"23","usps_abbrev":"ME","fips_code":"23"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[84.25923764886333,-9.07272836103646],[84.27023539876669,-9.208502100457075],[84.14376369207609,-9.467066392202401],[84.23882940208316,-9.665401598348202],[84.291105376638,-9.935082742902816],[84.19184742824443,-10.039917846102876],[84.1941169828441,-10.272177327029064],[84.08839031245184,-10.35813774402632],[84.29394183684099,-10.792006350522591],[84.0362864302466,-10.895395765013722],[83.8315144804208,-10.784412401161104],[83.53031592193645,-10.98074478288423],[83.41721245083406,-11.165519230563826],[83.2691216057478,-11.270372895921893],[82.75639459559704,-12.63813099633056],[82.63105675792296,-12.610773477836428],[82.50781494620364,-12.772666077619327],[82.22461971189247,-12.827543935784893],[82.07293971992274,-12.529094547143306],[81.92199610680164,-12.603263486939836],[81.69544942474501,-12.5155902329007],[81.54846287407379,-12.736043618159655],[81.29561465644734,-12.738581505535397],[81.05091234975818,-12.920026699228305],[80.93984846889012,-12.933558718633298],[80.66532261114435,-13.203138569276398],[80.45662713460545,-13.761453568622331],[80.23393131635598,-14.005751668953037],[79.99671370673715,-14.133149139246257],[79.64688316068334,-14.159268265762535],[79.61081120537588,-13.980288460825545],[79.69593975882711,-13.695893519371419],[79.40313409862831,-13.497373159775439],[79.1504335599222,-13.67978143611453],[78.99854096265719,-13.85027273728808],[78.67902925519556,-14.056082927897332],[78.66187057697778,-14.401153539948341],[78.50511882901215,-14.634074815624682],[78.30111178615611,-14.469000711002598],[78.03960105961819,-14.534811458817813],[77.96485535282152,-14.65327606904387],[78.1164215516622,-14.992777311721785],[77.98999758402479,-15.079884072286097],[78.0411421049874,-15.261513535172467],[77.90047033017278,-15.392192080113109],[77.76582550017623,-15.680847128324512],[77.65695412693587,-15.79207944113862],[77.4134027908399,-15.724460954450267],[77.16981227974762,-15.74213215653247],[76.9569200441073,-15.932526071412093],[76.73643134638608,-15.970761853424147],[76.61976364791266,-16.230292010259646],[76.31015168279156,-16.292342169264085],[76.26281747738909,-16.51413955696742],[75.98234483070084,-16.83803252128131],[75.83246731109061,-16.780678290474853],[75.67595312733447,-16.986568470449114],[75.39097166446678,-17.214063894240613],[75.25236438737383,-17.227391972746734],[74.99914504694023,-17.597663380125425],[74.60999847004605,-17.62575119429795],[74.3946220840787,-17.568061733975682],[74.18336181424016,-17.681023212207137],[73.80299737484795,-17.708775711240595],[73.44087375362479,-17.797854600626632],[73.16890276569633,-18.09560005392199],[72.84983267637566,-18.18039793382296],[72.72067271591253,-18.479552543278935],[72.5806237804252,-18.527596585806677],[72.2940167715854,-18.776010950734474],[72.19072706567347,-18.983479212667564],[72.26903446098035,-19.250599834492935],[72.11366212200812,-19.432278014661847],[72.15691262548265,-19.632411882319726],[72.25281681177728,-19.73571687261687],[72.08601286085427,-19.979337277642035],[71.80726018014595,-20.126623929961557],[71.28636332833409,-20.240498857757924],[71.19363587985673,-20.09888826287473],[70.78013527605904,-20.42262712792637],[70.80794660775955,-22.022139403687262],[72.43353989249063,-21.843294573020348],[74.09674523107819,-21.64061966151776],[74.84423927188125,-21.557471776139266],[74.83795166476989,-21.521124841791174],[75.5188348739196,-21.43251655954602],[77.76766199990318,-21.098173501567533],[79.54104542573003,-20.291097505830503],[79.67959964279204,-20.39205010459256],[79.8640165473195,-20.19105000032777],[80.02934145350153,-20.16091274715415],[80.31430482487133,-19.874198937540864],[80.55575609541307,-19.801196089617928],[80.95475387493408,-19.619568609007953],[81.15918553585999,-19.469127537095684],[81.47618306968162,-19.43499789034963],[81.51728719606,-19.25502285294858],[81.66858445601012,-19.118222140377366],[81.84968370378266,-19.26177769357911],[82.11956506308252,-19.227365294115078],[82.34405023738721,-19.132073993844468],[82.88665366675997,-19.098512787368833],[85.36681253852011,-18.84628112577993],[88.16212841965874,-18.57010609902441],[89.28791200555077,-18.469962457072576],[89.42041877728808,-18.49208438271667],[89.54355730230722,-18.716074856125555],[89.4289751055779,-18.89812580740435],[89.45331332283322,-19.057711426268757],[89.56569638481284,-19.1629070117072],[90.10370166259662,-18.64964472751929],[91.17402040784998,-19.668496158960654],[91.21852622673208,-20.455934849124137],[92.59327679921813,-20.262130757251967],[94.85485068809201,-19.949101301421816],[96.52140585755068,-19.72587535823846],[97.66448117592878,-19.54485992163963],[99.80313947923015,-20.968647948800808],[100.87552246584264,-21.72263667713465],[103.10652524368457,-23.202153899823763],[105.40117888217257,-24.708122819895326],[105.69307225187308,-24.91272972026431],[106.2329145823347,-24.619310750922462],[106.55101274665812,-24.485005366081612],[106.99630004243346,-24.3562196246981],[107.6726758747216,-24.242284998162514],[108.14753201158445,-24.258169181323794],[108.25431170989722,-24.376604539525065],[108.51748038294105,-24.487755646725994],[108.64316584612855,-24.710216332085178],[108.86861129185685,-24.765492457784944],[109.12291079282105,-24.648466233131742],[109.20498041371745,-24.361858002269955],[109.10652155017141,-24.045846673386023],[109.12320780905175,-23.714777526836286],[109.20203852404812,-23.492914975607995],[109.26368450236244,-22.838479343908883],[109.39096036663055,-22.173875080166006],[109.53273754887313,-21.945763503386615],[109.54114615015295,-21.80444783274068],[109.7683718431734,-21.285408185641405],[109.8810750773899,-21.179161609281543],[110.07673086676974,-20.836659910255435],[110.5828090849737,-20.19952376560722],[111.06578711751823,-19.741471119433843],[111.69963651725145,-19.256155275312537],[112.06217606456393,-18.836297172661183],[112.54053012355179,-18.443069392326187],[113.20594977460986,-18.079535663463567],[114.19929079771094,-17.70376153823475],[114.58796485963425,-17.596975886474606],[114.91893985954336,-17.56508720451762],[115.39996996914323,-17.64314378795827],[115.43997161663857,-17.762244408711677],[115.67252102791767,-18.04840288856857],[115.81650531779307,-18.129727839428575],[116.04108215233255,-18.118619666892908],[116.20484140500884,-17.985828625231484],[116.35025452931954,-17.350611345725415],[116.62446477564436,-16.713827061496122],[116.87092240716807,-16.241120392562756],[117.15980144162315,-15.768610159181634],[117.72287893158312,-14.95574260952223],[118.18268222755859,-14.346724667975142],[118.32705387087086,-14.302430625477278],[118.73906770285033,-13.759060934870138],[119.24250291160484,-13.336202325259086],[119.76387829748201,-13.009914700180127],[120.18611397913618,-12.707181168052923],[120.3681239193746,-12.611482078208185],[120.63044088692102,-12.667510753245194],[120.88998742197893,-12.547475825094965],[120.99277678948272,-12.346667804479715],[120.97888865480752,-10.993354758860457],[120.86756747018683,-10.219458314730243],[120.87063207870608,-9.899301977773707],[120.80573861084413,-9.555258661625848],[120.56471319290962,-8.934232053845552],[120.35962769956534,-8.535329408178132],[120.015618553242,-8.119680056501217],[119.28870125097922,-7.0983794709914925],[118.43135247194328,-5.9628266832780685],[118.05799568142162,-5.353601008177359],[117.68707547494174,-4.674424825810796],[117.2367237601711,-3.6947161528059413],[117.12108169757701,-3.346380359213608],[114.37096307218879,-3.9339119830992018],[111.5383541465546,-4.520289151029984],[110.90620142859268,-4.6376306239069915],[110.89817971942948,-4.699539299186722],[108.37437941961872,-5.1992883374297065],[106.27229445365657,-5.604034942250461],[104.08416045667515,-6.035991800944563],[103.48674873875919,-6.142903433833908],[102.03220849372849,-6.439587074293968],[98.91049332540015,-6.999285202839742],[97.90725979563915,-7.184047487190085],[96.15390941767419,-7.49171742734163],[94.34049032550311,-7.789078313311727],[93.07544938449347,-8.003906209399869],[92.05795966983088,-8.163121246954093],[89.59676369120042,-8.430713614571244],[88.98433986405772,-8.55123222421043],[88.03633737522944,-8.666843901529807],[86.46370052650293,-8.831530805045887],[85.97107549461133,-8.9098053559797],[85.14972146071612,-8.993892905179065],[84.69417097697749,-9.016715872885204],[84.25923764886333,-9.07272836103646]]]},"properties":{"name":"North Carolina","ns_code":"01027616","geoid":"37","usps_abbrev":"NC","fips_code":"37"}}]}
diff --git a/viz-lib/src/visualizations/choropleth/maps/usa.geo.json b/viz-lib/src/visualizations/choropleth/maps/usa.geo.json
new file mode 100644
index 000000000..48fd706d2
--- /dev/null
+++ b/viz-lib/src/visualizations/choropleth/maps/usa.geo.json
@@ -0,0 +1 @@
+{"type":"FeatureCollection","features":[{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-104.057697,44.99738],[-104.366692,44.998151],[-104.772765,44.999158],[-105.250545,45.000168],[-105.718212,45.000333],[-105.913382,45.000941],[-105.928183,44.993647],[-106.250717,44.993688],[-106.62561,44.994927],[-107.084938,44.996599],[-107.134179,45.000109],[-107.500025,45.001512],[-107.75065,45.000778],[-107.997369,45.001565],[-108.499092,44.9998],[-109.08137,44.99946],[-109.103373,45.005886],[-109.75073,45.001605],[-110.110103,45.003905],[-110.199503,44.996188],[-110.362698,45.000593],[-110.402927,44.99381],[-110.705272,44.992324],[-110.785008,45.002952],[-111.055199,45.001321],[-111.056889,44.866658],[-111.055208,44.624927],[-111.048974,44.474072],[-111.049077,44.02013],[-111.046516,43.908369],[-111.045383,43.484566],[-111.04412,43.247071],[-111.044078,42.97598],[-111.043547,42.719502],[-111.047023,42.474064],[-111.046689,42.001567],[-111.045794,41.499945],[-111.04658,41.361033],[-111.046723,40.997959],[-110.500718,40.994746],[-110.237905,40.995426],[-110.006495,40.997815],[-109.543221,40.998396],[-109.250735,41.001009],[-109.050076,41.000659],[-108.526029,40.999592],[-108.181227,41.000455],[-108.046539,41.002064],[-107.750627,41.001971],[-107.241194,41.002804],[-107.003119,41.003421],[-106.625592,41.00211],[-106.439563,41.001978],[-106.314218,40.998923],[-106.061181,40.996999],[-105.726441,40.996836],[-105.341415,40.997972],[-104.855273,40.998048],[-104.625519,41.001428],[-104.053249,41.001406],[-104.052245,41.398065],[-104.052859,41.592254],[-104.052967,41.916972],[-104.052547,42.166801],[-104.053107,42.499964],[-104.05262,42.660549],[-104.053028,43.000585],[-104.05479,43.41642],[-104.055122,43.740516],[-104.054688,43.999979],[-104.055389,44.249983],[-104.055926,44.517359],[-104.055913,44.874986],[-104.057697,44.99738]]]},"properties":{"name":"Wyoming","ns_code":"01779807","geoid":"56","usps_abbrev":"WY","fips_code":"56"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-80.518991,40.638801],[-80.518975,40.349789],[-80.518891,39.890964],[-80.519342,39.721403],[-79.940671,39.720671],[-79.476662,39.721078],[-79.045548,39.722883],[-78.62474,39.722946],[-78.344435,39.722468],[-77.929484,39.722327],[-77.502821,39.719886],[-76.990903,39.719799],[-76.514789,39.721127],[-76.135484,39.721147],[-75.788596,39.722199],[-75.773786,39.7222],[-75.754056,39.756178],[-75.719502,39.790365],[-75.680468,39.813939],[-75.639703,39.828955],[-75.564047,39.839488],[-75.481039,39.829319],[-75.415062,39.801919],[-75.330432,39.849013],[-75.272202,39.849076],[-75.221371,39.861543],[-75.192738,39.879006],[-75.137296,39.889966],[-75.128253,39.913164],[-75.135239,39.950677],[-75.119491,39.965372],[-75.075605,39.978041],[-75.04709,40.009941],[-75.013237,40.020303],[-74.935042,40.067836],[-74.859721,40.085311],[-74.826226,40.124066],[-74.788287,40.120579],[-74.724369,40.146412],[-74.722325,40.160727],[-74.754305,40.185209],[-74.770406,40.214508],[-74.842308,40.250508],[-74.868208,40.295206],[-74.939711,40.338006],[-74.967499,40.398813],[-74.99586,40.410384],[-75.031778,40.404813],[-75.060917,40.421737],[-75.070608,40.456196],[-75.062761,40.480026],[-75.0681,40.541488],[-75.099827,40.567398],[-75.134995,40.575662],[-75.172877,40.564423],[-75.201348,40.614628],[-75.200452,40.649219],[-75.178019,40.671763],[-75.203921,40.691498],[-75.182804,40.73365],[-75.196535,40.751631],[-75.171587,40.777745],[-75.139106,40.773606],[-75.108505,40.791094],[-75.064328,40.848338],[-75.053664,40.87366],[-75.117767,40.953013],[-75.130575,40.991093],[-75.088596,41.015024],[-75.025777,41.039806],[-75.012873,41.066516],[-74.98259,41.079172],[-74.982212,41.108245],[-74.923169,41.138146],[-74.882139,41.180836],[-74.859323,41.220507],[-74.857152,41.248975],[-74.830057,41.2872],[-74.773225,41.324513],[-74.755894,41.34528],[-74.694914,41.357423],[-74.713412,41.389814],[-74.757926,41.423437],[-74.793856,41.422671],[-74.812123,41.442982],[-74.890175,41.438178],[-74.909181,41.472436],[-74.941798,41.483542],[-74.981652,41.479945],[-74.987645,41.508738],[-75.023018,41.533147],[-75.027343,41.563541],[-75.074613,41.605711],[-75.044224,41.617978],[-75.052736,41.688393],[-75.053227,41.751662],[-75.075942,41.771518],[-75.10464,41.774203],[-75.085789,41.811626],[-75.113334,41.822782],[-75.114399,41.843583],[-75.204002,41.869867],[-75.223734,41.857456],[-75.271293,41.887358],[-75.279094,41.938917],[-75.310358,41.949012],[-75.359579,41.999445],[-75.742217,41.997864],[-75.983082,41.999035],[-76.445733,41.998747],[-76.835182,42.002134],[-77.126846,41.999414],[-77.505308,42.00007],[-77.77671,41.998428],[-78.124731,42.000451],[-78.271204,41.998968],[-78.59665,41.999877],[-78.874759,41.997559],[-79.006166,41.999124],[-79.47252,41.998254],[-79.761313,41.998808],[-79.762569,42.375058],[-79.762418,42.516072],[-80.080222,42.394162],[-80.519851,42.327132],[-80.519326,41.972468],[-80.519345,41.473907],[-80.51881,41.041355],[-80.518991,40.638801]]]},"properties":{"name":"Pennsylvania","ns_code":"01779798","geoid":"42","usps_abbrev":"PA","fips_code":"42"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-84.820157,39.105489],[-84.784484,39.117719],[-84.750345,39.147622],[-84.718096,39.136616],[-84.689354,39.103192],[-84.651692,39.092528],[-84.632506,39.076544],[-84.575499,39.081225],[-84.553509,39.098509],[-84.511041,39.093654],[-84.458818,39.121479],[-84.435388,39.100885],[-84.430561,39.05874],[-84.412487,39.046967],[-84.360608,39.041513],[-84.313835,39.016588],[-84.286536,38.952542],[-84.234027,38.891407],[-84.230147,38.82643],[-84.213115,38.805835],[-84.15662,38.795072],[-84.070779,38.770414],[-84.044576,38.770557],[-83.97734,38.787435],[-83.859973,38.757217],[-83.840657,38.721976],[-83.784386,38.696581],[-83.770178,38.655857],[-83.723497,38.647076],[-83.668718,38.626542],[-83.644498,38.637078],[-83.634901,38.670426],[-83.61141,38.684679],[-83.520755,38.703094],[-83.468133,38.675476],[-83.377573,38.661809],[-83.327626,38.637851],[-83.318399,38.610515],[-83.288041,38.598349],[-83.245222,38.628711],[-83.201445,38.61673],[-83.154483,38.62077],[-83.134754,38.632013],[-83.112058,38.671843],[-83.062579,38.689457],[-83.026976,38.727554],[-82.971567,38.727452],[-82.93935,38.745004],[-82.897189,38.756214],[-82.875174,38.746837],[-82.87736,38.694458],[-82.856895,38.647405],[-82.847588,38.595641],[-82.821205,38.573344],[-82.788313,38.55973],[-82.725554,38.558185],[-82.698285,38.54377],[-82.653457,38.493702],[-82.610808,38.471953],[-82.59348,38.421821],[-82.571613,38.405138],[-82.53769,38.404157],[-82.404882,38.439347],[-82.389746,38.434355],[-82.323999,38.449268],[-82.303663,38.499124],[-82.293471,38.575383],[-82.27147,38.595383],[-82.221468,38.591284],[-82.181167,38.599784],[-82.171966,38.625384],[-82.190867,38.680383],[-82.182467,38.708782],[-82.199999,38.759057],[-82.221566,38.787187],[-82.189293,38.815768],[-82.144167,38.84188],[-82.143167,38.898079],[-82.129166,38.908179],[-82.090165,38.975278],[-82.052063,38.993978],[-82.037749,39.023865],[-82.00599,39.029387],[-81.981159,38.994351],[-81.933186,38.98766],[-81.900595,38.937671],[-81.92667,38.901311],[-81.890899,38.873919],[-81.848653,38.901407],[-81.844486,38.928746],[-81.814235,38.946168],[-81.785647,38.926192],[-81.756131,38.933546],[-81.78182,38.964935],[-81.764253,39.015279],[-81.812354,39.061279],[-81.754154,39.088377],[-81.742353,39.111277],[-81.756282,39.176993],[-81.725622,39.215905],[-81.691339,39.227947],[-81.69662,39.256139],[-81.677595,39.274171],[-81.565247,39.276175],[-81.557547,39.338774],[-81.456143,39.409274],[-81.406689,39.38809],[-81.38456,39.343449],[-81.344927,39.346794],[-81.26842,39.386318],[-81.211654,39.392977],[-81.185145,39.431479],[-81.134434,39.445075],[-81.092434,39.496075],[-81.0239,39.552313],[-80.933292,39.614812],[-80.88036,39.620706],[-80.866646,39.652616],[-80.865805,39.686484],[-80.829723,39.714041],[-80.869933,39.763555],[-80.826079,39.798584],[-80.826964,39.841656],[-80.793131,39.863751],[-80.809565,39.905658],[-80.795598,39.919717],[-80.756113,39.913402],[-80.764242,39.946151],[-80.740139,39.970795],[-80.742114,40.00888],[-80.731024,40.044291],[-80.73919,40.075199],[-80.708937,40.101422],[-80.705246,40.15416],[-80.668083,40.199689],[-80.66154,40.229812],[-80.622508,40.261765],[-80.59989,40.317666],[-80.612795,40.347669],[-80.607587,40.36956],[-80.632196,40.393667],[-80.612325,40.402762],[-80.612876,40.429466],[-80.594664,40.471389],[-80.618003,40.502049],[-80.627507,40.535793],[-80.664372,40.570016],[-80.66354,40.590768],[-80.62645,40.620176],[-80.584002,40.615723],[-80.518991,40.638801],[-80.51881,41.041355],[-80.519345,41.473907],[-80.519326,41.972468],[-80.519851,42.327132],[-80.999825,42.252404],[-81.249833,42.216415],[-81.495181,42.096402],[-81.686447,42.000037],[-81.709202,42.000037],[-81.999865,41.863787],[-82.398348,41.676524],[-82.681119,41.676328],[-83.069312,41.864217],[-83.11246,41.95941],[-83.41585,41.733794],[-83.709474,41.72524],[-84.192317,41.71101],[-84.475933,41.703813],[-84.805972,41.696118],[-84.8036,41.275272],[-84.803148,40.958992],[-84.802253,40.63035],[-84.804159,40.275046],[-84.811209,39.99545],[-84.814187,39.813687],[-84.815754,39.478652],[-84.820102,39.25141],[-84.820157,39.105489]]]},"properties":{"name":"Ohio","ns_code":"01085497","geoid":"39","usps_abbrev":"OH","fips_code":"39"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-109.045223,36.999084],[-109.045554,36.644972],[-109.045946,36.375002],[-109.045726,36.116908],[-109.046348,35.75724],[-109.046523,35.523433],[-109.046084,35.249986],[-109.045866,34.949127],[-109.046175,34.520102],[-109.046765,34.17382],[-109.047145,33.74001],[-109.046564,33.375059],[-109.047483,33.067912],[-109.047117,32.777569],[-109.047612,32.426377],[-109.048142,32.160736],[-109.049186,31.797381],[-109.050044,31.332502],[-108.816063,31.332253],[-108.500594,31.333382],[-108.208573,31.333395],[-108.208394,31.783599],[-107.875581,31.783584],[-107.422246,31.783599],[-107.00056,31.783513],[-106.528242,31.783148],[-106.54714,31.807299],[-106.577244,31.810406],[-106.635922,31.866237],[-106.645295,31.894858],[-106.622163,31.936007],[-106.639536,31.980343],[-106.618486,32.000495],[-106.125534,32.002445],[-105.731353,32.001565],[-105.429383,32.000577],[-105.000507,32.00042],[-104.466406,32.000116],[-104.096927,31.999997],[-103.748317,32.000197],[-103.375458,32.000334],[-103.064422,32.000517],[-103.06478,32.226978],[-103.064676,32.500115],[-103.064968,32.754674],[-103.064639,33.000106],[-103.053903,33.506965],[-103.049608,33.737766],[-103.044173,33.974557],[-103.043762,34.31275],[-103.042691,34.739882],[-103.04264,35.109974],[-103.042258,35.394355],[-103.041666,35.625043],[-103.040824,36.000037],[-103.041923,36.50035],[-103.002434,36.500397],[-103.002199,37.000104],[-103.499968,36.999185],[-103.817803,36.997339],[-104.338833,36.993535],[-104.644997,36.993379],[-105.029226,36.992727],[-105.222398,36.995166],[-105.66472,36.995874],[-106.201469,36.994122],[-106.591178,36.992923],[-106.869798,36.992424],[-106.877293,37.000141],[-107.10724,37.000008],[-107.464127,37.000004],[-107.729194,37.000002],[-108.249358,36.999015],[-108.875317,36.998839],[-109.045223,36.999084]]]},"properties":{"name":"New Mexico","ns_code":"00897535","geoid":"35","usps_abbrev":"NM","fips_code":"35"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-74.986282,38.451632],[-75.232115,38.451222],[-75.416925,38.452538],[-75.69367,38.46008],[-75.715684,38.740062],[-75.746992,39.133744],[-75.765719,39.366758],[-75.788521,39.648133],[-75.788596,39.722199],[-76.135484,39.721147],[-76.514789,39.721127],[-76.990903,39.719799],[-77.502821,39.719886],[-77.929484,39.722327],[-78.344435,39.722468],[-78.62474,39.722946],[-79.045548,39.722883],[-79.476662,39.721078],[-79.478866,39.531689],[-79.482366,39.531689],[-79.486875,39.205896],[-79.469793,39.203734],[-79.42423,39.226842],[-79.420836,39.238453],[-79.347416,39.291396],[-79.253878,39.3371],[-79.256882,39.355459],[-79.214443,39.363405],[-79.102816,39.450482],[-79.09113,39.47252],[-79.054694,39.473101],[-78.957301,39.440095],[-78.934298,39.486284],[-78.91672,39.48632],[-78.837596,39.56714],[-78.825968,39.588183],[-78.795268,39.6107],[-78.72371,39.563493],[-78.654697,39.534605],[-78.61991,39.539236],[-78.566115,39.519371],[-78.527333,39.524801],[-78.468923,39.516483],[-78.417295,39.549603],[-78.449874,39.570619],[-78.445456,39.591446],[-78.407865,39.578629],[-78.39704,39.590225],[-78.42478,39.624541],[-78.372013,39.611699],[-78.355323,39.640663],[-78.266648,39.618951],[-78.254252,39.639976],[-78.171549,39.695643],[-78.104433,39.68144],[-78.037405,39.637044],[-78.006719,39.601483],[-77.958716,39.608862],[-77.889135,39.597453],[-77.884519,39.615811],[-77.83777,39.605895],[-77.835676,39.567156],[-77.874231,39.564072],[-77.861176,39.514293],[-77.827301,39.493075],[-77.797252,39.489465],[-77.798396,39.456328],[-77.786332,39.428876],[-77.753728,39.423908],[-77.735869,39.391172],[-77.752987,39.379023],[-77.755728,39.333938],[-77.719519,39.321314],[-77.675467,39.32436],[-77.644084,39.30875],[-77.588777,39.301591],[-77.568753,39.306447],[-77.54084,39.265269],[-77.484731,39.246052],[-77.45771,39.224979],[-77.481202,39.187909],[-77.507558,39.181367],[-77.527322,39.146961],[-77.518447,39.119782],[-77.481015,39.105689],[-77.460602,39.074843],[-77.386818,39.062241],[-77.340144,39.062909],[-77.245093,39.022146],[-77.255759,39.001991],[-77.244911,38.982614],[-77.197774,38.96674],[-77.145081,38.963146],[-77.119759,38.934343],[-77.041018,38.995548],[-76.909393,38.892852],[-77.039006,38.791645],[-77.043338,38.718468],[-77.081614,38.707926],[-77.122632,38.685256],[-77.136293,38.647231],[-77.129682,38.634704],[-77.203696,38.618172],[-77.246362,38.593441],[-77.255703,38.563318],[-77.318542,38.474437],[-77.3204,38.435221],[-77.304938,38.375271],[-77.283796,38.342855],[-77.235208,38.332536],[-77.163219,38.345823],[-77.137734,38.368023],[-77.086678,38.367928],[-77.05342,38.398813],[-77.018498,38.381941],[-77.014796,38.332367],[-77.030683,38.311622],[-77.00115,38.280174],[-76.962086,38.256964],[-76.94902,38.208418],[-76.915867,38.199603],[-76.872716,38.171686],[-76.839368,38.163609],[-76.800199,38.16888],[-76.700899,38.161359],[-76.610384,38.148516],[-76.596128,38.106892],[-76.535402,38.073626],[-76.516609,38.026783],[-76.465008,38.01322],[-76.412934,37.966332],[-76.338617,37.945286],[-76.257527,37.905738],[-76.233415,37.887638],[-76.052021,37.953578],[-75.993338,37.953487],[-75.943693,37.946133],[-75.952672,37.906827],[-75.80124,37.912174],[-75.761642,37.941366],[-75.691321,37.955496],[-75.647606,37.947025],[-75.648228,37.966771],[-75.624449,37.994195],[-75.249609,38.026715],[-75.166435,38.027834],[-75.124625,38.093901],[-75.087813,38.189356],[-75.041457,38.287009],[-75.020805,38.309756],[-74.999625,38.371668],[-74.986282,38.451632]]]},"properties":{"name":"Maryland","ns_code":"01714934","geoid":"24","usps_abbrev":"MD","fips_code":"24"}},{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-71.653208,41.217805],[-71.670491,41.194503],[-71.678807,41.158912],[-71.668345,41.12825],[-71.611673,41.097413],[-71.528168,41.103114],[-71.491432,41.125104],[-71.476925,41.168157],[-71.489844,41.194698],[-71.492196,41.240876],[-71.51635,41.271549],[-71.557569,41.294018],[-71.624504,41.274129],[-71.653208,41.217805]]],[[[-71.088571,41.431315],[-71.121116,41.492787],[-71.131727,41.593762],[-71.140442,41.605298],[-71.132507,41.660356],[-71.195555,41.675152],[-71.260982,41.752118],[-71.326496,41.779801],[-71.347197,41.823101],[-71.333997,41.8623],[-71.338698,41.898399],[-71.3817,41.893199],[-71.381401,42.018798],[-71.799242,42.008065],[-71.797883,41.931011],[-71.787247,41.656065],[-71.797747,41.416834],[-71.842029,41.410706],[-71.829365,41.342432],[-71.857458,41.320789],[-71.892005,41.330275],[-71.907258,41.304483],[-71.790972,41.184101],[-71.79148,41.272165],[-71.73956,41.275449],[-71.672595,41.289079],[-71.575253,41.320955],[-71.494805,41.307355],[-71.374495,41.339011],[-71.24996,41.377713],[-71.124594,41.411474],[-71.088571,41.431315]]]]},"properties":{"name":"Rhode Island","ns_code":"01219835","geoid":"44","usps_abbrev":"RI","fips_code":"44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-124.159546,46.261132],[-124.147029,46.228857],[-124.123418,46.202729],[-124.067313,46.183849],[-124.023064,46.116272],[-124.009796,46.081973],[-124.008125,46.00994],[-124.070819,45.973939],[-124.092434,45.934261],[-124.086508,45.916326],[-124.045819,45.890596],[-124.037704,45.841614],[-124.055646,45.816486],[-124.070395,45.76274],[-124.060016,45.739541],[-124.010805,45.708285],[-124.016648,45.632119],[-124.029324,45.612461],[-124.03623,45.563032],[-124.02666,45.537877],[-124.053115,45.514225],[-124.064549,45.467567],[-124.058949,45.442008],[-124.035819,45.422051],[-124.043308,45.384061],[-124.076977,45.341846],[-124.073829,45.317509],[-124.046552,45.293168],[-124.040257,45.268828],[-124.059487,45.206655],[-124.04508,45.179795],[-124.050131,45.140688],[-124.081425,45.085457],[-124.097475,45.027358],[-124.086205,45.002864],[-124.097932,44.929657],[-124.116574,44.866335],[-124.136209,44.849241],[-124.147638,44.769113],[-124.139118,44.710536],[-124.152005,44.663203],[-124.13744,44.641002],[-124.151221,44.602911],[-124.134313,44.583182],[-124.162619,44.512912],[-124.153428,44.465036],[-124.16352,44.374841],[-124.187649,44.288559],[-124.189008,44.164223],[-124.199841,44.145535],[-124.195377,44.097462],[-124.208808,43.999843],[-124.239694,43.811055],[-124.265705,43.701558],[-124.285296,43.672726],[-124.280333,43.648394],[-124.296769,43.585958],[-124.343836,43.465012],[-124.380274,43.402846],[-124.425643,43.385886],[-124.476948,43.329371],[-124.474849,43.288566],[-124.455498,43.268233],[-124.470326,43.245496],[-124.465235,43.200308],[-124.481613,43.15944],[-124.505969,43.143379],[-124.516361,43.102542],[-124.505331,43.067953],[-124.530606,42.99983],[-124.572353,42.922514],[-124.615956,42.892882],[-124.645154,42.861892],[-124.700283,42.784028],[-124.700342,42.752526],[-124.682414,42.730185],[-124.64213,42.716113],[-124.584689,42.719302],[-124.544129,42.683817],[-124.54059,42.644492],[-124.508492,42.619564],[-124.473554,42.614734],[-124.479422,42.573951],[-124.465351,42.553033],[-124.489838,42.542901],[-124.518687,42.511076],[-124.547516,42.499833],[-124.567221,42.477791],[-124.565352,42.443565],[-124.532572,42.408396],[-124.494154,42.396086],[-124.500838,42.376137],[-124.486544,42.338278],[-124.490334,42.290646],[-124.471356,42.203723],[-124.433514,42.164832],[-124.432455,42.131848],[-124.409314,42.064077],[-124.375047,42.02923],[-124.328835,41.998334],[-124.100376,41.996712],[-123.657,41.995137],[-123.624554,41.999837],[-123.434976,42.001637],[-123.347562,41.999108],[-123.145962,42.009242],[-123.045343,42.003075],[-122.893866,42.002669],[-122.634738,42.004854],[-122.378226,42.009517],[-122.162708,42.007746],[-122.000319,42.003967],[-121.846712,42.00307],[-121.573199,41.99851],[-121.340061,41.996361],[-121.126131,41.996009],[-121.035247,41.993324],[-120.647178,41.993084],[-120.291374,41.993004],[-119.999168,41.99454],[-119.886699,41.997472],[-119.575037,41.995654],[-119.20828,41.993177],[-118.696409,41.991794],[-118.501002,41.995446],[-118.197189,41.996995],[-117.626018,41.998096],[-117.133667,42.000439],[-117.026197,41.99989],[-117.026531,42.374871],[-117.026231,42.831194],[-117.026874,43.127005],[-117.026651,43.374877],[-117.026634,43.80811],[-117.032289,43.828767],[-116.982347,43.86884],[-116.980544,43.91483],[-116.961535,43.918388],[-116.958328,43.983495],[-116.934499,44.021218],[-116.973185,44.049425],[-116.977085,44.08582],[-116.933701,44.100043],[-116.895931,44.154295],[-116.903607,44.179985],[-116.935443,44.193962],[-116.967259,44.194581],[-116.975382,44.242392],[-117.031862,44.248635],[-117.05651,44.230874],[-117.119861,44.278272],[-117.141264,44.258515],[-117.170341,44.258889],[-117.22274,44.298326],[-117.189842,44.335007],[-117.235117,44.373853],[-117.242675,44.396548],[-117.215072,44.427162],[-117.224104,44.483734],[-117.200237,44.492027],[-117.181583,44.52296],[-117.144161,44.545647],[-117.146032,44.568603],[-117.124754,44.583834],[-117.120522,44.614658],[-117.098221,44.640689],[-117.095868,44.664737],[-117.063824,44.703623],[-117.044217,44.74514],[-117.000303,44.756082],[-116.9347,44.783881],[-116.932199,44.802781],[-116.896589,44.846545],[-116.852427,44.887578],[-116.83199,44.933007],[-116.857549,44.982567],[-116.848037,45.021728],[-116.797329,45.060267],[-116.774847,45.105536],[-116.728757,45.144381],[-116.703697,45.240099],[-116.67473,45.275844],[-116.674648,45.315082],[-116.623385,45.393963],[-116.597447,45.41277],[-116.588195,45.44292],[-116.55483,45.46293],[-116.557621,45.503495],[-116.524172,45.548565],[-116.463635,45.602785],[-116.488818,45.650799],[-116.535117,45.691277],[-116.535698,45.734231],[-116.59421,45.77908],[-116.665268,45.782059],[-116.698079,45.820852],[-116.734543,45.826527],[-116.763402,45.81658],[-116.814131,45.877641],[-116.866544,45.916958],[-116.87598,45.954775],[-116.915989,45.995413],[-117.337668,45.998662],[-117.479654,45.997774],[-117.717774,45.999869],[-118.226074,46.000358],[-118.767877,46.001017],[-118.987129,45.999855],[-119.008558,45.97927],[-119.12612,45.932859],[-119.19553,45.92787],[-119.25715,45.939926],[-119.322509,45.933183],[-119.364396,45.921605],[-119.450256,45.917354],[-119.487829,45.906307],[-119.524632,45.908605],[-119.571584,45.925456],[-119.623393,45.905639],[-119.669877,45.856867],[-119.772927,45.845578],[-119.802655,45.84753],[-119.907461,45.828135],[-119.965744,45.824365],[-120.07015,45.785152],[-120.141352,45.773152],[-120.170453,45.761951],[-120.210754,45.725951],[-120.284356,45.72105],[-120.40396,45.699249],[-120.482362,45.694449],[-120.505863,45.700048],[-120.559465,45.738348],[-120.634968,45.745847],[-120.68937,45.715847],[-120.788872,45.686246],[-120.855674,45.671545],[-120.895575,45.642945],[-120.943977,45.656445],[-121.084933,45.647893],[-121.131954,45.609757],[-121.183841,45.606441],[-121.215779,45.671238],[-121.287323,45.687019],[-121.33777,45.704949],[-121.401739,45.692887],[-121.462849,45.701367],[-121.499153,45.720846],[-121.533106,45.726541],[-121.631167,45.704657],[-121.668362,45.705082],[-121.735104,45.694039],[-121.811304,45.706761],[-121.867167,45.693277],[-121.908267,45.654399],[-122.00369,45.61593],[-122.044374,45.609516],[-122.100197,45.584215],[-122.183906,45.577563],[-122.2017,45.564141],[-122.266701,45.543841],[-122.331502,45.548241],[-122.352802,45.569441],[-122.380302,45.575941],[-122.438674,45.563585],[-122.545876,45.596192],[-122.675001,45.618025],[-122.76381,45.657138],[-122.774511,45.680437],[-122.760108,45.734413],[-122.769532,45.780583],[-122.795605,45.81],[-122.785026,45.867699],[-122.8115,45.912724],[-122.813999,45.960983],[-122.837638,45.980821],[-122.856158,46.014469],[-122.878092,46.031281],[-122.904119,46.083734],[-122.962681,46.104817],[-123.004233,46.133823],[-123.115904,46.185268],[-123.166416,46.188979],[-123.280166,46.144843],[-123.371433,46.146372],[-123.430987,46.181571],[-123.427629,46.229348],[-123.479644,46.269131],[-123.586954,46.25589],[-123.648775,46.258803],[-123.687602,46.250214],[-123.741449,46.269155],[-123.778124,46.25425],[-123.871869,46.234949],[-123.930477,46.238805],[-123.976275,46.269907],[-124.035951,46.264183],[-124.159546,46.261132]]]},"properties":{"name":"Oregon","ns_code":"01155107","geoid":"41","usps_abbrev":"OR","fips_code":"41"}},{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-67.418043,18.373],[-67.434095,18.417164],[-67.462032,18.435741],[-67.506866,18.432477],[-67.537492,18.406337],[-67.535988,18.358278],[-67.494261,18.327896],[-67.453999,18.331264],[-67.425624,18.354511],[-67.418043,18.373]]],[[[-67.81398,18.037399],[-67.791511,18.074672],[-67.791986,18.107458],[-67.81126,18.143885],[-67.852443,18.170111],[-67.894933,18.166674],[-67.91617,18.200104],[-67.936941,18.209366],[-67.973663,18.2036],[-67.998691,18.170776],[-67.98692,18.109298],[-67.998296,18.083761],[-67.976136,18.039593],[-67.945834,18.017536],[-67.900887,17.99948],[-67.871392,18.000313],[-67.838479,18.013851],[-67.81398,18.037399]]],[[[-66.578441,18.541431],[-66.642332,18.543529],[-66.734606,18.526012],[-66.770444,18.540028],[-66.804219,18.543784],[-66.883874,18.541664],[-66.908102,18.533297],[-66.968656,18.542992],[-67.017094,18.562645],[-67.104836,18.566588],[-67.160467,18.552543],[-67.205744,18.517128],[-67.221342,18.476157],[-67.208359,18.442133],[-67.249626,18.418572],[-67.302717,18.401559],[-67.318694,18.381034],[-67.319911,18.343187],[-67.285964,18.282165],[-67.261333,18.25604],[-67.230465,18.24656],[-67.216052,18.213],[-67.237252,18.16765],[-67.235374,18.120145],[-67.253375,18.104651],[-67.255365,18.057672],[-67.266565,17.990341],[-67.26068,17.92854],[-67.233481,17.899512],[-67.194504,17.881745],[-67.129907,17.897151],[-67.006021,17.885795],[-66.976924,17.878733],[-66.917795,17.875479],[-66.881454,17.891299],[-66.82531,17.900449],[-66.788154,17.916064],[-66.713398,17.912852],[-66.672186,17.896901],[-66.641673,17.911973],[-66.58068,17.910465],[-66.586906,17.876437],[-66.571297,17.84548],[-66.548561,17.833252],[-66.513313,17.835415],[-66.479395,17.852022],[-66.461742,17.86967],[-66.424485,17.881992],[-66.394153,17.869538],[-66.303093,17.882112],[-66.243312,17.862565],[-66.213273,17.864509],[-66.179711,17.882565],[-66.148497,17.877927],[-66.11414,17.882628],[-66.076723,17.910671],[-66.0498,17.897745],[-66.002807,17.898089],[-65.972882,17.923245],[-65.94461,17.920571],[-65.852531,17.941486],[-65.797639,17.976982],[-65.782382,18.018998],[-65.748572,18.040939],[-65.739112,18.070778],[-65.716098,18.106266],[-65.68942,18.126404],[-65.63039,18.128965],[-65.627491,18.083413],[-65.588623,18.041081],[-65.549699,18.028449],[-65.495864,18.042021],[-65.447961,18.035921],[-65.312225,18.071142],[-65.2496,18.084305],[-65.223247,18.105224],[-65.215089,18.136258],[-65.232012,18.170845],[-65.278316,18.197918],[-65.328785,18.19993],[-65.394743,18.211742],[-65.431503,18.208672],[-65.464425,18.222214],[-65.456564,18.275163],[-65.46154,18.293299],[-65.423773,18.291377],[-65.360399,18.253436],[-65.28668,18.22599],[-65.252926,18.238022],[-65.227575,18.23577],[-65.191134,18.258884],[-65.168825,18.303516],[-65.181762,18.357727],[-65.208484,18.389371],[-65.235831,18.397733],[-65.302921,18.387502],[-65.322625,18.403295],[-65.362566,18.419472],[-65.392904,18.418946],[-65.424333,18.390867],[-65.463978,18.39348],[-65.58668,18.443333],[-65.624606,18.45126],[-65.678612,18.418533],[-65.723664,18.454449],[-65.757203,18.473204],[-65.857719,18.487249],[-65.876994,18.49955],[-65.932587,18.501043],[-65.993401,18.516598],[-66.107645,18.519209],[-66.19407,18.526512],[-66.21211,18.521844],[-66.260071,18.529443],[-66.31325,18.530695],[-66.342994,18.540861],[-66.415983,18.54362],[-66.452951,18.53896],[-66.478561,18.52442],[-66.515152,18.533752],[-66.578441,18.541431]]]]},"properties":{"name":"Puerto Rico","ns_code":"01779808","geoid":"72","usps_abbrev":"PR","fips_code":"72"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-90.640927,42.508302],[-90.405927,42.506891],[-90.157406,42.508325],[-89.955237,42.505651],[-89.66982,42.505044],[-89.262669,42.49819],[-88.991611,42.496005],[-88.804148,42.4921],[-88.628997,42.495045],[-88.389994,42.494516],[-88.081066,42.495631],[-87.803218,42.492566],[-87.375058,42.493815],[-87.019935,42.493498],[-87.058716,42.765202],[-87.108397,43.12501],[-87.147166,43.379859],[-87.125079,43.670445],[-87.114102,43.734111],[-87.048847,44],[-87.013234,44.131905],[-87.00008,44.154821],[-86.847694,44.500339],[-86.855184,44.500339],[-86.686288,44.881002],[-86.49993,45.0808],[-86.433128,45.124991],[-86.2501,45.235735],[-86.282304,45.249983],[-86.754236,45.44361],[-87.101133,45.44423],[-87.17117,45.35254],[-87.315422,45.240657],[-87.405694,45.201969],[-87.44251,45.076434],[-87.661211,45.108279],[-87.6839,45.144135],[-87.735282,45.176565],[-87.72796,45.207956],[-87.687729,45.297492],[-87.647768,45.340563],[-87.658175,45.369476],[-87.693956,45.389893],[-87.754104,45.349442],[-87.79039,45.353445],[-87.850418,45.347492],[-87.884855,45.362792],[-87.849668,45.409518],[-87.861697,45.434473],[-87.812884,45.464329],[-87.792769,45.499967],[-87.808366,45.544662],[-87.774682,45.602024],[-87.82271,45.6627],[-87.781007,45.673934],[-87.812338,45.711303],[-87.839402,45.717814],[-87.879812,45.754843],[-87.963452,45.75822],[-87.99454,45.795637],[-88.05064,45.780999],[-88.094754,45.785755],[-88.132456,45.824156],[-88.070483,45.874329],[-88.101757,45.883192],[-88.102461,45.921546],[-88.126654,45.921791],[-88.180498,45.948287],[-88.230193,45.947251],[-88.25498,45.963512],[-88.301378,45.956459],[-88.380891,45.991813],[-88.423493,45.982072],[-88.464731,46.000738],[-88.49798,45.995794],[-88.50748,46.018516],[-88.565127,46.015729],[-88.616471,45.987732],[-88.658654,45.98929],[-88.678868,46.013595],[-88.739671,46.027423],[-88.782073,46.016185],[-88.851133,46.040444],[-89.09164,46.138447],[-89.463498,46.210062],[-89.918893,46.29776],[-90.120572,46.337039],[-90.118822,46.359531],[-90.158345,46.409696],[-90.216172,46.501272],[-90.263139,46.502668],[-90.310839,46.536289],[-90.350684,46.540325],[-90.395069,46.533768],[-90.418392,46.566099],[-90.125164,47.020679],[-90.00014,47.214969],[-89.957102,47.291103],[-90.264218,47.30027],[-90.654661,47.309822],[-91.000198,47.149758],[-91.319638,46.999929],[-91.500181,46.91332],[-91.59214,46.874935],[-91.875186,46.763303],[-91.981341,46.723091],[-92.020294,46.704041],[-92.089493,46.749237],[-92.13789,46.73954],[-92.146292,46.716032],[-92.189091,46.717541],[-92.176259,46.690473],[-92.212392,46.649941],[-92.265993,46.651041],[-92.292192,46.666042],[-92.292683,46.441283],[-92.294033,46.074377],[-92.335335,46.059422],[-92.350407,46.016368],[-92.410014,46.027251],[-92.442259,46.016177],[-92.472761,45.972952],[-92.525186,45.983862],[-92.551186,45.95224],[-92.637841,45.934469],[-92.712503,45.891705],[-92.765681,45.827252],[-92.757947,45.811216],[-92.784617,45.764199],[-92.809837,45.744172],[-92.869193,45.717568],[-92.888114,45.628377],[-92.883749,45.575483],[-92.823309,45.560934],[-92.773412,45.568235],[-92.726082,45.541112],[-92.726677,45.514462],[-92.680234,45.464344],[-92.646602,45.441635],[-92.650284,45.398769],[-92.704054,45.35366],[-92.698967,45.336374],[-92.737121,45.300459],[-92.762004,45.288213],[-92.751708,45.218666],[-92.766808,45.185466],[-92.744938,45.108309],[-92.802911,45.065403],[-92.761953,45.0221],[-92.769445,44.97215],[-92.750645,44.937299],[-92.773946,44.889997],[-92.765668,44.84101],[-92.808415,44.751604],[-92.732043,44.714345],[-92.664715,44.663379],[-92.621847,44.639018],[-92.622537,44.616054],[-92.568946,44.603372],[-92.539909,44.567456],[-92.432527,44.565705],[-92.347567,44.557149],[-92.317357,44.542512],[-92.298484,44.494621],[-92.282364,44.477707],[-92.221083,44.440386],[-92.123679,44.42184],[-92.053549,44.401375],[-92.038147,44.388731],[-91.959996,44.359797],[-91.928224,44.335473],[-91.887189,44.252513],[-91.892963,44.235149],[-91.875158,44.200575],[-91.817302,44.164235],[-91.710597,44.12048],[-91.646446,44.063337],[-91.5826,44.027381],[-91.507121,44.01898],[-91.440541,44.001518],[-91.406011,43.963929],[-91.36472,43.93488],[-91.35674,43.916564],[-91.284138,43.847065],[-91.262433,43.79217],[-91.244135,43.774667],[-91.26845,43.709824],[-91.268748,43.615348],[-91.236666,43.587656],[-91.24382,43.54913],[-91.217706,43.50055],[-91.232241,43.460018],[-91.203144,43.419805],[-91.19767,43.395334],[-91.21477,43.365874],[-91.201847,43.349103],[-91.129121,43.32635],[-91.085652,43.29187],[-91.05791,43.253968],[-91.079278,43.228259],[-91.119115,43.200366],[-91.1562,43.142945],[-91.175253,43.134665],[-91.179382,43.068624],[-91.174692,43.038713],[-91.14655,42.963345],[-91.143491,42.904698],[-91.10056,42.883078],[-91.065606,42.756766],[-91.051275,42.737001],[-90.952415,42.686778],[-90.720209,42.640758],[-90.702671,42.630756],[-90.686975,42.591774],[-90.645627,42.5441],[-90.640927,42.508302]]]},"properties":{"name":"Wisconsin","ns_code":"01779806","geoid":"55","usps_abbrev":"WI","fips_code":"55"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-97.228722,49.000562],[-97.469707,49.000467],[-98.121446,49.000303],[-98.625396,49.000053],[-99.250409,48.999508],[-99.722716,48.999108],[-100.069304,48.999097],[-100.629258,48.999248],[-101.250435,48.999319],[-101.625438,48.999168],[-102.216993,48.998553],[-102.51754,48.998949],[-102.98106,48.999229],[-103.574797,48.999146],[-104.048736,48.999877],[-104.048275,48.706527],[-104.045937,48.249276],[-104.043865,47.968937],[-104.041443,47.863054],[-104.043273,47.750027],[-104.044406,47.459399],[-104.044777,47.125012],[-104.046067,46.838634],[-104.045045,46.509788],[-104.045235,46.125004],[-104.045441,45.94531],[-103.744941,45.945061],[-103.369029,45.945152],[-102.983434,45.945079],[-102.549895,45.944836],[-102.126414,45.944695],[-101.786099,45.944341],[-101.420443,45.943806],[-101.041137,45.943455],[-100.750596,45.943662],[-100.308163,45.943258],[-99.760635,45.940811],[-99.296714,45.940059],[-98.756598,45.938791],[-98.414398,45.936493],[-98.0285,45.935777],[-97.482542,45.935091],[-97.225797,45.93537],[-96.563672,45.935245],[-96.577875,46.027034],[-96.554436,46.084186],[-96.588387,46.179084],[-96.584378,46.203539],[-96.597792,46.22888],[-96.59966,46.330481],[-96.667422,46.376117],[-96.693927,46.422081],[-96.7162,46.436679],[-96.713672,46.465012],[-96.735054,46.48057],[-96.750448,46.544048],[-96.745697,46.571027],[-96.796041,46.631209],[-96.79951,46.675245],[-96.7811,46.722048],[-96.787136,46.785651],[-96.802544,46.811521],[-96.775059,46.840363],[-96.776713,46.895619],[-96.759599,46.915708],[-96.791758,46.928465],[-96.834839,47.007254],[-96.817737,47.051118],[-96.826147,47.076497],[-96.81619,47.108481],[-96.83472,47.15639],[-96.822062,47.185175],[-96.839359,47.196357],[-96.829126,47.234723],[-96.843857,47.292939],[-96.830618,47.338014],[-96.852871,47.375009],[-96.837974,47.38273],[-96.865852,47.418975],[-96.855814,47.439723],[-96.849853,47.497311],[-96.86175,47.541398],[-96.849908,47.590754],[-96.888092,47.639648],[-96.899237,47.689579],[-97.005447,47.87024],[-97.02544,47.885935],[-97.018107,47.920228],[-97.0556,47.949085],[-97.071288,48.045797],[-97.098829,48.071477],[-97.146531,48.144055],[-97.149755,48.185824],[-97.13165,48.20711],[-97.135835,48.236919],[-97.11657,48.279661],[-97.13125,48.319543],[-97.126745,48.34214],[-97.155481,48.363768],[-97.15721,48.385732],[-97.131479,48.406586],[-97.149236,48.443358],[-97.14208,48.463347],[-97.152765,48.530285],[-97.164405,48.557047],[-97.12424,48.633973],[-97.09991,48.658522],[-97.105442,48.689648],[-97.136403,48.725733],[-97.150559,48.782562],[-97.183988,48.834085],[-97.17302,48.851568],[-97.199891,48.88259],[-97.234128,48.947898],[-97.228722,49.000562]]]},"properties":{"name":"North Dakota","ns_code":"01779797","geoid":"38","usps_abbrev":"ND","fips_code":"38"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-119.999168,41.99454],[-119.998287,41.618818],[-119.99976,41.236061],[-119.999875,40.999894],[-119.998785,40.77385],[-119.995976,40.57055],[-119.995705,40.37583],[-119.997903,39.981636],[-120.001133,39.752229],[-120.00082,39.606828],[-120.006127,39.374106],[-120.006473,39.272878],[-120.001014,38.999574],[-119.626004,38.740941],[-119.461282,38.627533],[-119.097159,38.372851],[-118.771867,38.141871],[-118.714201,38.102105],[-118.372572,37.856012],[-117.875927,37.497267],[-117.712358,37.374931],[-117.500117,37.22038],[-117.373451,37.124932],[-117.000895,36.847694],[-116.750926,36.658377],[-116.488233,36.459097],[-116.380347,36.374961],[-116.250818,36.276939],[-115.918743,36.019936],[-115.646336,35.807735],[-115.25972,35.503541],[-115.100957,35.375681],[-114.994666,35.292511],[-114.633487,35.001857],[-114.63819,35.022069],[-114.604182,35.073715],[-114.645152,35.104995],[-114.626316,35.120423],[-114.578263,35.12881],[-114.569529,35.162317],[-114.595163,35.321883],[-114.627325,35.410193],[-114.663541,35.447797],[-114.678892,35.501276],[-114.65677,35.534964],[-114.670191,35.583471],[-114.653927,35.611739],[-114.689001,35.65028],[-114.682657,35.688571],[-114.705447,35.711757],[-114.694267,35.756633],[-114.712026,35.805529],[-114.695757,35.833387],[-114.706076,35.845873],[-114.663214,35.873692],[-114.708112,35.909933],[-114.707603,35.92795],[-114.740536,35.975545],[-114.740866,36.012928],[-114.723324,36.026588],[-114.754508,36.086171],[-114.734085,36.104672],[-114.681847,36.109192],[-114.627079,36.140761],[-114.620605,36.131759],[-114.57109,36.151099],[-114.508104,36.149713],[-114.504715,36.127188],[-114.456487,36.138032],[-114.443736,36.125593],[-114.412491,36.146511],[-114.370181,36.142624],[-114.323458,36.101186],[-114.304171,36.07558],[-114.314427,36.060523],[-114.270862,36.045523],[-114.243865,36.015266],[-114.211932,36.014834],[-114.174683,36.02667],[-114.1534,36.02317],[-114.066798,36.179087],[-114.043944,36.19335],[-114.045559,36.288837],[-114.043135,36.380478],[-114.049935,36.709521],[-114.0506,37.000396],[-114.052541,37.112881],[-114.051404,37.23385],[-114.052923,37.592956],[-114.049679,37.8236],[-114.050424,37.999958],[-114.049417,38.264849],[-114.050519,38.443899],[-114.048044,38.874949],[-114.049104,39.005509],[-114.047077,39.499811],[-114.047269,39.759224],[-114.046833,40.035017],[-114.045827,40.424823],[-114.042674,40.845903],[-114.041396,41.219958],[-114.040231,41.491148],[-114.039648,41.884815],[-114.041723,41.99372],[-114.467581,41.995492],[-114.598267,41.994511],[-114.806948,42.001842],[-115.031783,41.996008],[-115.305702,41.996121],[-115.870181,41.996766],[-116.243962,41.997651],[-116.368477,41.99628],[-116.606567,41.99739],[-117.026197,41.99989],[-117.133667,42.000439],[-117.626018,41.998096],[-118.197189,41.996995],[-118.501002,41.995446],[-118.696409,41.991794],[-119.20828,41.993177],[-119.575037,41.995654],[-119.886699,41.997472],[-119.999168,41.99454]]]},"properties":{"name":"Nevada","ns_code":"01779793","geoid":"32","usps_abbrev":"NV","fips_code":"32"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-83.108614,35.000659],[-83.501536,34.992862],[-83.620185,34.992091],[-83.619985,34.986592],[-83.749894,34.987691],[-84.039375,34.986973],[-84.321869,34.988408],[-84.809184,34.987569],[-84.952772,34.987943],[-85.466509,34.982971],[-85.605165,34.984678],[-85.561416,34.750079],[-85.527261,34.588683],[-85.47045,34.328239],[-85.406748,34.002314],[-85.356921,33.748233],[-85.304439,33.482884],[-85.233108,33.111714],[-85.184737,32.870514],[-85.154855,32.839689],[-85.165635,32.808222],[-85.122326,32.774383],[-85.14298,32.761654],[-85.113167,32.732813],[-85.122738,32.716032],[-85.112337,32.683234],[-85.088483,32.657758],[-85.105437,32.644934],[-85.08224,32.616264],[-85.067199,32.579306],[-85.023645,32.542955],[-85.001532,32.514741],[-84.99353,32.450743],[-84.971831,32.442843],[-84.983866,32.362386],[-85.004582,32.345196],[-85.002791,32.322428],[-84.9338,32.29826],[-84.901191,32.258374],[-84.930727,32.21895],[-84.973328,32.21765],[-84.963728,32.195852],[-85.009224,32.181646],[-85.06206,32.132486],[-85.045063,32.088063],[-85.05883,32.046656],[-85.055075,32.010714],[-85.08683,31.957758],[-85.08213,31.944658],[-85.140731,31.857461],[-85.131231,31.815262],[-85.141831,31.782363],[-85.11913,31.730964],[-85.12593,31.696265],[-85.092429,31.659966],[-85.087029,31.640966],[-85.057473,31.618624],[-85.05796,31.57084],[-85.041428,31.539293],[-85.071621,31.468384],[-85.065639,31.439521],[-85.09217,31.364576],[-85.083828,31.326971],[-85.090334,31.293606],[-85.113261,31.264343],[-85.096843,31.225239],[-85.106963,31.202693],[-85.099647,31.164942],[-85.077801,31.157889],[-85.052867,31.119489],[-85.037062,31.109753],[-85.028573,31.074583],[-85.01139,31.053547],[-85.002499,31.000685],[-85.004026,30.973468],[-84.980427,30.962086],[-84.983527,30.935486],[-84.94252,30.888488],[-84.926824,30.846389],[-84.936824,30.818489],[-84.911122,30.751191],[-84.897622,30.751391],[-84.864693,30.711542],[-84.644815,30.701991],[-84.474409,30.692793],[-84.374894,30.689793],[-83.975655,30.67037],[-83.499925,30.645674],[-83.065223,30.620039],[-82.590548,30.592186],[-82.214677,30.568556],[-82.240403,30.53777],[-82.225072,30.50769],[-82.20124,30.485114],[-82.210733,30.42564],[-82.192596,30.378831],[-82.171623,30.359918],[-82.105018,30.368817],[-82.065598,30.358114],[-82.037218,30.371848],[-82.043762,30.414869],[-82.016906,30.475111],[-82.018554,30.528992],[-82.00581,30.565358],[-82.05022,30.674538],[-82.035927,30.706205],[-82.039795,30.747297],[-82.011603,30.761878],[-82.002385,30.789798],[-81.972458,30.779926],[-81.963928,30.8181],[-81.891052,30.822308],[-81.881858,30.799961],[-81.793968,30.787239],[-81.74096,30.765142],[-81.718109,30.744806],[-81.659805,30.751265],[-81.647483,30.727394],[-81.623771,30.736052],[-81.572395,30.721897],[-81.489898,30.726156],[-81.464013,30.710983],[-81.347015,30.712444],[-81.367416,30.752514],[-81.400482,30.766426],[-81.374809,30.817377],[-81.350204,30.889109],[-81.345207,30.931503],[-81.317535,30.9485],[-81.304779,30.985712],[-81.344498,31.01811],[-81.345306,31.059362],[-81.297874,31.080952],[-81.285881,31.109444],[-81.292145,31.155415],[-81.234337,31.170258],[-81.18277,31.265846],[-81.183571,31.329197],[-81.172546,31.376831],[-81.190758,31.399876],[-81.166939,31.423445],[-81.143845,31.471521],[-81.125435,31.477541],[-81.087067,31.529158],[-81.069633,31.642405],[-81.049789,31.688633],[-81.056623,31.714875],[-81.025824,31.720227],[-80.9972,31.748503],[-80.970726,31.798353],[-80.938316,31.809008],[-80.896988,31.852806],[-80.855339,31.910809],[-80.819275,31.933855],[-80.789841,31.96439],[-80.780693,32.01137],[-80.751429,32.033468],[-80.89296,32.034951],[-80.926769,32.041663],[-80.954483,32.068616],[-81.01197,32.100178],[-81.032633,32.085476],[-81.066965,32.090384],[-81.117225,32.117604],[-81.128142,32.169097],[-81.123149,32.20132],[-81.15577,32.245793],[-81.141414,32.272039],[-81.123276,32.276975],[-81.122631,32.30699],[-81.155114,32.344341],[-81.178283,32.392986],[-81.205565,32.423929],[-81.200408,32.468314],[-81.251069,32.517805],[-81.279516,32.536226],[-81.299796,32.563049],[-81.319121,32.559596],[-81.389205,32.595416],[-81.41866,32.629392],[-81.393033,32.651542],[-81.405711,32.688727],[-81.427505,32.702242],[-81.406074,32.741625],[-81.423331,32.778512],[-81.426475,32.840773],[-81.457061,32.850389],[-81.483198,32.921802],[-81.502716,32.938688],[-81.4919,33.006694],[-81.51059,33.025805],[-81.565501,33.047888],[-81.614994,33.095551],[-81.645433,33.094051],[-81.704634,33.11645],[-81.743835,33.14145],[-81.768235,33.167949],[-81.756935,33.197848],[-81.789236,33.208247],[-81.852822,33.248542],[-81.835738,33.271045],[-81.863336,33.289844],[-81.847736,33.307243],[-81.918337,33.332842],[-81.94474,33.364041],[-81.931549,33.382156],[-81.93139,33.428474],[-81.913126,33.438333],[-81.934136,33.468337],[-81.985938,33.486536],[-82.00983,33.530313],[-82.046335,33.56383],[-82.092016,33.581862],[-82.10624,33.595637],[-82.133523,33.590535],[-82.196584,33.630583],[-82.200164,33.662012],[-82.23432,33.699836],[-82.247472,33.752591],[-82.299393,33.785037],[-82.300213,33.800627],[-82.346933,33.834298],[-82.408353,33.86632],[-82.42281,33.863757],[-82.494811,33.911712],[-82.524515,33.94336],[-82.556765,33.945324],[-82.579553,33.979688],[-82.593887,34.028109],[-82.627907,34.06419],[-82.675219,34.129779],[-82.717459,34.150546],[-82.740585,34.207268],[-82.743172,34.251598],[-82.754242,34.275787],[-82.782128,34.298278],[-82.798658,34.341777],[-82.833571,34.364092],[-82.8644,34.459785],[-82.901551,34.486764],[-82.990684,34.479968],[-83.034565,34.483571],[-83.086807,34.517555],[-83.122904,34.560117],[-83.168278,34.590998],[-83.23258,34.611597],[-83.255281,34.637696],[-83.293183,34.654296],[-83.304641,34.669561],[-83.3389,34.680039],[-83.352692,34.716904],[-83.349075,34.736633],[-83.326309,34.750839],[-83.32415,34.787479],[-83.246361,34.856533],[-83.242599,34.877808],[-83.205032,34.880329],[-83.158966,34.929138],[-83.120872,34.942039],[-83.108614,35.000659]]]},"properties":{"name":"Georgia","ns_code":"01705317","geoid":"13","usps_abbrev":"GA","fips_code":"13"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-74.694914,41.357423],[-74.457584,41.248225],[-74.301994,41.172594],[-74.18239,41.121595],[-73.902679,40.997307],[-73.896479,40.981701],[-73.929821,40.888682],[-73.963182,40.8269],[-74.013784,40.756601],[-74.026284,40.699902],[-74.055739,40.65176],[-74.143255,40.642149],[-74.18139,40.646475],[-74.202247,40.630903],[-74.19952,40.597539],[-74.218398,40.556996],[-74.250609,40.541851],[-74.25909,40.497207],[-74.228153,40.477399],[-73.949912,40.52554],[-73.886652,40.489794],[-73.826158,40.522874],[-73.768781,40.533747],[-73.624574,40.534511],[-73.486496,40.520505],[-73.326272,40.556916],[-73.274025,40.551314],[-73.249562,40.562565],[-73.124558,40.598366],[-73.014004,40.625099],[-72.874542,40.675019],[-72.749544,40.713405],[-72.624539,40.745567],[-72.374529,40.818595],[-72.249525,40.866765],[-71.999516,40.956019],[-71.932751,40.981952],[-71.884775,40.992269],[-71.837088,41.010892],[-71.794139,41.036977],[-71.777491,41.067292],[-71.790635,41.101837],[-71.790972,41.184101],[-71.907258,41.304483],[-71.929451,41.310387],[-72.019214,41.290594],[-72.081775,41.26224],[-72.527901,41.177774],[-72.999547,41.087108],[-73.249557,41.025866],[-73.612885,40.950943],[-73.656771,40.984509],[-73.655241,41.011852],[-73.727775,41.100696],[-73.482695,41.212772],[-73.550962,41.295421],[-73.521041,41.619773],[-73.510961,41.758749],[-73.489615,42.000092],[-73.487314,42.049638],[-73.508142,42.086257],[-73.356894,42.49836],[-73.264957,42.74594],[-73.276421,42.746019],[-73.290944,42.80192],[-73.278673,42.83341],[-73.27417,42.949028],[-73.256475,43.260093],[-73.246844,43.517252],[-73.241486,43.532621],[-73.258631,43.56495],[-73.284912,43.579272],[-73.302553,43.625709],[-73.365563,43.623441],[-73.398126,43.568065],[-73.428637,43.583994],[-73.41832,43.623325],[-73.42791,43.634428],[-73.405243,43.688368],[-73.370612,43.725329],[-73.351265,43.769823],[-73.391014,43.818411],[-73.372589,43.845354],[-73.3741,43.875304],[-73.408859,43.934505],[-73.410385,44.026503],[-73.437905,44.045125],[-73.411225,44.113767],[-73.390625,44.191068],[-73.363393,44.207737],[-73.343376,44.23819],[-73.319603,44.249909],[-73.310914,44.274298],[-73.324195,44.310033],[-73.333613,44.3723],[-73.31504,44.388526],[-73.296052,44.428334],[-73.299896,44.476651],[-73.342933,44.551907],[-73.381849,44.589316],[-73.38982,44.617211],[-73.370064,44.666071],[-73.363792,44.745254],[-73.333152,44.789588],[-73.335044,44.804109],[-73.379452,44.83801],[-73.356218,44.904492],[-73.338622,44.919366],[-73.338244,44.964751],[-73.354633,44.987352],[-73.343124,45.01084],[-73.639718,45.003464],[-73.874597,45.001223],[-74.150235,44.991357],[-74.335184,44.991905],[-74.45753,44.997033],[-74.683966,44.99969],[-74.731301,44.990419],[-74.826576,45.015865],[-74.888042,44.999658],[-74.907948,44.983369],[-74.972491,44.983405],[-75.005151,44.958406],[-75.064826,44.929449],[-75.134416,44.915102],[-75.165123,44.893324],[-75.273545,44.853084],[-75.301976,44.826637],[-75.344538,44.809139],[-75.477641,44.720224],[-75.505902,44.705081],[-75.618364,44.619637],[-75.662373,44.591927],[-75.766226,44.515847],[-75.807765,44.471641],[-75.820819,44.432239],[-75.912985,44.368084],[-75.970178,44.342828],[-76.000998,44.347534],[-76.045224,44.33172],[-76.097351,44.299541],[-76.130884,44.296635],[-76.161825,44.280776],[-76.164258,44.239603],[-76.191324,44.221239],[-76.245487,44.203664],[-76.312639,44.199045],[-76.352679,44.134743],[-76.438287,44.094172],[-76.49967,43.999538],[-76.753538,43.684275],[-76.776233,43.629529],[-76.999264,43.629213],[-77.12471,43.631118],[-77.696302,43.631262],[-78.124742,43.631175],[-78.374749,43.632092],[-78.688295,43.634742],[-78.749761,43.609258],[-79.12477,43.478464],[-79.200936,43.450422],[-79.070452,43.262455],[-79.05606,43.254156],[-79.048658,43.199655],[-79.052925,43.17346],[-79.042357,43.143654],[-79.069556,43.120255],[-79.057961,43.106957],[-79.074459,43.077863],[-79.00713,43.065757],[-78.999435,43.056057],[-79.023256,43.016356],[-79.011563,42.985256],[-78.961761,42.957756],[-78.93236,42.955857],[-78.905659,42.923357],[-78.905758,42.899957],[-78.930559,42.850105],[-78.99976,42.804368],[-79.532228,42.603855],[-79.762418,42.516072],[-79.762569,42.375058],[-79.761313,41.998808],[-79.47252,41.998254],[-79.006166,41.999124],[-78.874759,41.997559],[-78.59665,41.999877],[-78.271204,41.998968],[-78.124731,42.000451],[-77.77671,41.998428],[-77.505308,42.00007],[-77.126846,41.999414],[-76.835182,42.002134],[-76.445733,41.998747],[-75.983082,41.999035],[-75.742217,41.997864],[-75.359579,41.999445],[-75.310358,41.949012],[-75.279094,41.938917],[-75.271293,41.887358],[-75.223734,41.857456],[-75.204002,41.869867],[-75.114399,41.843583],[-75.113334,41.822782],[-75.085789,41.811626],[-75.10464,41.774203],[-75.075942,41.771518],[-75.053227,41.751662],[-75.052736,41.688393],[-75.044224,41.617978],[-75.074613,41.605711],[-75.027343,41.563541],[-75.023018,41.533147],[-74.987645,41.508738],[-74.981652,41.479945],[-74.941798,41.483542],[-74.909181,41.472436],[-74.890175,41.438178],[-74.812123,41.442982],[-74.793856,41.422671],[-74.757926,41.423437],[-74.713412,41.389814],[-74.694914,41.357423]]]},"properties":{"name":"New York","ns_code":"01779796","geoid":"36","usps_abbrev":"NY","fips_code":"36"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-94.617919,36.499414],[-94.580391,36.264929],[-94.5105,35.862498],[-94.450445,35.502435],[-94.430662,35.392478],[-94.438963,35.184733],[-94.449013,34.902025],[-94.457209,34.646764],[-94.466046,34.350002],[-94.472906,34.087971],[-94.485878,33.637865],[-94.452701,33.617373],[-94.4532,33.59178],[-94.430041,33.591124],[-94.38953,33.546739],[-94.35359,33.544005],[-94.352643,33.56063],[-94.309582,33.551673],[-94.291212,33.581478],[-94.238866,33.576748],[-94.226188,33.552976],[-94.203594,33.566534],[-94.184308,33.594578],[-94.162266,33.588906],[-94.147428,33.565183],[-94.082352,33.57572],[-94.073833,33.556006],[-94.04345,33.552253],[-94.04273,33.241822],[-94.042964,33.019219],[-93.49052,33.018442],[-93.000211,33.017625],[-92.55941,33.012734],[-92.219778,33.009166],[-92.041143,33.007784],[-91.587251,33.00631],[-91.166073,33.004106],[-91.162363,33.019683],[-91.129087,33.033554],[-91.124639,33.064127],[-91.201125,33.108185],[-91.183662,33.141691],[-91.150362,33.130695],[-91.104317,33.131597],[-91.087589,33.145176],[-91.084366,33.180856],[-91.09171,33.220813],[-91.065629,33.232982],[-91.043985,33.269835],[-91.07853,33.283306],[-91.1001,33.238124],[-91.141216,33.298397],[-91.142219,33.348989],[-91.120409,33.363809],[-91.058152,33.428705],[-91.086498,33.451576],[-91.096942,33.41099],[-91.120678,33.388545],[-91.166304,33.379709],[-91.209295,33.404895],[-91.131885,33.430062],[-91.117975,33.453806],[-91.125109,33.472842],[-91.1646,33.497841],[-91.177381,33.484853],[-91.16946,33.452137],[-91.202829,33.434469],[-91.235181,33.438972],[-91.183372,33.498157],[-91.219297,33.532364],[-91.228489,33.564667],[-91.175979,33.582968],[-91.152148,33.582721],[-91.130445,33.606034],[-91.139209,33.625658],[-91.171168,33.647766],[-91.221117,33.662988],[-91.227857,33.683073],[-91.207807,33.700095],[-91.159746,33.706096],[-91.133416,33.67679],[-91.078507,33.658283],[-91.034565,33.673018],[-91.04678,33.706313],[-91.06829,33.716477],[-91.125527,33.70878],[-91.14662,33.732456],[-91.134744,33.782285],[-91.107318,33.770619],[-91.053886,33.778701],[-91.026782,33.763642],[-91.000106,33.769165],[-90.99175,33.792597],[-91.046849,33.815365],[-91.073011,33.857449],[-91.061247,33.877505],[-91.01151,33.924733],[-91.020097,33.937127],[-91.088164,33.960078],[-91.087921,33.975335],[-91.048367,33.985078],[-91.01889,34.003151],[-91.000108,33.966428],[-90.967632,33.963324],[-90.961551,33.979946],[-90.987948,34.019038],[-90.896897,34.024627],[-90.870738,34.084281],[-90.882623,34.096613],[-90.92123,34.093948],[-90.95517,34.118833],[-90.954299,34.138496],[-90.910007,34.165502],[-90.86788,34.142146],[-90.822593,34.144054],[-90.807223,34.163745],[-90.816572,34.183023],[-90.887887,34.181982],[-90.916056,34.196923],[-90.937042,34.235341],[-90.905876,34.243541],[-90.882162,34.216975],[-90.847808,34.20653],[-90.833335,34.264264],[-90.802924,34.282465],[-90.765165,34.280524],[-90.740889,34.306538],[-90.765174,34.342818],[-90.756197,34.367256],[-90.712088,34.363805],[-90.67666,34.371411],[-90.693129,34.32257],[-90.657371,34.327287],[-90.666787,34.355817],[-90.638672,34.385043],[-90.580681,34.410551],[-90.565809,34.4354],[-90.589919,34.484794],[-90.580115,34.514537],[-90.545728,34.53775],[-90.545891,34.563257],[-90.581693,34.604227],[-90.588419,34.670963],[-90.561198,34.69676],[-90.539401,34.670911],[-90.555104,34.646236],[-90.517168,34.630928],[-90.479718,34.659934],[-90.46282,34.684074],[-90.477031,34.701174],[-90.546053,34.702076],[-90.567486,34.72329],[-90.535408,34.750062],[-90.547859,34.779194],[-90.514708,34.801766],[-90.50152,34.77479],[-90.522077,34.754649],[-90.520181,34.731902],[-90.473384,34.725962],[-90.451758,34.741904],[-90.47228,34.802465],[-90.456935,34.823379],[-90.483876,34.861333],[-90.46615,34.890989],[-90.438311,34.884583],[-90.428756,34.841406],[-90.414859,34.831846],[-90.313476,34.871698],[-90.250095,34.90732],[-90.246116,34.944316],[-90.296422,34.976346],[-90.309289,34.995694],[-90.291996,35.041793],[-90.209397,35.026546],[-90.173603,35.118073],[-90.139024,35.133995],[-90.10059,35.116691],[-90.066591,35.13599],[-90.117393,35.18789],[-90.097408,35.194794],[-90.07934,35.228838],[-90.09949,35.251393],[-90.152094,35.255989],[-90.168794,35.279088],[-90.163812,35.296115],[-90.109093,35.304987],[-90.107312,35.343143],[-90.074992,35.384152],[-90.114373,35.411108],[-90.142624,35.407669],[-90.143475,35.387602],[-90.179265,35.385194],[-90.168882,35.422206],[-90.129447,35.44193],[-90.118928,35.468328],[-90.08365,35.478297],[-90.068156,35.46678],[-90.069434,35.408163],[-90.031584,35.427662],[-90.019108,35.465067],[-90.043462,35.492339],[-90.050437,35.515894],[-90.03955,35.548557],[-89.989499,35.560136],[-89.957113,35.539818],[-89.945026,35.519388],[-89.918001,35.514136],[-89.910408,35.548761],[-89.945651,35.561558],[-89.957898,35.585474],[-89.947815,35.600093],[-89.896998,35.614882],[-89.856619,35.634444],[-89.857942,35.668312],[-89.886979,35.653637],[-89.929435,35.658974],[-89.955753,35.690621],[-89.950277,35.738494],[-89.906847,35.759699],[-89.877256,35.741369],[-89.820876,35.756868],[-89.796324,35.792807],[-89.758396,35.810469],[-89.74164,35.805633],[-89.704387,35.819607],[-89.709261,35.838911],[-89.761524,35.857239],[-89.772855,35.876244],[-89.742606,35.906653],[-89.714934,35.906247],[-89.66599,35.882868],[-89.644395,35.894782],[-89.656147,35.92581],[-89.71304,35.961644],[-89.733095,36.000608],[-90.120302,35.997876],[-90.37789,35.995683],[-90.348208,36.041573],[-90.300557,36.097525],[-90.29293,36.114499],[-90.235372,36.13948],[-90.220846,36.184146],[-90.187556,36.20566],[-90.125487,36.231232],[-90.115101,36.265282],[-90.083795,36.271938],[-90.064413,36.302108],[-90.08241,36.321949],[-90.063594,36.384235],[-90.078873,36.399358],[-90.127286,36.411063],[-90.15228,36.49795],[-90.513782,36.49844],[-90.948379,36.498463],[-91.422068,36.497138],[-91.539505,36.499236],[-92.019432,36.498338],[-92.375159,36.497199],[-92.46094,36.498671],[-92.753678,36.497975],[-93.136615,36.49796],[-93.426451,36.498935],[-93.875197,36.498722],[-94.114073,36.498632],[-94.617919,36.499414]]]},"properties":{"name":"Arkansas","ns_code":"00068085","geoid":"05","usps_abbrev":"AR","fips_code":"05"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-102.042089,36.993016],[-101.602243,36.995047],[-101.090254,36.997876],[-100.734513,36.999059],[-100.107891,37.002312],[-99.630997,36.99997],[-99.105701,36.999451],[-98.797019,36.999459],[-98.300465,36.997684],[-97.994149,36.998508],[-97.595028,36.998546],[-97.039692,36.99896],[-96.500289,36.998643],[-96.00081,36.99886],[-95.45793,36.999234],[-95.165191,36.999631],[-94.75258,36.99859],[-94.617964,36.998905],[-94.618313,37.194687],[-94.616724,37.500123],[-94.617669,37.776193],[-94.614164,37.974007],[-94.612503,38.220379],[-94.613356,38.457967],[-94.608172,38.811095],[-94.607151,39.105582],[-94.588658,39.151163],[-94.606455,39.160827],[-94.650647,39.154092],[-94.659162,39.174126],[-94.688788,39.183228],[-94.735743,39.169191],[-94.762858,39.179991],[-94.782951,39.207162],[-94.831679,39.215938],[-94.827479,39.249896],[-94.84632,39.268481],[-94.898516,39.29845],[-94.910321,39.351295],[-94.879088,39.375703],[-94.888972,39.392432],[-94.919225,39.385174],[-94.972952,39.421705],[-94.990172,39.446192],[-95.033408,39.460876],[-95.050552,39.497514],[-95.108065,39.539919],[-95.107474,39.573743],[-95.056897,39.580567],[-95.055152,39.621657],[-95.024595,39.668485],[-94.969333,39.69073],[-94.970422,39.732121],[-94.947541,39.745337],[-94.902612,39.724202],[-94.875634,39.730492],[-94.859035,39.754116],[-94.869655,39.772899],[-94.912293,39.759338],[-94.91955,39.790291],[-94.89053,39.791425],[-94.876244,39.807394],[-94.891481,39.834644],[-94.939854,39.852044],[-94.934907,39.893784],[-94.95518,39.901288],[-95.015135,39.899643],[-95.035246,39.865921],[-95.085003,39.861883],[-95.139679,39.880592],[-95.146055,39.904183],[-95.189561,39.900145],[-95.206063,39.912061],[-95.205266,39.93975],[-95.250254,39.948644],[-95.30829,39.999998],[-95.669801,40.000333],[-95.982996,40.000586],[-96.30103,40.000837],[-96.756119,40.001401],[-97.049663,40.001323],[-97.415964,40.00196],[-97.830746,40.002023],[-98.153874,40.002204],[-98.719927,40.002205],[-99.309801,40.001812],[-99.772102,40.001751],[-100.231898,40.001604],[-100.49558,40.001714],[-101.048305,40.002283],[-101.624635,40.00269],[-102.051744,40.003078],[-102.050952,39.749993],[-102.049052,39.373991],[-102.046046,38.981776],[-102.045075,38.669561],[-102.044946,38.384358],[-102.044515,37.984575],[-102.041626,37.696699],[-102.04182,37.410149],[-102.042089,36.993016]]]},"properties":{"name":"Kansas","ns_code":"00481813","geoid":"20","usps_abbrev":"KS","fips_code":"20"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-101.22811,42.998127],[-101.633007,42.996255],[-101.862762,42.999374],[-102.125427,42.999196],[-102.625701,42.999773],[-102.889187,43.000438],[-103.475638,43.00048],[-104.053028,43.000585],[-104.05262,42.660549],[-104.053107,42.499964],[-104.052547,42.166801],[-104.052967,41.916972],[-104.052859,41.592254],[-104.052245,41.398065],[-104.053249,41.001406],[-103.669054,41.001442],[-103.365314,41.001846],[-102.827237,41.002143],[-102.556721,41.0022],[-102.051717,41.002359],[-102.051417,40.742793],[-102.051554,40.500023],[-102.051744,40.003078],[-101.624635,40.00269],[-101.048305,40.002283],[-100.49558,40.001714],[-100.231898,40.001604],[-99.772102,40.001751],[-99.309801,40.001812],[-98.719927,40.002205],[-98.153874,40.002204],[-97.830746,40.002023],[-97.415964,40.00196],[-97.049663,40.001323],[-96.756119,40.001401],[-96.30103,40.000837],[-95.982996,40.000586],[-95.669801,40.000333],[-95.30829,39.999998],[-95.363983,40.031498],[-95.391527,40.027058],[-95.419999,40.05044],[-95.396549,40.124701],[-95.431351,40.139163],[-95.440694,40.162282],[-95.47792,40.183844],[-95.4699,40.2227],[-95.478694,40.243661],[-95.516107,40.249187],[-95.556275,40.270761],[-95.553292,40.291158],[-95.653729,40.322582],[-95.622684,40.342323],[-95.642414,40.369829],[-95.66144,40.415917],[-95.659734,40.444484],[-95.69313,40.469396],[-95.699969,40.505275],[-95.661681,40.517312],[-95.652269,40.538108],[-95.671776,40.562628],[-95.694147,40.556942],[-95.697202,40.528475],[-95.75711,40.52599],[-95.773549,40.578205],[-95.765645,40.585208],[-95.751271,40.609057],[-95.769759,40.622884],[-95.789485,40.659388],[-95.842801,40.677496],[-95.852615,40.702262],[-95.883178,40.717579],[-95.881529,40.750611],[-95.836903,40.776477],[-95.843745,40.803783],[-95.837186,40.835347],[-95.847785,40.864328],[-95.812083,40.884239],[-95.836438,40.921642],[-95.832055,40.98114],[-95.863492,40.99734],[-95.860862,41.038547],[-95.882225,41.063539],[-95.862427,41.089687],[-95.882944,41.154572],[-95.867624,41.188416],[-95.915428,41.185145],[-95.926117,41.211619],[-95.911296,41.239442],[-95.928646,41.281332],[-95.87748,41.284583],[-95.885554,41.318097],[-95.925185,41.321355],[-95.95713,41.349593],[-95.928774,41.37008],[-95.937694,41.39477],[-95.919989,41.452604],[-95.93634,41.465304],[-96.004047,41.472146],[-96.01738,41.492139],[-95.992777,41.514596],[-95.999966,41.53948],[-96.026657,41.540366],[-96.03429,41.513036],[-96.057331,41.511051],[-96.096617,41.545626],[-96.081188,41.574296],[-96.11364,41.601955],[-96.115995,41.622024],[-96.095131,41.647767],[-96.121048,41.677002],[-96.075865,41.714785],[-96.105194,41.731195],[-96.064897,41.791673],[-96.109746,41.823992],[-96.111252,41.850229],[-96.136525,41.864151],[-96.162067,41.903047],[-96.142265,41.915379],[-96.129186,41.965136],[-96.191971,41.985347],[-96.184711,42.004972],[-96.222823,42.023817],[-96.234356,42.040712],[-96.268063,42.041705],[-96.279201,42.073544],[-96.267486,42.10978],[-96.309758,42.132101],[-96.346688,42.164686],[-96.35987,42.210553],[-96.323723,42.229887],[-96.331312,42.259408],[-96.367977,42.290681],[-96.369969,42.310878],[-96.407998,42.337408],[-96.41031,42.412965],[-96.380705,42.446393],[-96.401962,42.48644],[-96.445483,42.49063],[-96.501319,42.482749],[-96.525088,42.510183],[-96.557776,42.52038],[-96.60347,42.50446],[-96.625961,42.513578],[-96.63803,42.551959],[-96.687005,42.579225],[-96.711,42.608129],[-96.687667,42.653127],[-96.728027,42.66688],[-96.764061,42.661983],[-96.802177,42.672235],[-96.806213,42.704154],[-96.907922,42.733857],[-96.948902,42.719465],[-96.97912,42.76009],[-97.071849,42.772305],[-97.130257,42.771541],[-97.150763,42.795566],[-97.212659,42.812069],[-97.218046,42.845113],[-97.248556,42.855386],[-97.289859,42.855499],[-97.306677,42.867604],[-97.341181,42.855882],[-97.417066,42.865918],[-97.43911,42.84711],[-97.504847,42.858477],[-97.561928,42.847552],[-97.60376,42.858329],[-97.686477,42.842212],[-97.774381,42.84974],[-97.831393,42.86896],[-97.875531,42.858656],[-97.888647,42.817177],[-97.947189,42.770709],[-98.013072,42.762219],[-98.062999,42.781001],[-98.129223,42.821056],[-98.219826,42.853157],[-98.258276,42.87439],[-98.325864,42.8865],[-98.342408,42.900847],[-98.467356,42.947556],[-98.49855,42.998559],[-98.88551,42.998181],[-99.195658,42.998084],[-99.635934,42.997834],[-100.034201,42.998145],[-100.525978,42.999042],[-100.88752,42.998015],[-101.22811,42.998127]]]},"properties":{"name":"Nebraska","ns_code":"01779792","geoid":"31","usps_abbrev":"NE","fips_code":"31"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-114.041723,41.99372],[-114.039648,41.884815],[-114.040231,41.491148],[-114.041396,41.219958],[-114.042674,40.845903],[-114.045827,40.424823],[-114.046833,40.035017],[-114.047269,39.759224],[-114.047077,39.499811],[-114.049104,39.005509],[-114.048044,38.874949],[-114.050519,38.443899],[-114.049417,38.264849],[-114.050424,37.999958],[-114.049679,37.8236],[-114.052923,37.592956],[-114.051404,37.23385],[-114.052541,37.112881],[-114.0506,37.000396],[-113.572079,36.999981],[-113.052912,36.999983],[-112.750761,37.000483],[-112.302044,37.001053],[-112.000735,37.000959],[-111.751401,37.001234],[-111.278221,37.000467],[-110.75723,37.003273],[-110.509004,37.003985],[-110.47019,36.997997],[-110.023043,36.998601],[-109.750669,36.99816],[-109.495338,36.999105],[-109.045223,36.999084],[-109.04581,37.374993],[-109.04192,37.530525],[-109.041058,37.907236],[-109.042816,37.962359],[-109.041762,38.16469],[-109.060062,38.275489],[-109.059538,38.719986],[-109.054189,38.874984],[-109.051516,39.124982],[-109.050765,39.366677],[-109.051263,39.624974],[-109.050613,39.875055],[-109.05082,40.231093],[-109.050946,40.444368],[-109.048044,40.619241],[-109.050076,41.000659],[-109.250735,41.001009],[-109.543221,40.998396],[-110.006495,40.997815],[-110.237905,40.995426],[-110.500718,40.994746],[-111.046723,40.997959],[-111.04658,41.361033],[-111.045794,41.499945],[-111.046689,42.001567],[-111.491095,41.999522],[-112.01218,41.99835],[-112.173351,41.996568],[-112.192976,42.001167],[-112.624578,42.000353],[-112.979918,41.998441],[-113.496548,41.993305],[-113.893261,41.988057],[-114.041723,41.99372]]]},"properties":{"name":"Utah","ns_code":"01455989","geoid":"49","usps_abbrev":"UT","fips_code":"49"}},{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-162.637688,54.801121],[-162.67295,54.843441],[-162.7432,54.857851],[-162.780742,54.847741],[-162.81901,54.811158],[-162.807411,54.779871],[-162.740178,54.753102],[-162.677799,54.762716],[-162.637688,54.801121]]],[[[-161.006232,55.165759],[-161.062748,55.206796],[-161.128954,55.206546],[-161.175006,55.184381],[-161.194399,55.154961],[-161.151562,55.11513],[-161.084405,55.104767],[-161.019971,55.129239],[-161.006232,55.165759]]],[[[-175.102323,52.168005],[-175.06419,52.186101],[-175.036327,52.217628],[-175.053573,52.251305],[-175.119803,52.28054],[-175.204645,52.259112],[-175.224817,52.232965],[-175.205312,52.19123],[-175.15254,52.162979],[-175.102323,52.168005]]],[[[-169.847694,57.184897],[-169.87123,57.221536],[-169.90975,57.236295],[-169.960408,57.237419],[-170.007985,57.225299],[-170.04222,57.205047],[-170.044012,57.165052],[-170.022459,57.144325],[-169.95559,57.128227],[-169.886869,57.145438],[-169.847694,57.184897]]],[[[-168.002249,53.988041],[-168.082956,53.992437],[-168.110973,53.981564],[-168.135846,53.946733],[-168.123085,53.911965],[-168.08304,53.882959],[-168.022944,53.87492],[-167.984062,53.886496],[-167.953453,53.921158],[-167.959039,53.9637],[-168.002249,53.988041]]],[[[-161.645699,63.624153],[-161.69639,63.648986],[-161.75849,63.654517],[-161.814522,63.64667],[-161.85585,63.621632],[-161.83922,63.570355],[-161.78447,63.553788],[-161.72105,63.553739],[-161.641536,63.588497],[-161.645699,63.624153]]],[[[-168.820067,65.66519],[-168.869229,65.620853],[-168.84605,65.592512],[-168.80835,65.578526],[-168.73316,65.572244],[-168.633681,65.601358],[-168.63791,65.639863],[-168.71059,65.673136],[-168.820067,65.66519]]],[[[-175.403742,52.181994],[-175.419071,52.205473],[-175.492047,52.237577],[-175.532789,52.236606],[-175.5793,52.220238],[-175.60402,52.198683],[-175.598652,52.146684],[-175.561255,52.122571],[-175.512361,52.107374],[-175.485742,52.109387],[-175.43701,52.132807],[-175.403742,52.181994]]],[[[-172.729822,60.261733],[-172.773586,60.25549],[-172.867009,60.222142],[-172.89036,60.182124],[-172.84832,60.148778],[-172.79954,60.138804],[-172.69419,60.15461],[-172.634324,60.200743],[-172.649219,60.236895],[-172.729822,60.261733]]],[[[-178.187623,51.482227],[-178.23862,51.529892],[-178.272583,51.541014],[-178.359982,51.537475],[-178.42294,51.508996],[-178.430875,51.476584],[-178.387409,51.43681],[-178.304339,51.421343],[-178.248645,51.423171],[-178.198412,51.443653],[-178.187623,51.482227]]],[[[-159.863447,58.578686],[-159.867681,58.610517],[-159.914198,58.65023],[-160.00464,58.665602],[-160.07488,58.639886],[-160.09759,58.599914],[-160.059052,58.547826],[-160.008535,58.534684],[-159.921321,58.543964],[-159.863447,58.578686]]],[[[-168.97173,65.713941],[-168.971903,65.688765],[-168.856091,65.691236],[-168.785494,65.716319],[-168.762466,65.751166],[-168.80098,65.795173],[-168.861,65.817807],[-168.97103,65.814645],[-168.97173,65.713941]]],[[[-177.344,51.932196],[-177.374366,51.962616],[-177.45955,51.982884],[-177.509138,51.965746],[-177.54292,51.935127],[-177.551982,51.908147],[-177.523687,51.866185],[-177.48673,51.843649],[-177.439542,51.840354],[-177.361935,51.864284],[-177.33258,51.900771],[-177.344,51.932196]]],[[[-161.196381,64.091974],[-161.176662,64.146856],[-161.223548,64.176433],[-161.310363,64.189368],[-161.355713,64.183777],[-161.420197,64.158416],[-161.43692,64.133553],[-161.414441,64.08677],[-161.37318,64.069742],[-161.30603,64.061969],[-161.252273,64.065963],[-161.196381,64.091974]]],[[[-168.00487,65.038897],[-168.07611,65.043289],[-168.156162,65.029174],[-168.207906,65.003291],[-168.21011,64.951372],[-168.137033,64.918432],[-168.037032,64.909284],[-167.953094,64.932994],[-167.913829,64.969943],[-167.924296,65.002728],[-168.00487,65.038897]]],[[[-163.03943,55.450724],[-163.076008,55.488687],[-163.13653,55.525024],[-163.190419,55.530558],[-163.242512,55.517718],[-163.2715,55.477015],[-163.252129,55.453824],[-163.27089,55.431718],[-163.262371,55.394197],[-163.235362,55.366112],[-163.153941,55.343123],[-163.070964,55.361327],[-163.027938,55.42083],[-163.03943,55.450724]]],[[[-178.658607,51.80713],[-178.690328,51.849529],[-178.786532,51.88788],[-178.8451,51.88794],[-178.89036,51.873106],[-178.93955,51.833605],[-178.957281,51.780799],[-178.949954,51.760244],[-178.86849,51.711691],[-178.82802,51.694776],[-178.771313,51.696042],[-178.700904,51.716539],[-178.66349,51.747358],[-178.6468,51.7903],[-178.658607,51.80713]]],[[[-171.198241,52.402451],[-171.136496,52.445671],[-171.111845,52.507559],[-171.0646,52.521246],[-171.033563,52.548524],[-171.02243,52.603717],[-171.069735,52.627062],[-171.140234,52.639633],[-171.205941,52.624928],[-171.24839,52.583474],[-171.31242,52.570745],[-171.374433,52.537118],[-171.39372,52.46813],[-171.358353,52.412545],[-171.294308,52.393134],[-171.22662,52.393702],[-171.198241,52.402451]]],[[[-146.43075,59.46574],[-146.489737,59.424577],[-146.50791,59.38551],[-146.48078,59.355229],[-146.415695,59.336443],[-146.35536,59.336443],[-146.280741,59.348838],[-146.21853,59.383517],[-146.16202,59.403876],[-146.145602,59.427407],[-146.16967,59.479664],[-146.201044,59.507329],[-146.24292,59.519954],[-146.24425,59.557122],[-146.2702,59.57529],[-146.358492,59.586056],[-146.41216,59.568349],[-146.43144,59.546291],[-146.42064,59.513565],[-146.43075,59.46574]]],[[[-155.53824,55.925467],[-155.634113,55.925469],[-155.67676,55.907663],[-155.75146,55.854242],[-155.80476,55.836437],[-155.826107,55.81863],[-155.836841,55.783015],[-155.794349,55.729594],[-155.719822,55.711786],[-155.581366,55.699912],[-155.528092,55.705848],[-155.474751,55.741459],[-155.48522,55.818623],[-155.453119,55.883916],[-155.474353,55.913594],[-155.53824,55.925467]]],[[[-159.426336,54.758642],[-159.416772,54.792197],[-159.44065,54.817541],[-159.497605,54.855459],[-159.556116,54.880262],[-159.636302,54.871797],[-159.681326,54.887434],[-159.761051,54.891324],[-159.83703,54.870286],[-159.88583,54.847189],[-159.91167,54.809288],[-159.85522,54.757704],[-159.8135,54.740418],[-159.74679,54.742672],[-159.688578,54.765596],[-159.652435,54.717778],[-159.624756,54.707921],[-159.54787,54.699296],[-159.469294,54.720968],[-159.426336,54.758642]]],[[[-169.40164,56.636553],[-169.438667,56.653698],[-169.509265,56.667471],[-169.621913,56.661341],[-169.74735,56.675043],[-169.802528,56.673969],[-169.852881,56.658881],[-169.877592,56.630537],[-169.86824,56.587031],[-169.804777,56.547369],[-169.763735,56.540724],[-169.727524,56.514639],[-169.67609,56.496226],[-169.58126,56.483228],[-169.526637,56.492976],[-169.479413,56.526851],[-169.420474,56.549259],[-169.377545,56.587729],[-169.40164,56.636553]]],[[[-178.977381,51.252972],[-178.928604,51.270441],[-178.900772,51.290692],[-178.856488,51.304901],[-178.832806,51.323588],[-178.82402,51.358068],[-178.83522,51.390808],[-178.87316,51.424791],[-178.913908,51.444215],[-178.969425,51.457109],[-179.005041,51.452652],[-179.049873,51.42844],[-179.09324,51.390936],[-179.107599,51.353676],[-179.183665,51.338491],[-179.225686,51.299272],[-179.231086,51.267531],[-179.20788,51.202723],[-179.18381,51.183776],[-179.13694,51.175092],[-179.073599,51.179041],[-179.024194,51.209831],[-178.977381,51.252972]]],[[[-160.509115,58.642378],[-160.475339,58.627192],[-160.39486,58.621271],[-160.41429,58.586934],[-160.396861,58.553919],[-160.367619,58.541989],[-160.301029,58.535758],[-160.258761,58.544569],[-160.225597,58.565539],[-160.21216,58.595046],[-160.154086,58.637109],[-160.15273,58.658199],[-160.096973,58.697283],[-160.101914,58.724812],[-160.137618,58.748898],[-160.214084,58.755477],[-160.282393,58.774968],[-160.323241,58.775058],[-160.36764,58.794097],[-160.416039,58.798445],[-160.490372,58.773631],[-160.52579,58.730237],[-160.54432,58.674326],[-160.509115,58.642378]]],[[[-156.58446,56.005636],[-156.553324,56.027075],[-156.556048,56.090162],[-156.626815,56.140192],[-156.671961,56.148351],[-156.65377,56.167594],[-156.651112,56.20096],[-156.690626,56.257249],[-156.77023,56.279793],[-156.841994,56.27008],[-156.872228,56.247023],[-156.900164,56.191611],[-156.903153,56.155053],[-156.883602,56.12284],[-156.81717,56.104096],[-156.84491,56.022111],[-156.826412,56.007578],[-156.82221,55.967556],[-156.764,55.953001],[-156.647785,55.962302],[-156.58446,56.005636]]],[[[-170.47402,52.638387],[-170.480994,52.69041],[-170.50831,52.721165],[-170.56411,52.742205],[-170.630402,52.751594],[-170.680452,52.749586],[-170.770387,52.721094],[-170.888913,52.649271],[-170.923514,52.574987],[-170.927388,52.549886],[-170.887588,52.513829],[-170.793769,52.487099],[-170.738226,52.500109],[-170.67443,52.539876],[-170.575685,52.554871],[-170.536133,52.573847],[-170.47402,52.638387]]],[[[-178.501252,51.532716],[-178.456158,51.543393],[-178.42668,51.561798],[-178.421676,51.587283],[-178.452206,51.621002],[-178.50447,51.633527],[-178.539807,51.652336],[-178.660122,51.665879],[-178.72589,51.652661],[-178.76874,51.618005],[-178.844584,51.637626],[-178.89076,51.62853],[-178.949936,51.591544],[-178.988333,51.624581],[-179.056029,51.645972],[-179.11334,51.632387],[-179.149873,51.595358],[-179.14889,51.554231],[-179.119926,51.519066],[-179.054123,51.511401],[-178.979778,51.531105],[-178.94862,51.560879],[-178.900273,51.522281],[-178.836422,51.492037],[-178.80019,51.485859],[-178.7148,51.493813],[-178.63642,51.524794],[-178.574458,51.507529],[-178.55019,51.508484],[-178.501252,51.532716]]],[[[-172.223819,52.362614],[-172.24966,52.393454],[-172.399296,52.444505],[-172.483982,52.436651],[-172.633239,52.387863],[-172.71434,52.294751],[-172.720689,52.264364],[-172.707503,52.234227],[-172.676008,52.210576],[-172.616163,52.199088],[-172.510603,52.199946],[-172.427201,52.225424],[-172.377915,52.228363],[-172.335,52.252303],[-172.287706,52.265651],[-172.228442,52.296193],[-172.210712,52.316267],[-172.223819,52.362614]]],[[[-151.875171,58.950788],[-151.937184,58.9883],[-152.019555,59.010921],[-152.083367,59.005021],[-152.12905,59.016751],[-152.188222,59.016144],[-152.245651,58.993457],[-152.32345,59.007459],[-152.414007,58.992237],[-152.464855,58.92422],[-152.452584,58.884872],[-152.383294,58.82829],[-152.31462,58.819997],[-152.24964,58.840674],[-152.195357,58.840633],[-152.134072,58.858118],[-152.066781,58.833013],[-152.017165,58.828518],[-151.981582,58.837277],[-151.936387,58.86738],[-151.891805,58.876391],[-151.85389,58.908764],[-151.875171,58.950788]]],[[[-170.14768,57.121464],[-170.111782,57.136709],[-170.07831,57.169458],[-170.080803,57.192273],[-170.029775,57.220856],[-170.016511,57.266581],[-170.065379,57.297926],[-170.109481,57.305269],[-170.191024,57.297351],[-170.261697,57.264134],[-170.33446,57.272368],[-170.449598,57.249332],[-170.522709,57.193374],[-170.519468,57.162183],[-170.49526,57.128308],[-170.442669,57.102263],[-170.492045,57.080177],[-170.508488,57.046404],[-170.48728,57.012518],[-170.444143,56.996134],[-170.354132,57.002323],[-170.306096,57.029515],[-170.295725,57.056169],[-170.223246,57.076596],[-170.14768,57.121464]]],[[[-162.628942,54.25],[-162.56315,54.243579],[-162.526588,54.257984],[-162.494972,54.291723],[-162.429359,54.298514],[-162.358961,54.328523],[-162.2822,54.330965],[-162.250159,54.346743],[-162.238381,54.369921],[-162.248209,54.399265],[-162.354352,54.456691],[-162.411667,54.459125],[-162.44194,54.475336],[-162.50792,54.48198],[-162.582692,54.505767],[-162.61057,54.500422],[-162.691583,54.526388],[-162.880706,54.553213],[-162.93884,54.521145],[-162.940975,54.475362],[-162.959878,54.428017],[-163.008446,54.400172],[-163.004751,54.35158],[-162.952627,54.32573],[-162.89007,54.330766],[-162.81792,54.31482],[-162.77997,54.293215],[-162.768203,54.27044],[-162.726483,54.242065],[-162.700084,54.237969],[-162.628942,54.25]]],[[[-169.617649,52.77755],[-169.588613,52.800563],[-169.593389,52.88952],[-169.627824,52.92674],[-169.575239,52.993707],[-169.580644,53.032165],[-169.60445,53.062031],[-169.664233,53.085685],[-169.68986,53.112064],[-169.75915,53.134054],[-169.814087,53.126641],[-169.86075,53.105012],[-169.883215,53.045187],[-169.832955,53.009965],[-169.84289,52.969516],[-169.831898,52.935538],[-169.910493,52.935215],[-169.94175,52.958784],[-170.046106,52.973116],[-170.11652,52.963131],[-170.17689,52.935137],[-170.20338,52.897647],[-170.190133,52.862832],[-170.156587,52.836113],[-170.206764,52.822763],[-170.267285,52.764249],[-170.274914,52.737634],[-170.250063,52.681089],[-170.173754,52.662888],[-170.086581,52.662618],[-170.03259,52.675744],[-169.981799,52.71202],[-169.975547,52.738118],[-169.90385,52.740574],[-169.84875,52.76311],[-169.817313,52.757983],[-169.784986,52.736734],[-169.703061,52.716099],[-169.65972,52.726226],[-169.62746,52.750675],[-169.617649,52.77755]]],[[[-172.815327,60.557852],[-172.819641,60.61349],[-172.888646,60.644135],[-172.943849,60.6507],[-172.953052,60.694481],[-172.98976,60.731811],[-173.059068,60.747748],[-173.158632,60.72877],[-173.218431,60.676231],[-173.23223,60.636827],[-173.140223,60.575533],[-173.163222,60.538316],[-173.167818,60.48108],[-173.144869,60.457101],[-173.06739,60.439905],[-172.93145,60.389684],[-172.910228,60.339623],[-172.84794,60.318383],[-172.802382,60.31865],[-172.715375,60.296219],[-172.67936,60.278026],[-172.596125,60.258622],[-172.49604,60.274221],[-172.407526,60.278764],[-172.379188,60.260714],[-172.29551,60.23883],[-172.18949,60.250816],[-172.120378,60.287337],[-172.10909,60.314012],[-172.168051,60.348912],[-172.278507,60.388328],[-172.319929,60.416798],[-172.39357,60.436506],[-172.53002,60.435741],[-172.68784,60.48012],[-172.760255,60.514181],[-172.815327,60.557852]]],[[[-165.649483,60.348823],[-165.653928,60.37176],[-165.738465,60.405609],[-165.782465,60.404873],[-165.82845,60.39005],[-165.899385,60.403202],[-166.00953,60.387704],[-166.005798,60.419573],[-166.054192,60.469491],[-166.15243,60.510747],[-166.208589,60.505186],[-166.270933,60.478621],[-166.276332,60.451613],[-166.349823,60.417745],[-166.443624,60.444484],[-166.528839,60.44427],[-166.570194,60.422919],[-166.62012,60.412947],[-166.666308,60.385785],[-166.73934,60.387861],[-166.844681,60.345031],[-166.929756,60.295497],[-166.943778,60.278103],[-167.01806,60.266235],[-167.069946,60.284747],[-167.120546,60.291225],[-167.153458,60.282431],[-167.30983,60.290718],[-167.4377,60.262848],[-167.508074,60.263109],[-167.5508,60.240554],[-167.560296,60.205956],[-167.536351,60.178245],[-167.43645,60.108761],[-167.44077,60.056462],[-167.38558,60.021207],[-167.32415,60.018457],[-167.293405,59.999186],[-167.22273,59.993853],[-167.13784,59.944033],[-167.04204,59.935757],[-166.940622,59.911908],[-166.850852,59.871056],[-166.828905,59.85233],[-166.736783,59.838301],[-166.68902,59.815338],[-166.626126,59.797061],[-166.42967,59.801636],[-166.321854,59.773141],[-166.273867,59.733847],[-166.196613,59.703384],[-166.05789,59.695535],[-165.96482,59.722971],[-165.824859,59.806746],[-165.735491,59.839855],[-165.657822,59.836263],[-165.560383,59.852868],[-165.49547,59.870184],[-165.460906,59.895005],[-165.43913,59.936036],[-165.402458,59.970448],[-165.45188,59.990418],[-165.497496,60.027887],[-165.539365,60.034979],[-165.573173,60.075063],[-165.55746,60.099194],[-165.559676,60.133332],[-165.588498,60.178876],[-165.5666,60.21565],[-165.588301,60.241414],[-165.570708,60.258956],[-165.561519,60.301726],[-165.600197,60.338927],[-165.649483,60.348823]]],[[[-168.87631,63.373553],[-169.035,63.387453],[-169.234552,63.390727],[-169.45554,63.41502],[-169.4838,63.435631],[-169.602285,63.480635],[-169.792993,63.49074],[-169.926599,63.526739],[-169.985628,63.622959],[-170.16807,63.719891],[-170.296846,63.755572],[-170.50403,63.7534],[-170.619933,63.723455],[-170.705152,63.713083],[-170.959155,63.625888],[-171.16504,63.658988],[-171.251321,63.667442],[-171.5356,63.721875],[-171.520679,63.750236],[-171.54883,63.800461],[-171.617503,63.833641],[-171.674734,63.84368],[-171.77637,63.837724],[-171.816149,63.821162],[-171.855926,63.78567],[-171.835333,63.743361],[-171.86517,63.705497],[-171.860196,63.674736],[-171.90495,63.639243],[-171.944727,63.570618],[-171.965319,63.472874],[-171.884887,63.37759],[-171.839244,63.342682],[-171.772284,63.315327],[-171.651548,63.29104],[-171.62201,63.277154],[-171.481935,63.254531],[-171.398887,63.257642],[-171.326229,63.282697],[-171.251398,63.292568],[-171.166047,63.348158],[-171.100519,63.356513],[-171.066836,63.371108],[-170.99359,63.37484],[-170.908249,63.369945],[-170.8166,63.354977],[-170.596895,63.311616],[-170.515276,63.28791],[-170.439075,63.251596],[-170.38345,63.210752],[-170.394358,63.171056],[-170.32802,63.138724],[-170.190582,63.126842],[-170.11542,63.127247],[-169.95276,63.064072],[-169.901408,63.037365],[-169.863264,62.980144],[-169.864597,62.944697],[-169.838952,62.925889],[-169.727891,62.896333],[-169.638796,62.884908],[-169.591036,62.887867],[-169.525341,62.924659],[-169.46155,62.932839],[-169.419861,62.973856],[-169.45108,63.03856],[-169.367966,63.061076],[-169.282326,63.114405],[-169.23064,63.123502],[-169.066713,63.128214],[-168.92278,63.099567],[-168.946607,63.074451],[-168.940357,63.046329],[-168.86855,63.019792],[-168.80323,63.017652],[-168.700727,63.056925],[-168.682789,63.084668],[-168.73346,63.131553],[-168.609261,63.229362],[-168.586695,63.27247],[-168.587718,63.325229],[-168.642768,63.34488],[-168.87631,63.373553]]],[[[-175.91303,51.800354],[-175.849754,51.795493],[-175.814628,51.81527],[-175.802425,51.860415],[-175.711936,51.873207],[-175.635931,51.91117],[-175.585375,51.904899],[-175.446239,51.930588],[-175.409982,51.930184],[-175.348719,51.962585],[-175.306859,51.952337],[-175.237093,51.961519],[-175.05636,51.948159],[-175.000328,51.954493],[-174.876732,51.985908],[-174.745065,51.955646],[-174.68793,51.957525],[-174.594282,51.978412],[-174.533659,51.958019],[-174.48089,51.952497],[-174.4425,51.963875],[-174.37856,51.968524],[-174.350394,51.980336],[-174.313974,52.036226],[-174.181141,52.047377],[-174.15099,52.043212],[-174.056503,52.051633],[-173.935161,52.004442],[-173.815227,51.989807],[-173.710034,52.00684],[-173.617415,52.000948],[-173.584913,51.982463],[-173.487318,51.971184],[-173.427865,51.984867],[-173.344224,51.98339],[-173.304522,52.005426],[-173.238867,52.008675],[-173.237169,51.988338],[-173.203568,51.960324],[-173.1667,51.946706],[-173.103229,51.959472],[-173.085163,51.974931],[-173.079672,52.017915],[-173.00327,52.027983],[-172.976035,52.020275],[-172.923058,52.02416],[-172.83923,52.071564],[-172.82025,52.100274],[-172.828798,52.123437],[-172.866641,52.148933],[-172.925173,52.155211],[-172.943681,52.146585],[-173.177817,52.161809],[-173.2256,52.15568],[-173.342973,52.166525],[-173.440764,52.168764],[-173.455704,52.19168],[-173.506303,52.213138],[-173.56514,52.203661],[-173.587328,52.21222],[-173.638568,52.206069],[-173.732104,52.183254],[-173.785069,52.18555],[-173.840597,52.201325],[-173.89858,52.19901],[-173.936392,52.184559],[-173.990472,52.183143],[-173.980493,52.211618],[-173.921781,52.267835],[-173.90283,52.319228],[-173.921785,52.347448],[-173.92292,52.378067],[-173.940226,52.396256],[-173.985943,52.412116],[-174.030867,52.439383],[-174.06575,52.445654],[-174.110582,52.468321],[-174.186419,52.471661],[-174.244998,52.454843],[-174.312733,52.456712],[-174.375813,52.421774],[-174.410698,52.376437],[-174.494712,52.366951],[-174.52486,52.348166],[-174.53765,52.317036],[-174.50444,52.267369],[-174.553484,52.259493],[-174.588998,52.228725],[-174.668509,52.225201],[-174.69613,52.20936],[-174.731558,52.171447],[-174.796625,52.15347],[-174.866087,52.165637],[-174.925233,52.16391],[-174.993214,52.136408],[-175.05942,52.136614],[-175.102363,52.108619],[-175.193097,52.104358],[-175.231624,52.090196],[-175.296617,52.08882],[-175.38433,52.063295],[-175.41243,52.035986],[-175.47036,52.042835],[-175.54913,52.009879],[-175.713203,52.026298],[-175.739328,52.0213],[-175.811998,52.047948],[-175.830283,52.085394],[-175.85366,52.096526],[-175.927769,52.091068],[-175.97708,52.141286],[-176.02774,52.160175],[-176.080595,52.159043],[-176.14837,52.171465],[-176.224434,52.153126],[-176.278241,52.103543],[-176.29313,52.065427],[-176.242864,51.926742],[-176.26931,51.918966],[-176.325984,51.922374],[-176.429137,51.91535],[-176.472908,51.963565],[-176.469554,51.981221],[-176.48848,52.026042],[-176.54119,52.05088],[-176.60128,52.05656],[-176.661916,52.040092],[-176.697341,52.019103],[-176.802469,52.016668],[-176.847819,51.995517],[-176.87553,51.959674],[-176.89741,51.907013],[-176.918866,51.882132],[-176.97098,51.861107],[-176.970048,51.924505],[-177.016896,51.965032],[-177.096462,51.990146],[-177.16806,51.999512],[-177.206209,51.99311],[-177.26746,51.959628],[-177.284361,51.913148],[-177.282892,51.863073],[-177.308894,51.836793],[-177.406215,51.836235],[-177.445697,51.809486],[-177.51532,51.79197],[-177.55783,51.795257],[-177.538271,51.820932],[-177.538368,51.873127],[-177.577068,51.901187],[-177.614912,51.905],[-177.759358,51.894791],[-177.826807,51.896414],[-177.834499,51.914069],[-177.889927,51.952575],[-177.947003,51.971312],[-178.032431,51.972654],[-178.064958,51.964771],[-178.10724,51.976507],[-178.24738,51.950166],[-178.298847,51.903705],[-178.307787,51.881608],[-178.29765,51.845229],[-178.256047,51.812017],[-178.15166,51.773756],[-178.192339,51.720847],[-178.2032,51.661324],[-178.189368,51.633673],[-178.131774,51.609907],[-178.090227,51.603743],[-178.05071,51.579909],[-177.928257,51.541895],[-177.878264,51.543324],[-177.843809,51.558555],[-177.820492,51.584422],[-177.818695,51.618741],[-177.783402,51.647859],[-177.751949,51.637355],[-177.727713,51.610964],[-177.646772,51.599043],[-177.562724,51.622922],[-177.452033,51.640201],[-177.40298,51.670381],[-177.372288,51.641571],[-177.2811,51.627612],[-177.228637,51.632033],[-177.183654,51.648583],[-177.126859,51.65337],[-177.079985,51.674231],[-177.03409,51.732737],[-177.027623,51.767049],[-177.004157,51.78778],[-176.970216,51.743689],[-177.03393,51.703981],[-177.06375,51.664656],[-177.074333,51.620907],[-177.06865,51.592792],[-177.04256,51.566089],[-176.96961,51.538985],[-176.917886,51.538468],[-176.86701,51.56358],[-176.801395,51.559409],[-176.756777,51.572649],[-176.698731,51.578428],[-176.651242,51.603913],[-176.578277,51.622351],[-176.53977,51.648438],[-176.40314,51.683909],[-176.317809,51.681388],[-176.25519,51.695376],[-176.211341,51.73314],[-176.163021,51.719978],[-176.115566,51.726725],[-176.04184,51.755847],[-176.002634,51.748448],[-175.964713,51.755425],[-175.926598,51.776034],[-175.91303,51.800354]]],[[[-166.22565,54.041993],[-166.243221,54.030232],[-166.305071,54.051056],[-166.375582,54.061796],[-166.511146,54.05779],[-166.69242,54.067286],[-166.785194,54.065979],[-166.820198,54.048041],[-166.910406,54.040017],[-166.936528,54.027156],[-166.98868,54.023946],[-167.053993,54.008613],[-167.106024,53.975259],[-167.160743,53.953897],[-167.1763,53.911854],[-167.230077,53.888252],[-167.24289,53.854673],[-167.234071,53.814243],[-167.164881,53.773842],[-167.138205,53.709423],[-167.155683,53.67834],[-167.215232,53.658204],[-167.247031,53.614692],[-167.23038,53.566734],[-167.296282,53.539731],[-167.341149,53.543595],[-167.392666,53.528259],[-167.42239,53.498127],[-167.50266,53.495318],[-167.555203,53.465421],[-167.60802,53.458057],[-167.648125,53.442094],[-167.746769,53.426335],[-167.701143,53.487629],[-167.698213,53.524223],[-167.718226,53.548623],[-167.762306,53.568024],[-167.875044,53.56905],[-167.92564,53.601948],[-167.959882,53.612812],[-168.04033,53.610276],[-168.090352,53.619667],[-168.185396,53.598652],[-168.284012,53.571137],[-168.33443,53.538671],[-168.415259,53.509447],[-168.42524,53.486313],[-168.476672,53.450596],[-168.49636,53.421076],[-168.477602,53.378691],[-168.504296,53.362889],[-168.689337,53.303273],[-168.699054,53.280371],[-168.749414,53.266498],[-168.806462,53.230606],[-168.85945,53.188152],[-168.883072,53.150172],[-168.8907,53.108547],[-168.872783,53.081724],[-168.90559,53.065532],[-168.965352,53.050747],[-169.003346,52.996552],[-169.065733,52.981287],[-169.109409,52.95839],[-169.197133,52.964882],[-169.254085,52.924292],[-169.255424,52.884499],[-169.194679,52.849326],[-169.29427,52.811626],[-169.320551,52.78372],[-169.326592,52.753542],[-169.29146,52.722648],[-169.22806,52.71461],[-169.162008,52.732682],[-169.066077,52.77602],[-169.006222,52.785561],[-168.849464,52.840921],[-168.82705,52.85839],[-168.743002,52.854731],[-168.629249,52.905151],[-168.58518,52.946496],[-168.554686,52.955036],[-168.522027,52.933733],[-168.476273,52.919483],[-168.402684,52.929253],[-168.337155,52.956925],[-168.312586,52.988951],[-168.338074,53.029307],[-168.320494,53.050071],[-168.33399,53.083187],[-168.310851,53.090002],[-168.257713,53.141895],[-168.23262,53.138775],[-168.1699,53.158595],[-168.132158,53.219282],[-168.08203,53.226371],[-168.044049,53.244187],[-168.02627,53.226137],[-167.947562,53.211911],[-167.87079,53.205933],[-167.82921,53.191981],[-167.669278,53.17205],[-167.592511,53.174046],[-167.52214,53.186009],[-167.448576,53.213919],[-167.366475,53.273641],[-167.287372,53.275954],[-167.255145,53.28733],[-167.219879,53.325512],[-167.106758,53.366991],[-167.03217,53.379119],[-166.989565,53.373246],[-166.927364,53.385134],[-166.882904,53.377568],[-166.788669,53.383888],[-166.70179,53.402033],[-166.604933,53.448766],[-166.581176,53.472544],[-166.54213,53.482384],[-166.37865,53.602141],[-166.344447,53.614623],[-166.174938,53.659778],[-166.10738,53.694699],[-166.081516,53.725458],[-165.97636,53.771061],[-165.930337,53.818869],[-165.92267,53.845957],[-165.96103,53.91608],[-165.886883,53.97026],[-165.828073,53.978227],[-165.788966,54.016236],[-165.750107,54.016607],[-165.657173,54.036336],[-165.606713,53.976844],[-165.563239,53.967282],[-165.519767,53.97206],[-165.380965,54.016436],[-165.302878,53.980735],[-165.269632,53.980731],[-165.184461,54.01701],[-165.027259,54.012943],[-164.922796,54.028475],[-164.881048,54.043429],[-164.846047,54.083254],[-164.82194,54.130809],[-164.77619,54.135855],[-164.714485,54.166117],[-164.682382,54.201862],[-164.68775,54.250118],[-164.758529,54.278177],[-164.80537,54.282392],[-164.911241,54.254688],[-164.97497,54.214884],[-165.031512,54.208878],[-165.066871,54.180086],[-165.150257,54.180523],[-165.243823,54.15929],[-165.232074,54.21652],[-165.263023,54.236544],[-165.34518,54.251033],[-165.388479,54.288134],[-165.406766,54.326678],[-165.462493,54.346822],[-165.542023,54.348715],[-165.578685,54.341436],[-165.65555,54.347051],[-165.69617,54.332234],[-165.743352,54.288891],[-165.770886,54.231134],[-165.83664,54.25822],[-165.93722,54.276985],[-166.033944,54.260954],[-166.068456,54.239919],[-166.12066,54.223141],[-166.165117,54.195088],[-166.199075,54.135541],[-166.19901,54.103513],[-166.140534,54.057132],[-166.22565,54.041993]]],[[[-154.623967,56.990886],[-154.577483,56.952773],[-154.50244,56.940788],[-154.440058,56.9236],[-154.387719,56.895618],[-154.385524,56.830269],[-154.217826,56.720467],[-154.239296,56.692855],[-154.236672,56.667573],[-154.360108,56.633524],[-154.41504,56.651672],[-154.50752,56.658844],[-154.597483,56.636033],[-154.668697,56.597825],[-154.758106,56.559815],[-154.812367,56.523827],[-154.893847,56.444724],[-154.893089,56.422861],[-154.86294,56.383851],[-154.794933,56.359288],[-154.725732,56.355219],[-154.62888,56.386089],[-154.58199,56.426811],[-154.498209,56.455784],[-154.452603,56.443239],[-154.403176,56.441668],[-154.340563,56.464402],[-154.27504,56.446627],[-154.233608,56.443474],[-154.153344,56.46005],[-154.05788,56.448434],[-153.936276,56.453461],[-153.848849,56.486046],[-153.806605,56.50936],[-153.762432,56.556745],[-153.76494,56.588083],[-153.790896,56.610105],[-153.842106,56.620565],[-153.98212,56.609011],[-153.986319,56.625872],[-153.919919,56.642539],[-153.890075,56.671708],[-153.800432,56.689928],[-153.769789,56.711807],[-153.74755,56.745044],[-153.760419,56.776474],[-153.719091,56.778713],[-153.666038,56.794844],[-153.61518,56.834385],[-153.544543,56.842366],[-153.501321,56.856673],[-153.45095,56.90034],[-153.470372,56.939332],[-153.439189,56.963958],[-153.404529,56.950773],[-153.32,56.940938],[-153.274315,56.94273],[-153.180959,56.96068],[-153.11045,57.011579],[-153.098289,57.040313],[-152.983991,57.066455],[-152.938004,57.066172],[-152.834162,57.094425],[-152.77738,57.14145],[-152.78521,57.192457],[-152.83563,57.217365],[-152.676554,57.22727],[-152.642719,57.235372],[-152.537667,57.300752],[-152.52876,57.327327],[-152.415584,57.38447],[-152.383147,57.335407],[-152.314917,57.318585],[-152.25848,57.323429],[-152.186344,57.353181],[-152.159698,57.380412],[-152.156516,57.405855],[-152.216486,57.438229],[-152.222437,57.475299],[-152.0635,57.571205],[-152.031006,57.628631],[-152.034856,57.653319],[-152.07979,57.686297],[-152.12409,57.811725],[-152.16112,57.842956],[-152.25638,57.868605],[-152.220211,57.930223],[-152.265633,57.971139],[-152.31662,57.979604],[-152.329642,57.999268],[-152.414453,58.036577],[-152.404233,58.059237],[-152.325253,58.047918],[-152.260737,58.073357],[-152.127475,58.092019],[-152.033519,58.111781],[-151.96567,58.152192],[-151.908223,58.117206],[-151.861054,58.110604],[-151.76402,58.136626],[-151.706604,58.187821],[-151.690505,58.235134],[-151.705003,58.270515],[-151.74009,58.297366],[-151.707285,58.331345],[-151.712804,58.37398],[-151.750493,58.394655],[-151.794995,58.400596],[-151.854532,58.391451],[-151.895216,58.371705],[-151.932291,58.390667],[-152.024262,58.412618],[-152.071909,58.440027],[-152.126348,58.449589],[-152.060881,58.50083],[-152.065493,58.52676],[-152.113481,58.561664],[-152.182827,58.573973],[-152.18932,58.620255],[-152.247712,58.680728],[-152.312588,58.700448],[-152.38077,58.711269],[-152.392986,58.730459],[-152.473569,58.757258],[-152.545567,58.742446],[-152.61001,58.692279],[-152.69841,58.648644],[-152.767549,58.5866],[-152.775121,58.549412],[-152.81969,58.542675],[-152.861747,58.520049],[-152.88086,58.489791],[-152.922284,58.472185],[-153.12307,58.330216],[-153.200035,58.266252],[-153.288207,58.225534],[-153.314674,58.193012],[-153.367469,58.179292],[-153.431014,58.128194],[-153.4702,58.108699],[-153.500135,58.079555],[-153.504763,58.040328],[-153.48019,58.018844],[-153.538946,58.007366],[-153.634354,57.971368],[-153.744876,57.940008],[-153.786622,57.917712],[-153.870567,57.928779],[-153.917133,57.916559],[-153.94345,57.885667],[-154.105895,57.788574],[-154.128419,57.770665],[-154.24006,57.715467],[-154.266241,57.715952],[-154.32974,57.693178],[-154.407011,57.690525],[-154.48094,57.631856],[-154.57273,57.62059],[-154.606884,57.603253],[-154.625182,57.572904],[-154.703145,57.542016],[-154.745672,57.507105],[-154.75278,57.487178],[-154.790158,57.461417],[-154.815397,57.412787],[-154.88863,57.381918],[-154.915559,57.349873],[-154.931222,57.28237],[-154.914026,57.266734],[-154.831099,57.230644],[-154.767085,57.214507],[-154.685766,57.214222],[-154.679763,57.198084],[-154.61978,57.16236],[-154.60113,57.036382],[-154.623967,56.990886]]],[[[-132.119034,56.891264],[-132.051044,57.051155],[-132.37131,57.095229],[-132.252187,57.215655],[-132.367984,57.348685],[-132.559178,57.503927],[-132.65812,57.619486],[-132.756813,57.705093],[-132.869318,57.842941],[-133.07642,57.999762],[-133.176444,58.150151],[-133.343694,58.270898],[-133.461474,58.385522],[-133.379907,58.427909],[-133.55995,58.522331],[-133.699835,58.60729],[-133.840392,58.727991],[-133.99208,58.774581],[-134.250526,58.858046],[-134.32896,58.919593],[-134.30639,58.959238],[-134.401042,58.976221],[-134.379771,59.034961],[-134.442196,59.08301],[-134.481241,59.128071],[-134.566689,59.128278],[-134.68192,59.190843],[-134.702383,59.247836],[-134.961972,59.280376],[-135.029245,59.345364],[-134.993255,59.387796],[-135.097985,59.427783],[-135.071239,59.453309],[-135.026328,59.474658],[-135.027456,59.563692],[-135.114588,59.623415],[-135.153113,59.625159],[-135.21434,59.664343],[-135.25412,59.701339],[-135.477436,59.799626],[-135.854169,59.691846],[-135.9459,59.663802],[-136.19035,59.639854],[-136.35062,59.599326],[-136.23734,59.558734],[-136.234229,59.524731],[-136.301846,59.464129],[-136.365822,59.448007],[-136.474324,59.464193],[-136.466815,59.284252],[-136.581521,59.164909],[-136.826633,59.158389],[-136.863896,59.138472],[-137.26475,59.002352],[-137.447383,58.909513],[-137.526424,58.906834],[-137.498558,58.986694],[-137.604277,59.243057],[-138.248099,59.57985],[-138.62093,59.770559],[-138.662769,59.813719],[-138.702053,59.910245],[-138.796083,59.928701],[-139.031643,59.9937],[-139.200346,60.090701],[-139.082246,60.323825],[-139.086669,60.357654],[-139.698361,60.340421],[-139.989142,60.18524],[-140.47229,60.31059],[-140.53509,60.224224],[-141.00184,60.306105],[-141.001871,60.501323],[-141.001926,60.913756],[-141.001958,61.211789],[-141.002019,61.562799],[-141.002115,62.037104],[-141.002157,62.53603],[-141.002186,62.977563],[-141.002226,63.344065],[-141.002238,63.575872],[-141.00226,64.010731],[-141.002276,64.314949],[-141.0023,64.737229],[-141.002338,65.049797],[-141.002383,65.297103],[-141.00242,65.609797],[-141.0025,65.999747],[-141.002543,66.288872],[-141.00262,66.771524],[-141.002646,67.028782],[-141.002682,67.397255],[-141.002693,67.671929],[-141.002712,67.92919],[-141.00271,68.185643],[-141.002692,68.568002],[-141.002681,68.825256],[-141.002679,69.107202],[-141.002665,69.344169],[-141.002713,69.703632],[-141.133589,69.725351],[-141.377896,69.744147],[-141.591453,69.814582],[-141.74611,69.848242],[-141.914016,69.87204],[-142.079087,69.908502],[-142.425343,70.011497],[-142.480273,70.033905],[-142.706295,70.088196],[-143.027932,70.151191],[-143.167885,70.193493],[-143.22643,70.201998],[-143.36079,70.196324],[-143.411447,70.183571],[-143.560275,70.20487],[-143.641492,70.203707],[-143.679802,70.191153],[-143.846023,70.176849],[-143.91015,70.180257],[-144.00505,70.168415],[-144.063171,70.140365],[-144.11443,70.139334],[-144.227915,70.114968],[-144.378073,70.092397],[-144.481218,70.090669],[-144.610951,70.050427],[-144.678778,70.014434],[-144.86703,70.042809],[-145.032934,70.029489],[-145.08388,70.074326],[-145.150363,70.091552],[-145.296354,70.092257],[-145.507129,70.14187],[-145.574554,70.146143],[-145.82603,70.214751],[-145.979267,70.244111],[-146.20365,70.257153],[-146.405494,70.28886],[-146.447378,70.283893],[-146.634489,70.290525],[-146.716892,70.286803],[-146.869702,70.347089],[-146.999177,70.363409],[-147.168428,70.346097],[-147.188418,70.375048],[-147.451039,70.446685],[-147.610653,70.435673],[-147.652482,70.459704],[-147.779436,70.471869],[-147.811574,70.51279],[-147.906875,70.538927],[-148.037321,70.535943],[-148.129946,70.500016],[-148.283356,70.529175],[-148.39671,70.530539],[-148.472704,70.516586],[-148.514747,70.48817],[-148.515214,70.458807],[-148.659483,70.478817],[-148.679452,70.495865],[-148.786709,70.526549],[-148.973162,70.532544],[-149.042077,70.555758],[-149.422243,70.607998],[-149.694987,70.625558],[-149.796647,70.612307],[-149.84144,70.617932],[-149.954163,70.6111],[-150.009005,70.597663],[-150.111646,70.615438],[-150.20087,70.615382],[-150.283874,70.604643],[-150.346103,70.560511],[-150.424456,70.563956],[-150.489909,70.553754],[-150.749234,70.554579],[-150.876123,70.538942],[-150.924933,70.517034],[-151.053392,70.49968],[-151.169822,70.496959],[-151.246641,70.480015],[-151.426513,70.47848],[-151.54501,70.490319],[-151.499482,70.558593],[-151.559228,70.589308],[-151.61557,70.597089],[-152.04436,70.818152],[-152.056976,70.84659],[-152.124528,70.880388],[-152.199518,70.898779],[-152.376612,70.922249],[-152.47715,70.94244],[-152.655498,70.94591],[-152.8227,70.974842],[-152.914057,70.971677],[-152.98413,70.982633],[-153.045401,70.971595],[-153.12296,70.978901],[-153.242774,70.976459],[-153.494346,70.932583],[-153.749519,70.941522],[-153.90042,70.930736],[-154.32616,71.0057],[-154.372454,71.010475],[-154.570158,71.077386],[-154.769903,71.149381],[-154.910955,71.185399],[-155.096302,71.223556],[-155.300076,71.240326],[-155.436059,71.270632],[-155.658561,71.289227],[-155.759197,71.283526],[-155.843832,71.336606],[-155.892559,71.354003],[-155.97864,71.362791],[-156.19882,71.395384],[-156.388046,71.435118],[-156.4604,71.441059],[-156.59331,71.423152],[-156.634751,71.397383],[-156.789622,71.373586],[-156.945338,71.311989],[-157.129029,71.21751],[-157.35999,71.091872],[-157.38421,71.07243],[-157.5533,70.999305],[-157.83968,70.919023],[-157.999427,70.890278],[-158.151772,70.870894],[-158.248,70.867639],[-158.438821,70.882438],[-158.533379,70.900935],[-158.59909,70.94636],[-158.685867,70.961138],[-158.896032,70.953264],[-158.97077,70.942164],[-159.175841,70.929085],[-159.552085,70.875431],[-159.712427,70.84683],[-159.900387,70.76869],[-160.087483,70.700487],[-160.22957,70.637541],[-160.49101,70.535492],[-160.729805,70.457197],[-160.975017,70.40129],[-161.182082,70.359842],[-161.283231,70.349866],[-161.444295,70.347876],[-161.565054,70.354289],[-161.87486,70.380652],[-162.000221,70.358974],[-162.21567,70.299506],[-162.400766,70.238475],[-162.57257,70.169426],[-162.896117,69.966964],[-163.049353,69.893206],[-163.183493,69.806446],[-163.28648,69.640408],[-163.282255,69.456319],[-163.30135,69.397212],[-163.36288,69.330192],[-163.611741,69.210737],[-163.654536,69.172984],[-163.759838,69.121831],[-163.935268,69.070312],[-164.001904,69.044417],[-164.23015,68.986884],[-164.288557,68.976432],[-164.61956,68.965217],[-164.779354,68.947764],[-164.966851,68.941386],[-165.007541,68.946355],[-165.291464,68.921124],[-165.498777,68.913129],[-165.666756,68.91463],[-165.817383,68.921993],[-166.109959,68.929078],[-166.185328,68.935706],[-166.320586,68.915738],[-166.36694,68.858327],[-166.320642,68.774862],[-166.338392,68.706885],[-166.328027,68.693065],[-166.37025,68.648945],[-166.369922,68.571189],[-166.425061,68.538237],[-166.44433,68.476069],[-166.54161,68.448919],[-166.770595,68.415188],[-166.949969,68.359182],[-166.985424,68.333121],[-166.973264,68.309697],[-166.90058,68.286272],[-166.843652,68.280811],[-166.759607,68.293008],[-166.67276,68.290192],[-166.53935,68.276221],[-166.410026,68.250761],[-166.274529,68.212918],[-166.14844,68.168879],[-166.043858,68.084891],[-165.951112,68.056624],[-165.820035,68.03058],[-165.684734,68.025163],[-165.656222,68.038727],[-165.499453,68.018782],[-165.206176,67.90502],[-164.767555,67.741696],[-164.65522,67.692448],[-164.549011,67.661994],[-164.28127,67.591666],[-164.175429,67.547599],[-164.00451,67.397808],[-163.882534,67.214976],[-163.962463,67.196696],[-164.002718,67.172554],[-163.99123,67.147883],[-163.911385,67.104695],[-163.781524,67.06976],[-163.617682,67.048732],[-163.340526,67.025915],[-163.04947,66.986611],[-162.876849,66.947828],[-162.832032,66.926813],[-163.20324,66.782197],[-163.40354,66.710324],[-163.626215,66.624174],[-163.805093,66.641286],[-164.061795,66.641872],[-164.424297,66.630217],[-164.751902,66.592546],[-164.880444,66.572628],[-165.43444,66.47523],[-165.777739,66.397362],[-166.093966,66.315998],[-166.317088,66.251935],[-166.480248,66.211933],[-166.719474,66.148046],[-167.007857,66.05141],[-167.178403,65.999567],[-167.30834,65.944325],[-167.520823,65.878152],[-167.718856,65.834922],[-167.883398,65.803275],[-168.077126,65.756089],[-168.15513,65.728351],[-168.221307,65.675449],[-168.231887,65.622567],[-168.218653,65.596123],[-168.16758,65.546902],[-168.126639,65.530526],[-168.03105,65.50943],[-167.938029,65.499896],[-167.89687,65.476685],[-167.756709,65.447226],[-167.60639,65.385626],[-167.400891,65.34727],[-167.191299,65.337629],[-167.070331,65.327491],[-166.94893,65.307909],[-167.008529,65.276652],[-167.072439,65.199782],[-167.084339,65.155695],[-167.04093,65.109248],[-166.978964,65.06941],[-166.87816,65.02995],[-166.824467,65.017457],[-166.828999,64.999315],[-166.761901,64.963493],[-166.58918,64.908291],[-166.522688,64.871103],[-166.51721,64.857383],[-166.570203,64.833417],[-166.586748,64.801469],[-166.590163,64.738948],[-166.50784,64.631373],[-166.352029,64.568137],[-166.281388,64.544956],[-166.353875,64.506444],[-166.351132,64.477883],[-166.27196,64.43778],[-166.153861,64.432974],[-166.095696,64.459804],[-166.070873,64.490159],[-166.07779,64.520459],[-165.850211,64.493879],[-165.680679,64.483641],[-165.476868,64.45769],[-165.335918,64.444417],[-165.0322,64.387987],[-164.804228,64.401061],[-164.7548,64.407824],[-164.465135,64.483867],[-164.355355,64.508447],[-164.266312,64.518333],[-164.180902,64.519569],[-163.97622,64.508316],[-163.850767,64.519398],[-163.814064,64.531186],[-163.75039,64.51964],[-163.656951,64.52194],[-163.536172,64.503581],[-163.457729,64.48211],[-163.363754,64.445642],[-163.323338,64.407866],[-163.241932,64.360743],[-163.165797,64.349864],[-162.842152,64.283171],[-162.7958,64.275674],[-162.728062,64.287467],[-162.632747,64.331926],[-162.59477,64.338437],[-162.517872,64.384906],[-162.486691,64.470897],[-162.44188,64.504119],[-162.313491,64.542789],[-162.237403,64.524356],[-162.027939,64.461317],[-162.002127,64.458789],[-161.59084,64.335541],[-161.49343,64.328378],[-161.413899,64.358587],[-161.326796,64.334012],[-161.075402,64.206652],[-161.0706,64.084975],[-161.04566,64.022467],[-161.009272,63.979281],[-160.94464,63.921532],[-160.92012,63.859745],[-160.880051,63.812181],[-160.8862,63.771397],[-161.024205,63.671793],[-161.098069,63.656136],[-161.139971,63.625226],[-161.14254,63.604178],[-161.20207,63.587368],[-161.270082,63.530191],[-161.314358,63.519229],[-161.424338,63.5161],[-161.511954,63.519746],[-161.603114,63.504155],[-161.660178,63.514387],[-161.840405,63.493288],[-161.89621,63.50822],[-161.95696,63.557209],[-162.222744,63.596914],[-162.25462,63.646467],[-162.30435,63.672025],[-162.394359,63.688304],[-162.481046,63.685007],[-162.584319,63.691392],[-162.691327,63.667729],[-162.786166,63.624067],[-162.82644,63.57636],[-162.772898,63.529747],[-162.679831,63.491626],[-162.552552,63.482598],[-162.437773,63.491994],[-162.700287,63.291175],[-162.739517,63.268925],[-162.870861,63.253559],[-162.937697,63.215102],[-162.958127,63.176791],[-163.02618,63.153468],[-163.1187,63.101558],[-163.252479,63.092454],[-163.349816,63.123687],[-163.455166,63.174955],[-163.58471,63.205803],[-163.6581,63.249717],[-163.771848,63.276228],[-163.870625,63.284227],[-163.932943,63.300173],[-164.051256,63.317355],[-164.128906,63.315302],[-164.250047,63.303452],[-164.395461,63.279893],[-164.495673,63.251159],[-164.609283,63.199523],[-164.746821,63.110398],[-164.743802,63.093231],[-164.830317,63.08225],[-164.906736,63.044895],[-164.910614,63.005155],[-164.895533,62.948636],[-164.939272,62.877516],[-164.996533,62.866583],[-165.03814,62.820647],[-165.01689,62.784435],[-165.021888,62.756215],[-165.063015,62.733981],[-165.126,62.740517],[-165.22189,62.722466],[-165.25901,62.6922],[-165.239301,62.634082],[-165.338687,62.576038],[-165.34621,62.526699],[-165.383615,62.496962],[-165.37958,62.469606],[-165.41873,62.440431],[-165.44887,62.391022],[-165.525885,62.35344],[-165.62127,62.291784],[-165.668903,62.250811],[-165.739566,62.204852],[-165.79247,62.190323],[-165.820598,62.166228],[-165.89259,62.138152],[-165.90181,62.119276],[-166.005766,62.123444],[-166.049213,62.108022],[-166.126052,62.038723],[-166.118314,62.009699],[-166.07595,61.98305],[-166.09485,61.946659],[-166.11251,61.873144],[-166.197763,61.834273],[-166.237551,61.780565],[-166.237946,61.740862],[-166.262127,61.693264],[-166.260245,61.658725],[-166.288613,61.580809],[-166.254094,61.522252],[-166.19449,61.459867],[-166.0313,61.395299],[-166.032598,61.378437],[-165.990387,61.316435],[-165.90327,61.256945],[-165.837561,61.238721],[-165.786881,61.198115],[-165.743395,61.125193],[-165.66365,61.057809],[-165.538782,61.02678],[-165.41667,61.01248],[-165.346602,61.015442],[-165.290151,61.03406],[-165.2618,61.021513],[-165.30114,60.990243],[-165.30215,60.96644],[-165.263026,60.923133],[-165.22348,60.89645],[-165.170523,60.876928],[-165.17749,60.847966],[-165.157507,60.829298],[-165.176175,60.796326],[-165.123369,60.736627],[-165.164241,60.707675],[-165.222048,60.695373],[-165.245902,60.675005],[-165.29137,60.665542],[-165.340191,60.638268],[-165.445579,60.623523],[-165.518263,60.566016],[-165.501449,60.52618],[-165.42653,60.474383],[-165.387519,60.459507],[-165.333575,60.459266],[-165.235411,60.42515],[-165.176786,60.381245],[-165.09866,60.334709],[-164.971916,60.277019],[-164.851129,60.24899],[-164.74881,60.240313],[-164.6586,60.175533],[-164.597386,60.158238],[-164.52145,60.091965],[-164.488226,60.054962],[-164.445735,60.030511],[-164.364332,59.999223],[-164.420269,59.9781],[-164.449658,59.953338],[-164.415696,59.884867],[-164.346545,59.848355],[-164.313152,59.806286],[-164.230963,59.753062],[-164.124795,59.716276],[-164.080776,59.670513],[-164.0133,59.637759],[-163.919717,59.640464],[-163.847071,59.617927],[-163.760961,59.639716],[-163.739949,59.668649],[-163.7489,59.686422],[-163.81367,59.716942],[-163.896892,59.714642],[-163.95286,59.735916],[-163.98239,59.761465],[-163.78437,59.740569],[-163.64742,59.743609],[-163.582016,59.751635],[-163.330029,59.769662],[-163.145863,59.795642],[-163.10567,59.778241],[-163.025586,59.767542],[-162.947224,59.768288],[-162.868661,59.780381],[-162.82609,59.80066],[-162.818048,59.840276],[-162.707559,59.880175],[-162.698375,59.891816],[-162.606411,59.888301],[-162.562638,59.896826],[-162.449848,59.884616],[-162.441661,59.844078],[-162.411383,59.823256],[-162.364341,59.810869],[-162.227838,59.8065],[-162.178329,59.814842],[-162.138506,59.772392],[-162.06832,59.716426],[-162.042606,59.670729],[-162.00306,59.644654],[-161.871266,59.524791],[-161.914449,59.469289],[-162.014024,59.432134],[-162.05361,59.40899],[-162.064755,59.360032],[-162.111558,59.332929],[-162.166604,59.275075],[-162.163811,59.224461],[-162.1022,59.128752],[-162.04682,59.079083],[-162.00113,59.070226],[-161.953346,59.032703],[-161.90247,58.977602],[-161.881765,58.944146],[-161.88179,58.857504],[-161.851201,58.807983],[-161.889159,58.7843],[-161.897844,58.762043],[-161.963028,58.726233],[-162.091043,58.722735],[-162.168522,58.710276],[-162.26898,58.667557],[-162.270411,58.622126],[-162.230286,58.598551],[-162.171742,58.589944],[-162.132217,58.571376],[-161.998613,58.561078],[-161.90905,58.572739],[-161.865052,58.566087],[-161.855038,58.532169],[-161.817568,58.505726],[-161.74924,58.496019],[-161.64025,58.502326],[-161.586982,58.518419],[-161.5715,58.543755],[-161.489866,58.561895],[-161.457832,58.585966],[-161.353457,58.603585],[-161.233978,58.643453],[-161.17704,58.607068],[-161.18677,58.573297],[-161.158918,58.512383],[-161.095794,58.490027],[-161.015597,58.503062],[-160.933436,58.496109],[-160.87415,58.510066],[-160.801773,58.551428],[-160.78727,58.58157],[-160.700028,58.672074],[-160.601628,58.793323],[-160.5935,58.821728],[-160.60871,58.843621],[-160.343087,58.880542],[-160.333681,58.848314],[-160.2976,58.79915],[-160.234,58.773956],[-160.150765,58.771996],[-160.089153,58.806303],[-160.014428,58.759786],[-160.004365,58.744612],[-159.93908,58.717906],[-159.89386,58.715036],[-159.81172,58.73545],[-159.748103,58.760305],[-159.701694,58.796397],[-159.675652,58.789483],[-159.54468,58.778419],[-159.404728,58.665957],[-159.151388,58.415773],[-159.148388,58.370302],[-159.107876,58.347541],[-159.018722,58.33414],[-158.96551,58.352805],[-158.91168,58.342909],[-158.810329,58.347151],[-158.744724,58.363725],[-158.689543,58.401682],[-158.624733,58.422033],[-158.605235,58.455592],[-158.213032,58.542604],[-158.147875,58.54378],[-158.062812,58.485518],[-158.089925,58.424193],[-158.168903,58.273056],[-158.281147,58.044249],[-158.435807,57.748042],[-158.487396,57.615627],[-158.51084,57.58447],[-158.529604,57.535139],[-158.55774,57.493597],[-158.667664,57.295653],[-158.866283,56.997563],[-158.8934,56.945108],[-158.98157,56.911126],[-159.08157,56.852889],[-159.173914,56.81445],[-159.35122,56.757721],[-159.425744,56.740187],[-159.50228,56.702802],[-159.580984,56.672923],[-159.807911,56.610327],[-159.905139,56.578175],[-159.994064,56.516406],[-160.069137,56.480279],[-160.225416,56.4336],[-160.305584,56.369214],[-160.413157,56.321734],[-160.439433,56.298814],[-160.483833,56.229537],[-160.513669,56.203017],[-160.545655,56.115279],[-160.584043,56.079386],[-160.616035,56.067421],[-160.929572,56.07938],[-161.04474,56.071402],[-161.211108,56.06741],[-161.42866,56.011574],[-161.600409,55.986716],[-161.729498,55.954868],[-161.82575,55.942655],[-161.906193,55.912201],[-161.981019,55.859419],[-162.043579,55.832035],[-162.134185,55.809061],[-162.17227,55.77353],[-162.289791,55.724866],[-162.415091,55.626611],[-162.50023,55.572852],[-162.547228,55.528745],[-162.608353,55.497775],[-162.645035,55.488497],[-162.68156,55.463181],[-162.72697,55.45887],[-162.84709,55.423916],[-162.935161,55.382051],[-162.982797,55.335617],[-163.150455,55.229505],[-163.20752,55.219671],[-163.29068,55.193397],[-163.458942,55.128136],[-163.567947,55.100158],[-163.630692,55.093229],[-163.770299,55.108826],[-163.858656,55.088983],[-163.912702,55.090584],[-163.950176,55.078812],[-164.04745,55.020657],[-164.157871,55.015654],[-164.226566,54.990329],[-164.307526,54.951458],[-164.418151,54.979558],[-164.521182,54.969124],[-164.614255,54.923877],[-164.637539,54.900759],[-164.651179,54.844199],[-164.698512,54.801539],[-164.70608,54.773484],[-164.78278,54.691702],[-164.835173,54.687341],[-164.903045,54.666465],[-164.999482,54.626249],[-165.03616,54.576598],[-165.026975,54.520773],[-164.99563,54.457309],[-164.901297,54.374651],[-164.805378,54.345537],[-164.74062,54.337261],[-164.70597,54.344197],[-164.617109,54.338874],[-164.48706,54.369602],[-164.414987,54.368823],[-164.346873,54.396565],[-164.27668,54.437207],[-164.250013,54.46793],[-164.22786,54.523664],[-164.122671,54.556119],[-164.056175,54.563649],[-163.876218,54.57047],[-163.712797,54.570191],[-163.59356,54.54114],[-163.52618,54.551662],[-163.501081,54.582011],[-163.413938,54.600378],[-163.225096,54.617287],[-163.059141,54.606203],[-162.999786,54.623531],[-162.95478,54.659815],[-162.968606,54.708702],[-163.028243,54.757222],[-163.104935,54.809385],[-163.141738,54.820251],[-163.110092,54.846192],[-163.07939,54.853838],[-163.0632,54.879518],[-162.967801,54.882516],[-162.893903,54.844238],[-162.822063,54.85659],[-162.790797,54.888816],[-162.732588,54.895763],[-162.651105,54.922157],[-162.602183,54.909218],[-162.618933,54.845228],[-162.56937,54.815132],[-162.512606,54.811487],[-162.48308,54.792724],[-162.533142,54.776612],[-162.554931,54.749344],[-162.539364,54.707207],[-162.507013,54.682701],[-162.459877,54.666524],[-162.49035,54.622377],[-162.477528,54.595216],[-162.479815,54.540932],[-162.428512,54.507669],[-162.365035,54.507693],[-162.337814,54.517803],[-162.31511,54.545719],[-162.317308,54.572429],[-162.279405,54.582348],[-162.242297,54.616666],[-162.23943,54.638708],[-162.187276,54.639579],[-162.161091,54.626509],[-162.104846,54.618286],[-162.062883,54.625184],[-162.03465,54.644777],[-162.033252,54.681056],[-162.05114,54.701677],[-162.013598,54.715976],[-161.966844,54.714802],[-161.935837,54.695241],[-161.841016,54.684516],[-161.782728,54.706758],[-161.765058,54.724459],[-161.710187,54.739154],[-161.63984,54.736159],[-161.576552,54.760705],[-161.564744,54.797197],[-161.667594,54.882865],[-161.710014,54.891592],[-161.66668,54.928116],[-161.659481,54.956383],[-161.591366,54.963672],[-161.525872,54.951589],[-161.47009,54.949729],[-161.3941,54.968485],[-161.359522,54.991451],[-161.361235,55.033825],[-161.417585,55.062056],[-161.37539,55.089157],[-161.313573,55.086621],[-161.272255,55.100089],[-161.246501,55.126975],[-161.24851,55.193258],[-161.13167,55.213938],[-161.08038,55.214364],[-161.039625,55.229462],[-161.01604,55.25142],[-161.019724,55.284664],[-161.068997,55.312391],[-161.12859,55.313389],[-161.18561,55.285761],[-161.219665,55.294142],[-161.112538,55.343435],[-160.995901,55.381243],[-160.907905,55.420374],[-160.859006,55.419874],[-160.892405,55.380674],[-160.93109,55.356524],[-160.95342,55.325367],[-160.93864,55.291764],[-160.94394,55.263825],[-160.922363,55.238058],[-160.942697,55.202328],[-160.935588,55.178226],[-160.90506,55.159454],[-160.899676,55.09535],[-160.83677,55.068151],[-160.786356,55.070815],[-160.709692,55.112055],[-160.648969,55.096288],[-160.598691,55.094056],[-160.59173,55.052774],[-160.57326,55.036982],[-160.51947,55.025123],[-160.460837,55.035845],[-160.430926,55.064862],[-160.446923,55.108174],[-160.41152,55.146275],[-160.376906,55.16542],[-160.3536,55.193655],[-160.278369,55.205074],[-160.242536,55.241055],[-160.221351,55.289228],[-160.18199,55.288604],[-160.130092,55.238675],[-160.149679,55.196376],[-160.190247,55.185347],[-160.214594,55.160117],[-160.270951,55.138869],[-160.288523,55.111625],[-160.262712,55.072852],[-160.261919,55.035201],[-160.244364,55.022575],[-160.292857,55.000674],[-160.29766,54.976474],[-160.326853,54.959691],[-160.343393,54.930881],[-160.337202,54.877276],[-160.30281,54.829746],[-160.241964,54.803465],[-160.20772,54.807342],[-160.113037,54.854921],[-160.098023,54.885416],[-160.034488,54.879604],[-159.986819,54.891218],[-159.949128,54.926216],[-159.90692,54.909474],[-159.8461,54.902435],[-159.81604,54.909532],[-159.775735,54.937838],[-159.768599,54.968668],[-159.734735,54.990245],[-159.580341,54.987598],[-159.543252,54.976369],[-159.546603,54.933583],[-159.50326,54.900755],[-159.43928,54.896002],[-159.362297,54.828315],[-159.300766,54.812881],[-159.26057,54.812737],[-159.201515,54.833672],[-159.132695,54.885531],[-159.11179,54.91569],[-159.13358,54.956011],[-159.213608,54.984254],[-159.25151,55.006699],[-159.212298,55.025842],[-159.204305,55.066011],[-159.216575,55.087442],[-159.252834,55.106171],[-159.321993,55.118247],[-159.348479,55.112897],[-159.410886,55.123496],[-159.408095,55.174397],[-159.427079,55.201146],[-159.419793,55.249896],[-159.399493,55.259793],[-159.398063,55.29337],[-159.41531,55.315381],[-159.4826,55.336294],[-159.544335,55.328407],[-159.57302,55.312141],[-159.609059,55.26779],[-159.66021,55.24291],[-159.744341,55.233364],[-159.7668,55.293085],[-159.792496,55.317154],[-159.8433,55.340049],[-159.883555,55.345198],[-159.932584,55.336981],[-159.996367,55.390194],[-160.050544,55.395777],[-160.059297,55.416208],[-160.04116,55.448879],[-160.002045,55.459081],[-159.951138,55.507583],[-159.655302,55.528886],[-159.584658,55.524259],[-159.538153,55.532006],[-159.50398,55.567355],[-159.52152,55.600894],[-159.457991,55.628875],[-158.979703,55.630341],[-158.23744,55.63499],[-157.964441,55.812036],[-157.71187,55.969416],[-157.32134,56.21831],[-157.000102,56.420097],[-156.745451,56.576315],[-156.357314,56.822259],[-156.358967,57.037181],[-156.31167,57.067916],[-156.316483,57.105502],[-156.262757,57.133598],[-156.227811,57.162455],[-156.214506,57.19518],[-156.247041,57.243776],[-156.167196,57.345852],[-156.098355,57.379848],[-155.978919,57.395895],[-155.93976,57.41287],[-155.844485,57.497513],[-155.719259,57.497419],[-155.645503,57.522358],[-155.632567,57.586813],[-155.589109,57.608276],[-155.45986,57.637648],[-155.360914,57.625029],[-155.300397,57.642894],[-155.277003,57.676112],[-155.245788,57.681595],[-155.209955,57.716257],[-155.15006,57.750022],[-155.160861,57.790588],[-155.078876,57.79534],[-155.04352,57.81239],[-154.99402,57.863188],[-154.969687,57.927854],[-154.940742,57.975071],[-154.893803,57.983541],[-154.8653,57.967639],[-154.800929,57.959148],[-154.708989,57.982295],[-154.589135,57.989779],[-154.539595,57.988197],[-154.39074,57.999301],[-154.335126,58.026711],[-154.265523,58.038228],[-154.211801,58.080288],[-154.155186,58.090983],[-154.119565,58.113228],[-154.10892,58.14601],[-154.05897,58.175206],[-154.03904,58.230362],[-153.97004,58.312724],[-153.909327,58.329104],[-153.858557,58.374274],[-153.881794,58.456499],[-153.778412,58.504044],[-153.692361,58.493506],[-153.609804,58.519746],[-153.592668,58.542253],[-153.51515,58.548397],[-153.468709,58.566502],[-153.44702,58.598409],[-153.47878,58.641694],[-153.371581,58.673275],[-153.31802,58.712962],[-153.244798,58.70747],[-153.18696,58.729345],[-153.166846,58.755175],[-153.176636,58.784665],[-153.2025,58.801333],[-153.152349,58.847582],[-153.165141,58.892714],[-153.184086,58.905729],[-153.02118,59.002452],[-152.271933,59.05076],[-151.85538,59.077617],[-151.444173,59.099687],[-151.374719,59.110669],[-151.255287,59.137764],[-150.99219,59.180837],[-150.801062,59.231825],[-150.710969,59.250224],[-150.456456,59.308688],[-150.00212,59.427483],[-149.6213,59.527516],[-149.467504,59.733767],[-149.269625,59.84542],[-148.980202,59.893721],[-148.605476,59.884296],[-148.437224,59.89281],[-148.218506,59.87564],[-148.100746,59.815697],[-148.039657,59.769047],[-147.95644,59.744131],[-147.819382,59.73667],[-147.68724,59.74168],[-147.520846,59.774079],[-147.334827,59.833874],[-147.28096,59.878726],[-147.271129,59.963437],[-147.24174,59.998317],[-147.16157,60.052993],[-147.10194,60.081337],[-146.939279,60.103848],[-146.734306,60.154142],[-146.465707,60.212501],[-146.17931,60.280056],[-145.97657,60.314652],[-145.824323,60.315117],[-145.62169,60.255803],[-145.317687,60.179691],[-145.097975,60.146112],[-144.776015,60.129592],[-144.607277,60.078347],[-144.539684,60.010149],[-144.641727,59.924389],[-144.777798,59.829935],[-144.7781,59.778563],[-144.67677,59.727395],[-144.542182,59.719321],[-144.410509,59.746274],[-144.144078,59.919452],[-143.943218,59.919851],[-143.08325,59.976914],[-142.859039,60.011367],[-142.66896,60.011485],[-142.397798,59.98485],[-142.08237,59.941066],[-141.646571,59.861038],[-141.38329,59.800361],[-141.001683,59.723722],[-141.001678,59.700999],[-140.896295,59.68191],[-140.819288,59.681738],[-140.656438,59.657369],[-140.52559,59.658157],[-140.363094,59.653566],[-140.035167,59.546847],[-139.922459,59.501883],[-139.731919,59.438497],[-139.681604,59.415006],[-139.53141,59.357192],[-139.318925,59.293719],[-139.116489,59.249399],[-138.89056,59.180721],[-138.772796,59.125694],[-138.667201,59.083119],[-138.489984,59.042349],[-138.328414,59.011938],[-138.291085,59.000384],[-138.2044,58.954633],[-138.133478,58.92352],[-138.025971,58.85244],[-138.037571,58.790109],[-137.99604,58.749505],[-137.869552,58.691561],[-137.775938,58.640754],[-137.762218,58.596502],[-137.675051,58.554838],[-137.602565,58.541748],[-137.450459,58.464324],[-137.37417,58.440911],[-137.315833,58.410112],[-137.247535,58.392847],[-137.149586,58.341307],[-137.072353,58.32362],[-137.0145,58.344311],[-136.974838,58.296044],[-136.937829,58.2686],[-136.89777,58.259519],[-136.855208,58.23085],[-136.814412,58.18879],[-136.761991,58.179405],[-136.711549,58.155669],[-136.61634,58.14723],[-136.544755,58.164448],[-136.510268,58.153464],[-136.615165,58.120712],[-136.650241,58.102629],[-136.678891,58.036293],[-136.679148,58.014266],[-136.65113,57.993777],[-136.658568,57.901455],[-136.616659,57.869218],[-136.454479,57.83078],[-136.41081,57.754657],[-136.244471,57.538702],[-136.05388,57.277261],[-135.870005,57.000592],[-135.569244,56.778592],[-135.206949,56.50889],[-134.867499,56.247413],[-134.823462,56.218321],[-134.661229,56.142169],[-134.53279,56.028267],[-134.49417,55.999638],[-134.496541,55.969896],[-134.524971,55.948566],[-134.60156,55.922925],[-134.645685,55.871472],[-134.629053,55.843592],[-134.56937,55.80401],[-134.42103,55.748631],[-134.192027,55.693053],[-134.04661,55.850477],[-134.002184,55.847262],[-134.007385,55.805938],[-133.965255,55.780699],[-133.8859,55.780235],[-133.856716,55.792872],[-133.831784,55.74151],[-133.879562,55.715451],[-133.88768,55.683639],[-133.867501,55.657325],[-133.798246,55.633231],[-133.829339,55.570917],[-133.83484,55.53326],[-133.861198,55.501623],[-133.861381,55.480639],[-133.897856,55.459075],[-133.907153,55.434003],[-133.873917,55.39884],[-133.83304,55.388568],[-133.7716,55.394323],[-133.76138,55.346261],[-133.778449,55.319616],[-133.775623,55.282245],[-133.707609,55.229371],[-133.69122,55.198473],[-133.61366,55.170265],[-133.70094,55.078617],[-133.790528,55.000581],[-133.78452,54.95349],[-133.741566,54.822922],[-133.69665,54.736041],[-133.648903,54.632045],[-132.925702,54.65897],[-132.487936,54.670139],[-132.004808,54.682448],[-131.312951,54.694032],[-130.878279,54.700836],[-130.615397,54.705491],[-130.626368,54.738068],[-130.657754,54.761828],[-130.636745,54.778456],[-130.569366,54.790869],[-130.474605,54.838102],[-130.339504,54.921376],[-130.27556,54.97293],[-130.187541,55.064665],[-130.182707,55.093212],[-130.144723,55.146038],[-130.09655,55.197953],[-129.98006,55.28423],[-129.982348,55.302079],[-130.023558,55.338259],[-130.044303,55.45197],[-130.08541,55.491517],[-130.126743,55.581282],[-130.11168,55.682051],[-130.14804,55.715041],[-130.150595,55.767031],[-130.12372,55.80704],[-130.08451,55.823997],[-130.024731,55.915901],[-130.016871,56.017333],[-130.10277,56.116692],[-130.24554,56.096876],[-130.343714,56.127162],[-130.425579,56.140678],[-130.466874,56.23979],[-130.54117,56.248017],[-130.622488,56.267937],[-130.78223,56.367509],[-131.085704,56.40654],[-131.167925,56.448361],[-131.461806,56.547904],[-131.581221,56.613275],[-131.83513,56.601849],[-131.862035,56.704136],[-131.90176,56.753158],[-131.871725,56.804965],[-132.125934,56.874698],[-132.119034,56.891264]]]]},"properties":{"name":"Alaska","ns_code":"01785533","geoid":"02","usps_abbrev":"AK","fips_code":"02"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-91.166073,33.004106],[-91.201842,32.961212],[-91.212837,32.922103],[-91.196785,32.906784],[-91.163877,32.899476],[-91.131304,32.926918],[-91.135095,32.980108],[-91.106581,32.988937],[-91.086802,32.976266],[-91.080431,32.943206],[-91.064804,32.926464],[-91.070602,32.888658],[-91.105631,32.858396],[-91.143559,32.844738],[-91.16167,32.812465],[-91.165814,32.757841],[-91.1495,32.741931],[-91.125107,32.743195],[-91.060766,32.727494],[-91.063946,32.702925],[-91.126201,32.667135],[-91.152699,32.640757],[-91.142782,32.598899],[-91.121157,32.584806],[-91.049796,32.607188],[-91.025769,32.646572],[-91.003545,32.612271],[-91.030991,32.583347],[-91.080411,32.556468],[-91.057706,32.533777],[-91.018469,32.521019],[-90.987669,32.498481],[-91.000106,32.48229],[-91.049307,32.498539],[-91.093742,32.549127],[-91.116708,32.500138],[-91.115708,32.48234],[-91.093508,32.457441],[-91.027406,32.433942],[-90.993863,32.450851],[-90.965987,32.420654],[-90.99408,32.403861],[-91.004706,32.367244],[-90.986672,32.35176],[-90.912363,32.339454],[-90.916157,32.303582],[-90.947834,32.283486],[-90.984077,32.279953],[-90.969515,32.252053],[-90.983381,32.211767],[-91.034302,32.241548],[-91.061408,32.21865],[-91.083708,32.22645],[-91.11727,32.206668],[-91.133587,32.213431],[-91.16488,32.195743],[-91.174577,32.157311],[-91.162822,32.132694],[-91.11099,32.124644],[-91.08163,32.133992],[-91.052754,32.125777],[-91.049707,32.157352],[-91.002906,32.162052],[-91.005006,32.142851],[-91.030891,32.120558],[-91.038607,32.098253],[-91.080008,32.079154],[-91.098708,32.048355],[-91.139309,32.081753],[-91.16201,32.061855],[-91.141109,32.045654],[-91.087408,32.034056],[-91.075908,32.016827],[-91.106908,31.989357],[-91.16441,31.982557],[-91.18811,31.961358],[-91.20101,31.909159],[-91.233903,31.877607],[-91.265812,31.86486],[-91.245624,31.833165],[-91.262011,31.809362],[-91.283212,31.815762],[-91.294713,31.86046],[-91.345214,31.843861],[-91.363514,31.783363],[-91.348114,31.758163],[-91.28742,31.771964],[-91.279789,31.744751],[-91.320913,31.750064],[-91.369375,31.746903],[-91.397115,31.711364],[-91.395715,31.644165],[-91.400815,31.620465],[-91.423016,31.611265],[-91.463817,31.620365],[-91.497665,31.645371],[-91.517233,31.61346],[-91.486518,31.586566],[-91.422716,31.597065],[-91.407915,31.569366],[-91.443916,31.542466],[-91.475917,31.531266],[-91.515919,31.530729],[-91.513366,31.444396],[-91.499812,31.4201],[-91.472067,31.397076],[-91.472542,31.371069],[-91.504756,31.36498],[-91.532336,31.390275],[-91.548465,31.432668],[-91.578334,31.399067],[-91.568953,31.377629],[-91.54638,31.382763],[-91.548213,31.346084],[-91.510049,31.316822],[-91.518578,31.275283],[-91.558684,31.262176],[-91.641253,31.266917],[-91.644356,31.234414],[-91.595029,31.201969],[-91.589046,31.178586],[-91.624217,31.133729],[-91.625199,31.115963],[-91.56415,31.06683],[-91.564397,31.038965],[-91.590463,31.01727],[-91.636942,30.999416],[-91.122154,30.998908],[-90.7335,30.999218],[-90.210877,31.000654],[-89.728147,31.002431],[-89.735686,30.966573],[-89.75595,30.944119],[-89.750073,30.91293],[-89.770269,30.89939],[-89.804632,30.802511],[-89.831537,30.76761],[-89.822969,30.740075],[-89.842525,30.719942],[-89.841521,30.686568],[-89.820068,30.632808],[-89.818771,30.59288],[-89.78968,30.544656],[-89.779159,30.544029],[-89.752807,30.502962],[-89.721405,30.488883],[-89.683631,30.451787],[-89.683708,30.405586],[-89.657287,30.357183],[-89.630622,30.337491],[-89.631614,30.257013],[-89.616828,30.225772],[-89.571907,30.180721],[-89.538635,30.19589],[-89.504735,30.157923],[-89.416711,30.177639],[-89.288394,30.17847],[-89.25004,30.185519],[-89.183669,30.212155],[-89.074653,30.154294],[-89.029181,30.177874],[-89.000032,30.1611],[-88.94161,30.159419],[-88.90033,30.16998],[-88.85039,30.192282],[-88.821387,30.21737],[-88.800636,30.202385],[-88.753899,30.188205],[-88.717386,30.190875],[-88.667249,30.178326],[-88.603881,30.170609],[-88.545855,30.176653],[-88.509786,30.157943],[-88.461283,30.146686],[-88.384431,30.158543],[-88.400618,30.476084],[-88.411726,30.722702],[-88.425432,30.998323],[-88.451573,31.481531],[-88.464908,31.705476],[-88.473227,31.893856],[-88.428209,32.25103],[-88.392176,32.548377],[-88.354292,32.875131],[-88.322505,33.142358],[-88.294867,33.367103],[-88.252254,33.719586],[-88.210741,34.0292],[-88.165583,34.383944],[-88.135204,34.615878],[-88.118407,34.724292],[-88.097888,34.892202],[-88.152413,34.919741],[-88.200064,34.995636],[-88.620196,34.995465],[-88.925242,34.994842],[-89.486693,34.993978],[-89.617973,34.995217],[-89.878364,34.994327],[-90.309289,34.995694],[-90.296422,34.976346],[-90.246116,34.944316],[-90.250095,34.90732],[-90.313476,34.871698],[-90.414859,34.831846],[-90.428756,34.841406],[-90.438311,34.884583],[-90.46615,34.890989],[-90.483876,34.861333],[-90.456935,34.823379],[-90.47228,34.802465],[-90.451758,34.741904],[-90.473384,34.725962],[-90.520181,34.731902],[-90.522077,34.754649],[-90.50152,34.77479],[-90.514708,34.801766],[-90.547859,34.779194],[-90.535408,34.750062],[-90.567486,34.72329],[-90.546053,34.702076],[-90.477031,34.701174],[-90.46282,34.684074],[-90.479718,34.659934],[-90.517168,34.630928],[-90.555104,34.646236],[-90.539401,34.670911],[-90.561198,34.69676],[-90.588419,34.670963],[-90.581693,34.604227],[-90.545891,34.563257],[-90.545728,34.53775],[-90.580115,34.514537],[-90.589919,34.484794],[-90.565809,34.4354],[-90.580681,34.410551],[-90.638672,34.385043],[-90.666787,34.355817],[-90.657371,34.327287],[-90.693129,34.32257],[-90.67666,34.371411],[-90.712088,34.363805],[-90.756197,34.367256],[-90.765174,34.342818],[-90.740889,34.306538],[-90.765165,34.280524],[-90.802924,34.282465],[-90.833335,34.264264],[-90.847808,34.20653],[-90.882162,34.216975],[-90.905876,34.243541],[-90.937042,34.235341],[-90.916056,34.196923],[-90.887887,34.181982],[-90.816572,34.183023],[-90.807223,34.163745],[-90.822593,34.144054],[-90.86788,34.142146],[-90.910007,34.165502],[-90.954299,34.138496],[-90.95517,34.118833],[-90.92123,34.093948],[-90.882623,34.096613],[-90.870738,34.084281],[-90.896897,34.024627],[-90.987948,34.019038],[-90.961551,33.979946],[-90.967632,33.963324],[-91.000108,33.966428],[-91.01889,34.003151],[-91.048367,33.985078],[-91.087921,33.975335],[-91.088164,33.960078],[-91.020097,33.937127],[-91.01151,33.924733],[-91.061247,33.877505],[-91.073011,33.857449],[-91.046849,33.815365],[-90.99175,33.792597],[-91.000106,33.769165],[-91.026782,33.763642],[-91.053886,33.778701],[-91.107318,33.770619],[-91.134744,33.782285],[-91.14662,33.732456],[-91.125527,33.70878],[-91.06829,33.716477],[-91.04678,33.706313],[-91.034565,33.673018],[-91.078507,33.658283],[-91.133416,33.67679],[-91.159746,33.706096],[-91.207807,33.700095],[-91.227857,33.683073],[-91.221117,33.662988],[-91.171168,33.647766],[-91.139209,33.625658],[-91.130445,33.606034],[-91.152148,33.582721],[-91.175979,33.582968],[-91.228489,33.564667],[-91.219297,33.532364],[-91.183372,33.498157],[-91.235181,33.438972],[-91.202829,33.434469],[-91.16946,33.452137],[-91.177381,33.484853],[-91.1646,33.497841],[-91.125109,33.472842],[-91.117975,33.453806],[-91.131885,33.430062],[-91.209295,33.404895],[-91.166304,33.379709],[-91.120678,33.388545],[-91.096942,33.41099],[-91.086498,33.451576],[-91.058152,33.428705],[-91.120409,33.363809],[-91.142219,33.348989],[-91.141216,33.298397],[-91.1001,33.238124],[-91.07853,33.283306],[-91.043985,33.269835],[-91.065629,33.232982],[-91.09171,33.220813],[-91.084366,33.180856],[-91.087589,33.145176],[-91.104317,33.131597],[-91.150362,33.130695],[-91.183662,33.141691],[-91.201125,33.108185],[-91.124639,33.064127],[-91.129087,33.033554],[-91.162363,33.019683],[-91.166073,33.004106]]]},"properties":{"name":"Mississippi","ns_code":"01779790","geoid":"28","usps_abbrev":"MS","fips_code":"28"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-103.002434,36.500397],[-102.625467,36.500364],[-102.22058,36.500333],[-101.834063,36.499556],[-101.496598,36.499455],[-101.219265,36.499463],[-100.824105,36.499619],[-100.522227,36.499291],[-100.000406,36.499702],[-100.000398,35.967746],[-100.000393,35.692515],[-100.000395,35.306413],[-100.000384,35.095109],[-100.00038,34.769239],[-100.000277,34.56045],[-99.971013,34.562501],[-99.953817,34.578527],[-99.921801,34.570253],[-99.888741,34.550452],[-99.85305,34.511585],[-99.821839,34.497848],[-99.814313,34.476204],[-99.753447,34.420853],[-99.727031,34.410554],[-99.694528,34.378218],[-99.648142,34.382312],[-99.600026,34.374688],[-99.569696,34.418418],[-99.517624,34.414494],[-99.398728,34.375832],[-99.387181,34.410842],[-99.395187,34.44203],[-99.37555,34.458789],[-99.320073,34.409267],[-99.28791,34.41403],[-99.261275,34.403508],[-99.269796,34.380843],[-99.237562,34.366701],[-99.234298,34.340451],[-99.208832,34.339172],[-99.213161,34.308476],[-99.189776,34.214357],[-99.121004,34.20185],[-99.080577,34.211483],[-99.05635,34.200014],[-98.951284,34.212189],[-98.920704,34.183435],[-98.887112,34.16826],[-98.831115,34.162154],[-98.766671,34.136834],[-98.690072,34.133155],[-98.643223,34.164531],[-98.603096,34.160501],[-98.577356,34.1491],[-98.504149,34.072287],[-98.486328,34.062598],[-98.442808,34.083144],[-98.418805,34.082655],[-98.398389,34.104566],[-98.398441,34.128456],[-98.36402,34.157109],[-98.32258,34.14972],[-98.300209,34.134579],[-98.232474,34.134641],[-98.200075,34.116783],[-98.16879,34.114262],[-98.130816,34.150532],[-98.109462,34.154111],[-98.09055,34.122484],[-98.120208,34.072127],[-98.10063,34.049984],[-98.103617,34.029207],[-98.084435,34.002893],[-98.041117,33.993456],[-97.97167,34.005434],[-97.946802,33.990893],[-97.956917,33.958502],[-97.957155,33.914454],[-97.984373,33.898024],[-97.877387,33.850236],[-97.833505,33.858096],[-97.805972,33.876571],[-97.763043,33.934145],[-97.732224,33.936681],[-97.687694,33.98718],[-97.66149,33.990818],[-97.609091,33.968093],[-97.59798,33.955247],[-97.589254,33.903922],[-97.55827,33.897099],[-97.500929,33.919538],[-97.458343,33.901887],[-97.452182,33.86896],[-97.463202,33.84309],[-97.426799,33.818641],[-97.37469,33.818552],[-97.340052,33.859841],[-97.313983,33.867535],[-97.255639,33.863702],[-97.245049,33.903216],[-97.212601,33.9159],[-97.185458,33.9007],[-97.166824,33.840395],[-97.194678,33.831192],[-97.205705,33.802908],[-97.192969,33.760784],[-97.154367,33.724094],[-97.123578,33.717044],[-97.095644,33.729222],[-97.085191,33.764738],[-97.092646,33.804198],[-97.048324,33.817269],[-97.057599,33.836506],[-97.02144,33.846379],[-96.98374,33.89209],[-96.996251,33.942664],[-96.973807,33.935697],[-96.924268,33.959159],[-96.905253,33.947219],[-96.895728,33.896414],[-96.866438,33.853149],[-96.841592,33.852894],[-96.832157,33.874835],[-96.794276,33.868886],[-96.761587,33.824407],[-96.713734,33.831328],[-96.690708,33.849959],[-96.673449,33.912278],[-96.630117,33.895422],[-96.59217,33.895513],[-96.597348,33.875101],[-96.62315,33.841496],[-96.573151,33.819182],[-96.532651,33.823143],[-96.500984,33.772801],[-96.430216,33.778654],[-96.370847,33.717996],[-96.359374,33.689432],[-96.318759,33.696753],[-96.306078,33.744307],[-96.290359,33.770831],[-96.263797,33.767522],[-96.220522,33.74739],[-96.179846,33.759618],[-96.165199,33.78013],[-96.149227,33.837091],[-96.084626,33.846656],[-96.048834,33.836468],[-95.998351,33.85105],[-95.94603,33.859338],[-95.92478,33.884843],[-95.830406,33.834785],[-95.815723,33.859815],[-95.77024,33.845202],[-95.75142,33.860683],[-95.756612,33.892028],[-95.733183,33.896447],[-95.688876,33.888486],[-95.665478,33.909004],[-95.627318,33.907806],[-95.597522,33.942342],[-95.552799,33.924311],[-95.551216,33.889713],[-95.533798,33.881153],[-95.442746,33.866506],[-95.363209,33.866812],[-95.325535,33.885734],[-95.306397,33.874906],[-95.253814,33.893977],[-95.250885,33.936063],[-95.21668,33.962652],[-95.157145,33.936727],[-95.049025,33.86409],[-94.998019,33.860504],[-94.964401,33.837021],[-94.942217,33.80578],[-94.923289,33.808742],[-94.91143,33.778383],[-94.886934,33.769067],[-94.860687,33.741945],[-94.827948,33.740882],[-94.773126,33.727187],[-94.736814,33.692332],[-94.684796,33.684353],[-94.639198,33.663737],[-94.626844,33.682035],[-94.593294,33.665258],[-94.564076,33.626265],[-94.505655,33.620668],[-94.485878,33.637865],[-94.472906,34.087971],[-94.466046,34.350002],[-94.457209,34.646764],[-94.449013,34.902025],[-94.438963,35.184733],[-94.430662,35.392478],[-94.450445,35.502435],[-94.5105,35.862498],[-94.580391,36.264929],[-94.617919,36.499414],[-94.618471,36.816277],[-94.617964,36.998905],[-94.75258,36.99859],[-95.165191,36.999631],[-95.45793,36.999234],[-96.00081,36.99886],[-96.500289,36.998643],[-97.039692,36.99896],[-97.595028,36.998546],[-97.994149,36.998508],[-98.300465,36.997684],[-98.797019,36.999459],[-99.105701,36.999451],[-99.630997,36.99997],[-100.107891,37.002312],[-100.734513,36.999059],[-101.090254,36.997876],[-101.602243,36.995047],[-102.042089,36.993016],[-102.375461,36.99458],[-102.698142,36.995149],[-102.815074,36.999774],[-103.002199,37.000104],[-103.002434,36.500397]]]},"properties":{"name":"Oklahoma","ns_code":"01102857","geoid":"40","usps_abbrev":"OK","fips_code":"40"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-80.518991,40.638801],[-80.584002,40.615723],[-80.62645,40.620176],[-80.66354,40.590768],[-80.664372,40.570016],[-80.627507,40.535793],[-80.618003,40.502049],[-80.594664,40.471389],[-80.612876,40.429466],[-80.612325,40.402762],[-80.632196,40.393667],[-80.607587,40.36956],[-80.612795,40.347669],[-80.59989,40.317666],[-80.622508,40.261765],[-80.66154,40.229812],[-80.668083,40.199689],[-80.705246,40.15416],[-80.708937,40.101422],[-80.73919,40.075199],[-80.731024,40.044291],[-80.742114,40.00888],[-80.740139,39.970795],[-80.764242,39.946151],[-80.756113,39.913402],[-80.795598,39.919717],[-80.809565,39.905658],[-80.793131,39.863751],[-80.826964,39.841656],[-80.826079,39.798584],[-80.869933,39.763555],[-80.829723,39.714041],[-80.865805,39.686484],[-80.866646,39.652616],[-80.88036,39.620706],[-80.933292,39.614812],[-81.0239,39.552313],[-81.092434,39.496075],[-81.134434,39.445075],[-81.185145,39.431479],[-81.211654,39.392977],[-81.26842,39.386318],[-81.344927,39.346794],[-81.38456,39.343449],[-81.406689,39.38809],[-81.456143,39.409274],[-81.557547,39.338774],[-81.565247,39.276175],[-81.677595,39.274171],[-81.69662,39.256139],[-81.691339,39.227947],[-81.725622,39.215905],[-81.756282,39.176993],[-81.742353,39.111277],[-81.754154,39.088377],[-81.812354,39.061279],[-81.764253,39.015279],[-81.78182,38.964935],[-81.756131,38.933546],[-81.785647,38.926192],[-81.814235,38.946168],[-81.844486,38.928746],[-81.848653,38.901407],[-81.890899,38.873919],[-81.92667,38.901311],[-81.900595,38.937671],[-81.933186,38.98766],[-81.981159,38.994351],[-82.00599,39.029387],[-82.037749,39.023865],[-82.052063,38.993978],[-82.090165,38.975278],[-82.129166,38.908179],[-82.143167,38.898079],[-82.144167,38.84188],[-82.189293,38.815768],[-82.221566,38.787187],[-82.199999,38.759057],[-82.182467,38.708782],[-82.190867,38.680383],[-82.171966,38.625384],[-82.181167,38.599784],[-82.221468,38.591284],[-82.27147,38.595383],[-82.293471,38.575383],[-82.303663,38.499124],[-82.323999,38.449268],[-82.389746,38.434355],[-82.404882,38.439347],[-82.53769,38.404157],[-82.571613,38.405138],[-82.59348,38.421821],[-82.598121,38.345933],[-82.57672,38.328515],[-82.582655,38.298365],[-82.574518,38.264505],[-82.598295,38.217361],[-82.611601,38.171339],[-82.644443,38.166561],[-82.634702,38.136941],[-82.585342,38.106634],[-82.583357,38.090032],[-82.54924,38.067952],[-82.518956,38.002153],[-82.488655,37.998912],[-82.468851,37.97323],[-82.502198,37.933052],[-82.475056,37.910859],[-82.420484,37.885446],[-82.412119,37.843891],[-82.376169,37.80203],[-82.340596,37.786028],[-82.321174,37.756087],[-82.319566,37.734238],[-82.295881,37.686736],[-82.258068,37.656883],[-82.226156,37.652913],[-82.2145,37.6254],[-82.181691,37.627147],[-82.156297,37.592365],[-82.132284,37.593327],[-82.117304,37.559226],[-82.075651,37.555915],[-82.056353,37.536804],[-81.968012,37.538035],[-81.939989,37.512591],[-81.996578,37.476705],[-81.99227,37.460916],[-81.945765,37.440214],[-81.928154,37.4145],[-81.93587,37.382856],[-81.928463,37.360871],[-81.897936,37.33367],[-81.874059,37.327674],[-81.853553,37.287706],[-81.825851,37.279311],[-81.789294,37.284416],[-81.746039,37.263398],[-81.740124,37.237752],[-81.678221,37.20154],[-81.560631,37.206663],[-81.437158,37.274065],[-81.416663,37.273214],[-81.394287,37.316411],[-81.362156,37.337687],[-81.320105,37.299323],[-81.225104,37.234874],[-81.167029,37.262881],[-81.104147,37.280605],[-80.987319,37.301359],[-80.951018,37.29497],[-80.89805,37.316779],[-80.849451,37.346909],[-80.883247,37.383933],[-80.863003,37.411514],[-80.837678,37.425658],[-80.784188,37.394587],[-80.770082,37.372363],[-80.705203,37.394618],[-80.645893,37.422147],[-80.552036,37.473563],[-80.511391,37.481672],[-80.492981,37.457749],[-80.49486,37.435072],[-80.475601,37.422949],[-80.425629,37.449885],[-80.299789,37.508271],[-80.31237,37.546225],[-80.328504,37.564315],[-80.258919,37.595499],[-80.220984,37.627767],[-80.267504,37.646156],[-80.296078,37.691731],[-80.258143,37.720612],[-80.262765,37.738336],[-80.248389,37.76825],[-80.206482,37.81597],[-80.162202,37.875122],[-80.140609,37.883932],[-80.069431,37.945463],[-80.008888,37.99083],[-79.98029,38.027596],[-79.953511,38.08148],[-79.92633,38.107147],[-79.929031,38.139771],[-79.897335,38.193381],[-79.850326,38.233324],[-79.788945,38.268703],[-79.809934,38.304681],[-79.742771,38.353367],[-79.706634,38.41573],[-79.689667,38.431462],[-79.699473,38.474527],[-79.680074,38.510617],[-79.662875,38.570416],[-79.649075,38.591515],[-79.53687,38.550917],[-79.521469,38.533918],[-79.476638,38.457228],[-79.312276,38.411876],[-79.279692,38.424211],[-79.254482,38.45593],[-79.210591,38.492913],[-79.205859,38.524521],[-79.158257,38.593119],[-79.131056,38.653218],[-79.092655,38.660417],[-79.092955,38.702002],[-79.047349,38.79181],[-78.993761,38.850021],[-78.869276,38.762991],[-78.78803,38.885123],[-78.759085,38.900529],[-78.739147,38.927134],[-78.719914,38.906076],[-78.680456,38.925313],[-78.629553,38.980866],[-78.601655,38.964603],[-78.550467,39.018065],[-78.571901,39.031995],[-78.479597,39.109505],[-78.459311,39.114273],[-78.427294,39.152726],[-78.403907,39.167738],[-78.438695,39.198093],[-78.399669,39.243874],[-78.419422,39.257476],[-78.360571,39.317597],[-78.340415,39.353628],[-78.366867,39.35929],[-78.343214,39.388807],[-78.359918,39.409028],[-78.346718,39.427618],[-78.347087,39.466012],[-78.262815,39.41434],[-78.158193,39.343391],[-77.828806,39.132773],[-77.798157,39.200703],[-77.771365,39.236493],[-77.747587,39.294834],[-77.719519,39.321314],[-77.755728,39.333938],[-77.752987,39.379023],[-77.735869,39.391172],[-77.753728,39.423908],[-77.786332,39.428876],[-77.798396,39.456328],[-77.797252,39.489465],[-77.827301,39.493075],[-77.861176,39.514293],[-77.874231,39.564072],[-77.835676,39.567156],[-77.83777,39.605895],[-77.884519,39.615811],[-77.889135,39.597453],[-77.958716,39.608862],[-78.006719,39.601483],[-78.037405,39.637044],[-78.104433,39.68144],[-78.171549,39.695643],[-78.254252,39.639976],[-78.266648,39.618951],[-78.355323,39.640663],[-78.372013,39.611699],[-78.42478,39.624541],[-78.39704,39.590225],[-78.407865,39.578629],[-78.445456,39.591446],[-78.449874,39.570619],[-78.417295,39.549603],[-78.468923,39.516483],[-78.527333,39.524801],[-78.566115,39.519371],[-78.61991,39.539236],[-78.654697,39.534605],[-78.72371,39.563493],[-78.795268,39.6107],[-78.825968,39.588183],[-78.837596,39.56714],[-78.91672,39.48632],[-78.934298,39.486284],[-78.957301,39.440095],[-79.054694,39.473101],[-79.09113,39.47252],[-79.102816,39.450482],[-79.214443,39.363405],[-79.256882,39.355459],[-79.253878,39.3371],[-79.347416,39.291396],[-79.420836,39.238453],[-79.42423,39.226842],[-79.469793,39.203734],[-79.486875,39.205896],[-79.482366,39.531689],[-79.478866,39.531689],[-79.476662,39.721078],[-79.940671,39.720671],[-80.519342,39.721403],[-80.518891,39.890964],[-80.518975,40.349789],[-80.518991,40.638801]]]},"properties":{"name":"West Virginia","ns_code":"01779805","geoid":"54","usps_abbrev":"WV","fips_code":"54"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-87.019935,42.493498],[-87.125042,42.097098],[-87.207774,41.760956],[-86.87503,41.760335],[-86.443566,41.759553],[-86.108465,41.760697],[-85.750291,41.758969],[-85.308274,41.759947],[-84.980969,41.759491],[-84.80588,41.760171],[-84.805972,41.696118],[-84.475933,41.703813],[-84.192317,41.71101],[-83.709474,41.72524],[-83.41585,41.733794],[-83.11246,41.95941],[-83.14945,42.040264],[-83.119228,42.125263],[-83.134384,42.174621],[-83.126361,42.238412],[-83.099977,42.286698],[-83.063637,42.316857],[-82.989197,42.332481],[-82.945485,42.347396],[-82.83025,42.373492],[-82.668064,42.533112],[-82.64307,42.554321],[-82.606967,42.548282],[-82.524833,42.605976],[-82.510039,42.636793],[-82.510851,42.664992],[-82.467667,42.761906],[-82.482574,42.808644],[-82.468144,42.859423],[-82.469901,42.886265],[-82.456249,42.925177],[-82.413474,42.976887],[-82.424916,42.993055],[-82.356242,43.125029],[-82.295101,43.250028],[-82.122971,43.590827],[-82.158001,43.750023],[-82.249914,44.165143],[-82.356455,44.625015],[-82.374927,44.716437],[-82.44222,45.000018],[-82.52064,45.335902],[-82.74995,45.442221],[-82.874956,45.496723],[-82.999963,45.556378],[-83.48397,45.771937],[-83.636867,45.773944],[-83.547626,45.87502],[-83.433558,45.998895],[-83.571467,46.105998],[-83.654647,46.122055],[-83.759529,46.103173],[-83.826243,46.119288],[-83.903737,46.060819],[-83.955424,46.057188],[-83.976134,46.102554],[-84.005873,46.118469],[-84.005685,46.149551],[-84.077027,46.187558],[-84.108089,46.241238],[-84.11963,46.315013],[-84.106247,46.321963],[-84.138906,46.372221],[-84.146172,46.41852],[-84.111225,46.504119],[-84.128925,46.530119],[-84.177428,46.52692],[-84.226131,46.53392],[-84.25443,46.500821],[-84.293016,46.492803],[-84.341427,46.507689],[-84.420274,46.501077],[-84.445149,46.489016],[-84.475594,46.452864],[-84.556976,46.46065],[-84.762957,46.634324],[-84.859335,46.888843],[-85.125524,47.000018],[-85.250111,47.05654],[-85.500131,47.158284],[-85.750143,47.261387],[-85.875144,47.316261],[-86.125142,47.416744],[-86.125141,47.423468],[-86.312774,47.49994],[-86.50013,47.569523],[-86.631321,47.62492],[-86.949226,47.749905],[-87.0631,47.799991],[-87.250103,47.870477],[-87.500095,47.968114],[-87.625091,48.019019],[-87.875082,48.114726],[-88.000078,48.155883],[-88.000077,48.16405],[-88.369862,48.306063],[-88.677442,48.245397],[-88.9712,48.12488],[-89.33755,47.974261],[-89.483385,48.013716],[-89.625167,47.799549],[-89.820034,47.49991],[-89.957102,47.291103],[-90.00014,47.214969],[-90.125164,47.020679],[-90.418392,46.566099],[-90.395069,46.533768],[-90.350684,46.540325],[-90.310839,46.536289],[-90.263139,46.502668],[-90.216172,46.501272],[-90.158345,46.409696],[-90.118822,46.359531],[-90.120572,46.337039],[-89.918893,46.29776],[-89.463498,46.210062],[-89.09164,46.138447],[-88.851133,46.040444],[-88.782073,46.016185],[-88.739671,46.027423],[-88.678868,46.013595],[-88.658654,45.98929],[-88.616471,45.987732],[-88.565127,46.015729],[-88.50748,46.018516],[-88.49798,45.995794],[-88.464731,46.000738],[-88.423493,45.982072],[-88.380891,45.991813],[-88.301378,45.956459],[-88.25498,45.963512],[-88.230193,45.947251],[-88.180498,45.948287],[-88.126654,45.921791],[-88.102461,45.921546],[-88.101757,45.883192],[-88.070483,45.874329],[-88.132456,45.824156],[-88.094754,45.785755],[-88.05064,45.780999],[-87.99454,45.795637],[-87.963452,45.75822],[-87.879812,45.754843],[-87.839402,45.717814],[-87.812338,45.711303],[-87.781007,45.673934],[-87.82271,45.6627],[-87.774682,45.602024],[-87.808366,45.544662],[-87.792769,45.499967],[-87.812884,45.464329],[-87.861697,45.434473],[-87.849668,45.409518],[-87.884855,45.362792],[-87.850418,45.347492],[-87.79039,45.353445],[-87.754104,45.349442],[-87.693956,45.389893],[-87.658175,45.369476],[-87.647768,45.340563],[-87.687729,45.297492],[-87.72796,45.207956],[-87.735282,45.176565],[-87.6839,45.144135],[-87.661211,45.108279],[-87.44251,45.076434],[-87.405694,45.201969],[-87.315422,45.240657],[-87.17117,45.35254],[-87.101133,45.44423],[-86.754236,45.44361],[-86.282304,45.249983],[-86.2501,45.235735],[-86.433128,45.124991],[-86.49993,45.0808],[-86.686288,44.881002],[-86.855184,44.500339],[-86.847694,44.500339],[-87.00008,44.154821],[-87.013234,44.131905],[-87.048847,44],[-87.114102,43.734111],[-87.125079,43.670445],[-87.147166,43.379859],[-87.108397,43.12501],[-87.058716,42.765202],[-87.019935,42.493498]]]},"properties":{"name":"Michigan","ns_code":"01779789","geoid":"26","usps_abbrev":"MI","fips_code":"26"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-109.050076,41.000659],[-109.048044,40.619241],[-109.050946,40.444368],[-109.05082,40.231093],[-109.050613,39.875055],[-109.051263,39.624974],[-109.050765,39.366677],[-109.051516,39.124982],[-109.054189,38.874984],[-109.059538,38.719986],[-109.060062,38.275489],[-109.041762,38.16469],[-109.042816,37.962359],[-109.041058,37.907236],[-109.04192,37.530525],[-109.04581,37.374993],[-109.045223,36.999084],[-108.875317,36.998839],[-108.249358,36.999015],[-107.729194,37.000002],[-107.464127,37.000004],[-107.10724,37.000008],[-106.877293,37.000141],[-106.869798,36.992424],[-106.591178,36.992923],[-106.201469,36.994122],[-105.66472,36.995874],[-105.222398,36.995166],[-105.029226,36.992727],[-104.644997,36.993379],[-104.338833,36.993535],[-103.817803,36.997339],[-103.499968,36.999185],[-103.002199,37.000104],[-102.815074,36.999774],[-102.698142,36.995149],[-102.375461,36.99458],[-102.042089,36.993016],[-102.04182,37.410149],[-102.041626,37.696699],[-102.044515,37.984575],[-102.044946,38.384358],[-102.045075,38.669561],[-102.046046,38.981776],[-102.049052,39.373991],[-102.050952,39.749993],[-102.051744,40.003078],[-102.051554,40.500023],[-102.051417,40.742793],[-102.051717,41.002359],[-102.556721,41.0022],[-102.827237,41.002143],[-103.365314,41.001846],[-103.669054,41.001442],[-104.053249,41.001406],[-104.625519,41.001428],[-104.855273,40.998048],[-105.341415,40.997972],[-105.726441,40.996836],[-106.061181,40.996999],[-106.314218,40.998923],[-106.439563,41.001978],[-106.625592,41.00211],[-107.003119,41.003421],[-107.241194,41.002804],[-107.750627,41.001971],[-108.046539,41.002064],[-108.181227,41.000455],[-108.526029,40.999592],[-109.050076,41.000659]]]},"properties":{"name":"Colorado","ns_code":"01779779","geoid":"08","usps_abbrev":"CO","fips_code":"08"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-74.694914,41.357423],[-74.755894,41.34528],[-74.773225,41.324513],[-74.830057,41.2872],[-74.857152,41.248975],[-74.859323,41.220507],[-74.882139,41.180836],[-74.923169,41.138146],[-74.982212,41.108245],[-74.98259,41.079172],[-75.012873,41.066516],[-75.025777,41.039806],[-75.088596,41.015024],[-75.130575,40.991093],[-75.117767,40.953013],[-75.053664,40.87366],[-75.064328,40.848338],[-75.108505,40.791094],[-75.139106,40.773606],[-75.171587,40.777745],[-75.196535,40.751631],[-75.182804,40.73365],[-75.203921,40.691498],[-75.178019,40.671763],[-75.200452,40.649219],[-75.201348,40.614628],[-75.172877,40.564423],[-75.134995,40.575662],[-75.099827,40.567398],[-75.0681,40.541488],[-75.062761,40.480026],[-75.070608,40.456196],[-75.060917,40.421737],[-75.031778,40.404813],[-74.99586,40.410384],[-74.967499,40.398813],[-74.939711,40.338006],[-74.868208,40.295206],[-74.842308,40.250508],[-74.770406,40.214508],[-74.754305,40.185209],[-74.722325,40.160727],[-74.724369,40.146412],[-74.788287,40.120579],[-74.826226,40.124066],[-74.859721,40.085311],[-74.935042,40.067836],[-75.013237,40.020303],[-75.04709,40.009941],[-75.075605,39.978041],[-75.119491,39.965372],[-75.135239,39.950677],[-75.128253,39.913164],[-75.137296,39.889966],[-75.192738,39.879006],[-75.221371,39.861543],[-75.272202,39.849076],[-75.330432,39.849013],[-75.415062,39.801919],[-75.45944,39.765811],[-75.475524,39.733033],[-75.50638,39.697385],[-75.515075,39.666911],[-75.559737,39.630452],[-75.553491,39.601856],[-75.51277,39.57829],[-75.533412,39.542044],[-75.527861,39.498139],[-75.55909,39.495806],[-75.560538,39.455645],[-75.444751,39.355089],[-75.321021,39.251379],[-75.249017,39.158945],[-75.191671,39.079],[-75.168462,39.056179],[-75.015123,38.788657],[-74.910968,38.875112],[-74.815052,38.901819],[-74.773938,38.942794],[-74.728402,38.974249],[-74.715571,39.009216],[-74.682193,39.049824],[-74.642169,39.084574],[-74.644279,39.114824],[-74.555609,39.219755],[-74.461615,39.301023],[-74.392196,39.312286],[-74.362513,39.325781],[-74.265918,39.422415],[-74.249585,39.4526],[-74.183189,39.532994],[-74.096531,39.649949],[-74.038158,39.75012],[-74.019899,39.875119],[-73.999577,39.976798],[-73.966265,40.108597],[-73.898208,40.274353],[-73.887082,40.345009],[-73.886652,40.489794],[-73.949912,40.52554],[-74.228153,40.477399],[-74.25909,40.497207],[-74.250609,40.541851],[-74.218398,40.556996],[-74.19952,40.597539],[-74.202247,40.630903],[-74.18139,40.646475],[-74.143255,40.642149],[-74.055739,40.65176],[-74.026284,40.699902],[-74.013784,40.756601],[-73.963182,40.8269],[-73.929821,40.888682],[-73.896479,40.981701],[-73.902679,40.997307],[-74.18239,41.121595],[-74.301994,41.172594],[-74.457584,41.248225],[-74.694914,41.357423]]]},"properties":{"name":"New Jersey","ns_code":"01779795","geoid":"34","usps_abbrev":"NJ","fips_code":"34"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-75.788596,39.722199],[-75.788521,39.648133],[-75.765719,39.366758],[-75.746992,39.133744],[-75.715684,38.740062],[-75.69367,38.46008],[-75.416925,38.452538],[-75.232115,38.451222],[-74.986282,38.451632],[-74.985171,38.528171],[-74.993519,38.612501],[-75.001968,38.631683],[-75.003025,38.685964],[-75.014212,38.745036],[-75.015123,38.788657],[-75.168462,39.056179],[-75.191671,39.079],[-75.249017,39.158945],[-75.321021,39.251379],[-75.444751,39.355089],[-75.560538,39.455645],[-75.55909,39.495806],[-75.527861,39.498139],[-75.533412,39.542044],[-75.51277,39.57829],[-75.553491,39.601856],[-75.559737,39.630452],[-75.515075,39.666911],[-75.50638,39.697385],[-75.475524,39.733033],[-75.45944,39.765811],[-75.415062,39.801919],[-75.481039,39.829319],[-75.564047,39.839488],[-75.639703,39.828955],[-75.680468,39.813939],[-75.719502,39.790365],[-75.754056,39.756178],[-75.773786,39.7222],[-75.788596,39.722199]]]},"properties":{"name":"Delaware","ns_code":"01779781","geoid":"10","usps_abbrev":"DE","fips_code":"10"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-116.049193,49.000912],[-116.049273,48.714641],[-116.049976,48.237463],[-116.048464,47.976802],[-116.030587,47.972247],[-115.993678,47.926183],[-115.965173,47.910654],[-115.901401,47.843097],[-115.881523,47.849672],[-115.852291,47.827991],[-115.846949,47.784286],[-115.824575,47.752137],[-115.797299,47.75752],[-115.783504,47.729305],[-115.722629,47.695162],[-115.73627,47.654762],[-115.694284,47.62346],[-115.692138,47.596425],[-115.755295,47.551438],[-115.750993,47.541594],[-115.649524,47.477752],[-115.646384,47.456695],[-115.69293,47.457237],[-115.749714,47.440362],[-115.657681,47.40065],[-115.643818,47.377537],[-115.617247,47.38252],[-115.551374,47.350042],[-115.52605,47.299252],[-115.426636,47.280158],[-115.409306,47.263988],[-115.323575,47.256529],[-115.294785,47.220914],[-115.300504,47.188139],[-115.261885,47.181742],[-115.245859,47.151964],[-115.191803,47.132048],[-115.107133,47.04904],[-115.087807,47.045518],[-115.047857,46.969532],[-115.00091,46.967703],[-114.959625,46.929493],[-114.926985,46.919586],[-114.936822,46.89716],[-114.920459,46.827697],[-114.856874,46.801633],[-114.830671,46.783605],[-114.787913,46.780818],[-114.765059,46.758081],[-114.788656,46.714033],[-114.75112,46.697385],[-114.717645,46.713994],[-114.696656,46.740572],[-114.646665,46.730802],[-114.620859,46.707415],[-114.641471,46.679515],[-114.635868,46.65951],[-114.593914,46.633046],[-114.546333,46.64498],[-114.466902,46.631695],[-114.453601,46.648967],[-114.359108,46.670061],[-114.320665,46.646963],[-114.329765,46.575665],[-114.347946,46.551642],[-114.348521,46.510241],[-114.403019,46.498675],[-114.379338,46.460166],[-114.384756,46.411784],[-114.422458,46.387097],[-114.410083,46.365625],[-114.413758,46.335945],[-114.433478,46.305502],[-114.427309,46.283624],[-114.47077,46.264517],[-114.451795,46.239666],[-114.44521,46.167885],[-114.477345,46.160629],[-114.515703,46.165687],[-114.5213,46.125287],[-114.474777,46.113191],[-114.459526,46.093907],[-114.466937,46.065689],[-114.493475,46.052402],[-114.457101,45.997296],[-114.414118,45.979278],[-114.402291,45.957799],[-114.431159,45.935737],[-114.395059,45.901458],[-114.406307,45.869145],[-114.509303,45.845531],[-114.514586,45.82685],[-114.566172,45.773864],[-114.547896,45.743606],[-114.504307,45.72173],[-114.495421,45.703321],[-114.507754,45.657626],[-114.563305,45.631612],[-114.538467,45.605892],[-114.558253,45.585104],[-114.549508,45.56059],[-114.517761,45.568129],[-114.43012,45.529309],[-114.429048,45.516624],[-114.36562,45.490416],[-114.345019,45.459916],[-114.279217,45.480616],[-114.248988,45.520636],[-114.248532,45.545419],[-114.192802,45.536596],[-114.180043,45.551432],[-114.135249,45.557465],[-114.122322,45.58426],[-114.086584,45.59118],[-114.067619,45.627706],[-114.013786,45.658238],[-114.019315,45.692937],[-113.973624,45.702809],[-113.933957,45.693061],[-113.931494,45.672965],[-113.897663,45.646706],[-113.904571,45.624767],[-113.862169,45.623784],[-113.806729,45.602146],[-113.797009,45.582017],[-113.821437,45.565973],[-113.83388,45.520632],[-113.772791,45.514411],[-113.760014,45.480138],[-113.775924,45.470998],[-113.77407,45.406659],[-113.734402,45.392353],[-113.738729,45.329741],[-113.67886,45.276092],[-113.69276,45.264299],[-113.650064,45.23471],[-113.636889,45.212983],[-113.59252,45.184689],[-113.58968,45.15536],[-113.556314,45.115243],[-113.513342,45.115225],[-113.520134,45.093033],[-113.45197,45.059247],[-113.443793,44.959894],[-113.494444,44.948597],[-113.49167,44.924408],[-113.461084,44.886742],[-113.455071,44.865424],[-113.422376,44.842595],[-113.356062,44.819798],[-113.340471,44.784682],[-113.247166,44.82295],[-113.193117,44.801653],[-113.179366,44.787149],[-113.131151,44.772392],[-113.137704,44.760109],[-113.102129,44.729032],[-113.098119,44.697975],[-113.067762,44.679474],[-113.056772,44.618659],[-113.087851,44.599243],[-113.039836,44.566842],[-113.045502,44.543934],[-113.00703,44.525872],[-113.027148,44.495716],[-113.003544,44.450814],[-112.951146,44.416699],[-112.919625,44.409581],[-112.844859,44.358221],[-112.812735,44.377181],[-112.813272,44.398173],[-112.840278,44.424964],[-112.781294,44.484888],[-112.71793,44.504273],[-112.664485,44.48645],[-112.60293,44.490939],[-112.550557,44.484928],[-112.50031,44.463051],[-112.473207,44.480027],[-112.390543,44.450666],[-112.366437,44.467358],[-112.356688,44.492621],[-112.358917,44.528847],[-112.319198,44.53911],[-112.286187,44.568472],[-112.228894,44.564002],[-112.221698,44.543519],[-112.183945,44.533053],[-112.130952,44.537791],[-112.096299,44.523212],[-112.032707,44.546642],[-111.978786,44.53589],[-111.947941,44.556776],[-111.866126,44.562811],[-111.821488,44.509286],[-111.704218,44.560205],[-111.617695,44.551012],[-111.591768,44.561502],[-111.499991,44.54192],[-111.525764,44.604883],[-111.473633,44.664968],[-111.490008,44.699537],[-111.465497,44.713824],[-111.397766,44.72476],[-111.37476,44.750295],[-111.337113,44.733204],[-111.294843,44.70006],[-111.255082,44.651011],[-111.219236,44.622616],[-111.241502,44.614225],[-111.230351,44.579727],[-111.180773,44.569038],[-111.131379,44.499925],[-111.048974,44.474072],[-111.055208,44.624927],[-111.056889,44.866658],[-111.055199,45.001321],[-110.785008,45.002952],[-110.705272,44.992324],[-110.402927,44.99381],[-110.362698,45.000593],[-110.199503,44.996188],[-110.110103,45.003905],[-109.75073,45.001605],[-109.103373,45.005886],[-109.08137,44.99946],[-108.499092,44.9998],[-107.997369,45.001565],[-107.75065,45.000778],[-107.500025,45.001512],[-107.134179,45.000109],[-107.084938,44.996599],[-106.62561,44.994927],[-106.250717,44.993688],[-105.928183,44.993647],[-105.913382,45.000941],[-105.718212,45.000333],[-105.250545,45.000168],[-104.772765,44.999158],[-104.366692,44.998151],[-104.057697,44.99738],[-104.040131,45.011116],[-104.040188,45.374158],[-104.042596,45.749942],[-104.045441,45.94531],[-104.045235,46.125004],[-104.045045,46.509788],[-104.046067,46.838634],[-104.044777,47.125012],[-104.044406,47.459399],[-104.043273,47.750027],[-104.041443,47.863054],[-104.043865,47.968937],[-104.045937,48.249276],[-104.048275,48.706527],[-104.048736,48.999877],[-104.250498,48.999469],[-104.750522,48.998986],[-105.343466,48.999276],[-105.703623,48.999666],[-106.112108,48.999052],[-106.617539,48.999583],[-107.088925,49.000021],[-107.441017,48.999363],[-108.046984,48.999393],[-108.375681,48.99926],[-108.99236,48.999215],[-109.285975,49.000479],[-109.731522,48.999862],[-110.217815,48.99915],[-110.8749,48.998105],[-111.500812,48.996963],[-111.750648,48.997358],[-112.125884,48.998904],[-112.699455,48.998685],[-113.144004,48.998365],[-113.692982,48.997632],[-114.059188,48.998856],[-114.250971,49.000905],[-114.537821,49.000782],[-115.207912,48.999228],[-115.619839,49.000596],[-116.049193,49.000912]]]},"properties":{"name":"Montana","ns_code":"00767982","geoid":"30","usps_abbrev":"MT","fips_code":"30"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-116.915989,45.995413],[-116.942656,46.061],[-116.981747,46.092881],[-116.959548,46.099058],[-116.922648,46.160744],[-116.962966,46.19968],[-116.956031,46.225976],[-116.970298,46.261233],[-116.991134,46.276342],[-116.987939,46.298031],[-117.022293,46.31747],[-117.023844,46.335976],[-117.053953,46.344566],[-117.039813,46.425425],[-117.039498,46.931999],[-117.040019,47.259272],[-117.039921,47.492266],[-117.04247,47.839009],[-117.041107,48.124904],[-117.035086,48.38521],[-117.035425,48.499914],[-117.032107,48.874926],[-117.032351,48.999188],[-117.463929,49.000653],[-117.8761,49.000546],[-118.174832,49.000261],[-118.535931,49.000163],[-119.126155,49.000236],[-119.376171,49.000224],[-120.001199,48.999419],[-120.716604,49.000188],[-121.12624,49.001412],[-121.751252,48.997399],[-122.098357,49.002146],[-122.737962,49.002075],[-123.32242,49.001962],[-123.008472,48.831338],[-123.008865,48.767302],[-123.274009,48.692969],[-123.251303,48.64152],[-123.219078,48.548822],[-123.160797,48.453899],[-123.115529,48.422974],[-123.249034,48.28431],[-123.542428,48.224803],[-123.684805,48.240845],[-124.01381,48.297521],[-124.376335,48.398442],[-124.74974,48.499783],[-124.772085,48.486117],[-124.746194,48.445448],[-124.807732,48.417554],[-124.816993,48.385475],[-124.796636,48.344126],[-124.770442,48.323537],[-124.761387,48.295688],[-124.786406,48.272291],[-124.780504,48.22858],[-124.827681,48.21383],[-124.848537,48.174005],[-124.824046,48.129308],[-124.785187,48.087115],[-124.801155,48.037809],[-124.802764,47.999789],[-124.791162,47.961705],[-124.758185,47.943978],[-124.753795,47.910523],[-124.720862,47.888311],[-124.687601,47.844037],[-124.63969,47.825176],[-124.628538,47.804861],[-124.596179,47.786023],[-124.573581,47.752365],[-124.534783,47.718756],[-124.558225,47.692423],[-124.564516,47.66114],[-124.547767,47.638349],[-124.493366,47.6211],[-124.458973,47.62672],[-124.439265,47.575511],[-124.417057,47.481538],[-124.42056,47.455972],[-124.406542,47.428021],[-124.421728,47.393293],[-124.391354,47.329766],[-124.359644,47.309336],[-124.351299,47.27639],[-124.306367,47.248083],[-124.251291,47.096654],[-124.241539,46.999808],[-124.249705,46.956288],[-124.234393,46.891188],[-124.209469,46.874813],[-124.194581,46.844092],[-124.173221,46.755617],[-124.141277,46.660313],[-124.133291,46.603129],[-124.130868,46.371597],[-124.162552,46.271727],[-124.159546,46.261132],[-124.035951,46.264183],[-123.976275,46.269907],[-123.930477,46.238805],[-123.871869,46.234949],[-123.778124,46.25425],[-123.741449,46.269155],[-123.687602,46.250214],[-123.648775,46.258803],[-123.586954,46.25589],[-123.479644,46.269131],[-123.427629,46.229348],[-123.430987,46.181571],[-123.371433,46.146372],[-123.280166,46.144843],[-123.166416,46.188979],[-123.115904,46.185268],[-123.004233,46.133823],[-122.962681,46.104817],[-122.904119,46.083734],[-122.878092,46.031281],[-122.856158,46.014469],[-122.837638,45.980821],[-122.813999,45.960983],[-122.8115,45.912724],[-122.785026,45.867699],[-122.795605,45.81],[-122.769532,45.780583],[-122.760108,45.734413],[-122.774511,45.680437],[-122.76381,45.657138],[-122.675001,45.618025],[-122.545876,45.596192],[-122.438674,45.563585],[-122.380302,45.575941],[-122.352802,45.569441],[-122.331502,45.548241],[-122.266701,45.543841],[-122.2017,45.564141],[-122.183906,45.577563],[-122.100197,45.584215],[-122.044374,45.609516],[-122.00369,45.61593],[-121.908267,45.654399],[-121.867167,45.693277],[-121.811304,45.706761],[-121.735104,45.694039],[-121.668362,45.705082],[-121.631167,45.704657],[-121.533106,45.726541],[-121.499153,45.720846],[-121.462849,45.701367],[-121.401739,45.692887],[-121.33777,45.704949],[-121.287323,45.687019],[-121.215779,45.671238],[-121.183841,45.606441],[-121.131954,45.609757],[-121.084933,45.647893],[-120.943977,45.656445],[-120.895575,45.642945],[-120.855674,45.671545],[-120.788872,45.686246],[-120.68937,45.715847],[-120.634968,45.745847],[-120.559465,45.738348],[-120.505863,45.700048],[-120.482362,45.694449],[-120.40396,45.699249],[-120.284356,45.72105],[-120.210754,45.725951],[-120.170453,45.761951],[-120.141352,45.773152],[-120.07015,45.785152],[-119.965744,45.824365],[-119.907461,45.828135],[-119.802655,45.84753],[-119.772927,45.845578],[-119.669877,45.856867],[-119.623393,45.905639],[-119.571584,45.925456],[-119.524632,45.908605],[-119.487829,45.906307],[-119.450256,45.917354],[-119.364396,45.921605],[-119.322509,45.933183],[-119.25715,45.939926],[-119.19553,45.92787],[-119.12612,45.932859],[-119.008558,45.97927],[-118.987129,45.999855],[-118.767877,46.001017],[-118.226074,46.000358],[-117.717774,45.999869],[-117.479654,45.997774],[-117.337668,45.998662],[-116.915989,45.995413]]]},"properties":{"name":"Washington","ns_code":"01779804","geoid":"53","usps_abbrev":"WA","fips_code":"53"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-71.799242,42.008065],[-71.800649,42.023569],[-72.073426,42.027562],[-72.143104,42.030586],[-72.52813,42.034295],[-72.573235,42.03014],[-72.700036,42.036895],[-72.751765,42.029792],[-72.766738,42.002995],[-72.816741,41.997595],[-72.813541,42.036494],[-73.030063,42.039197],[-73.432812,42.050587],[-73.487314,42.049638],[-73.489615,42.000092],[-73.510961,41.758749],[-73.521041,41.619773],[-73.550962,41.295421],[-73.482695,41.212772],[-73.727775,41.100696],[-73.655241,41.011852],[-73.656771,40.984509],[-73.612885,40.950943],[-73.249557,41.025866],[-72.999547,41.087108],[-72.527901,41.177774],[-72.081775,41.26224],[-72.019214,41.290594],[-71.929451,41.310387],[-71.907258,41.304483],[-71.892005,41.330275],[-71.857458,41.320789],[-71.829365,41.342432],[-71.842029,41.410706],[-71.797747,41.416834],[-71.787247,41.656065],[-71.797883,41.931011],[-71.799242,42.008065]]]},"properties":{"name":"Connecticut","ns_code":"01779780","geoid":"09","usps_abbrev":"CT","fips_code":"09"}},{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-119.000932,33.535895],[-119.076497,33.535148],[-119.108718,33.519264],[-119.108879,33.451151],[-119.071893,33.413799],[-119.027044,33.412874],[-118.980512,33.428593],[-118.962728,33.473301],[-118.966018,33.500023],[-119.000932,33.535895]]],[[[-123.00111,37.772053],[-123.033841,37.778375],[-123.070494,37.81383],[-123.118289,37.823058],[-123.169107,37.792365],[-123.172926,37.7636],[-123.132597,37.719393],[-123.09285,37.713688],[-123.068589,37.673041],[-123.027153,37.645221],[-123.000912,37.63993],[-122.949068,37.663377],[-122.93571,37.697618],[-122.949985,37.732187],[-123.00111,37.772053]]],[[[-119.623559,33.230407],[-119.605282,33.206919],[-119.574192,33.186484],[-119.51025,33.167417],[-119.433717,33.166987],[-119.375937,33.192186],[-119.360926,33.24206],[-119.37973,33.267632],[-119.426177,33.298941],[-119.525313,33.334862],[-119.59252,33.325823],[-119.625944,33.305036],[-119.636302,33.27304],[-119.623559,33.230407]]],[[[-118.328898,32.875037],[-118.448863,32.96175],[-118.495582,33.026336],[-118.542103,33.073788],[-118.578337,33.086243],[-118.641301,33.081882],[-118.675605,33.049349],[-118.670173,33.000034],[-118.644732,33.000033],[-118.635522,32.9656],[-118.608802,32.92769],[-118.59693,32.890466],[-118.538197,32.81277],[-118.50765,32.796877],[-118.473906,32.766824],[-118.436538,32.75004],[-118.408322,32.751914],[-118.378377,32.770232],[-118.323819,32.773514],[-118.289905,32.81053],[-118.29725,32.845094],[-118.328898,32.875037]]],[[[-118.308676,33.416694],[-118.316351,33.434137],[-118.359393,33.464922],[-118.436835,33.489443],[-118.468961,33.512999],[-118.523236,33.530153],[-118.612158,33.53185],[-118.644058,33.521284],[-118.66371,33.500025],[-118.665919,33.467334],[-118.655057,33.44531],[-118.607228,33.398294],[-118.553376,33.380226],[-118.547476,33.34048],[-118.518037,33.29665],[-118.486688,33.276905],[-118.455072,33.269019],[-118.385589,33.265358],[-118.327993,33.248083],[-118.302837,33.251005],[-118.259178,33.272505],[-118.241051,33.313029],[-118.262748,33.37044],[-118.304102,33.403632],[-118.308676,33.416694]]],[[[-119.468064,34.063139],[-119.512106,34.09346],[-119.565522,34.108809],[-119.614268,34.099432],[-119.654931,34.071218],[-119.693007,34.094854],[-119.745222,34.110917],[-119.792601,34.106375],[-119.82922,34.118702],[-119.928795,34.129902],[-119.965471,34.11256],[-120.000963,34.076819],[-120.019503,34.087718],[-120.080285,34.086401],[-120.171128,34.073318],[-120.194114,34.058721],[-120.252846,34.058031],[-120.284651,34.09475],[-120.338562,34.121687],[-120.361978,34.14878],[-120.418787,34.160569],[-120.471654,34.134102],[-120.497378,34.149892],[-120.538118,34.150344],[-120.560998,34.140664],[-120.582264,34.107517],[-120.573808,34.075966],[-120.523387,34.051133],[-120.518784,34.01408],[-120.497726,33.991199],[-120.466777,33.976116],[-120.411766,33.977045],[-120.367073,33.961036],[-120.298973,33.968457],[-120.273096,33.929577],[-120.221128,33.884187],[-120.139927,33.844799],[-120.104088,33.842396],[-120.019339,33.870555],[-119.980842,33.892317],[-119.928799,33.905471],[-119.904762,33.939674],[-119.861952,33.910836],[-119.823208,33.89939],[-119.789372,33.910131],[-119.707491,33.910388],[-119.63673,33.938277],[-119.602085,33.936768],[-119.532825,33.949874],[-119.49229,33.983215],[-119.432961,33.955905],[-119.380456,33.953611],[-119.318443,33.974899],[-119.296238,33.99724],[-119.293112,34.020152],[-119.305153,34.047449],[-119.342462,34.068964],[-119.468064,34.063139]]],[[[-124.328835,41.998334],[-124.306995,41.992906],[-124.284769,41.956834],[-124.289939,41.920057],[-124.27612,41.903052],[-124.285031,41.859487],[-124.311936,41.858788],[-124.365199,41.886568],[-124.411317,41.882056],[-124.435015,41.856507],[-124.438909,41.824504],[-124.405715,41.783141],[-124.330609,41.733793],[-124.211706,41.681193],[-124.211419,41.641688],[-124.190113,41.60819],[-124.188336,41.573996],[-124.160493,41.543409],[-124.157943,41.518962],[-124.136497,41.464265],[-124.139973,41.381821],[-124.188604,41.389267],[-124.235174,41.363833],[-124.236177,41.317977],[-124.202385,41.294721],[-124.160704,41.289293],[-124.195532,41.184582],[-124.244308,41.158319],[-124.252474,41.134075],[-124.24743,41.092224],[-124.204984,41.013638],[-124.182694,41.001313],[-124.197619,40.950529],[-124.232622,40.869286],[-124.299333,40.768481],[-124.368878,40.669706],[-124.447677,40.529709],[-124.45256,40.493084],[-124.475894,40.459762],[-124.478625,40.422102],[-124.429462,40.364906],[-124.418542,40.318753],[-124.42915,40.266915],[-124.421287,40.237102],[-124.392777,40.209799],[-124.287833,40.137683],[-124.272099,40.13365],[-124.231204,40.093382],[-124.156646,40.065885],[-124.144099,40.052401],[-124.141086,40.010971],[-124.108581,39.978845],[-124.078596,39.972263],[-124.035355,39.931073],[-124.009637,39.893749],[-123.982946,39.876778],[-123.973477,39.853562],[-123.938591,39.814944],[-123.910529,39.799575],[-123.895741,39.711406],[-123.857183,39.674693],[-123.849387,39.57829],[-123.834649,39.549194],[-123.867826,39.508305],[-123.887402,39.453036],[-123.893085,39.337494],[-123.850092,39.231396],[-123.83888,39.183339],[-123.80921,39.141043],[-123.761965,39.041091],[-123.763148,39.00869],[-123.797217,38.989863],[-123.80986,38.961219],[-123.784676,38.893728],[-123.737921,38.857441],[-123.717807,38.827921],[-123.632611,38.758173],[-123.591962,38.740227],[-123.578005,38.717583],[-123.51058,38.68089],[-123.456159,38.614788],[-123.394157,38.553942],[-123.360929,38.510202],[-123.32381,38.498614],[-123.306742,38.478681],[-123.269188,38.457569],[-123.22022,38.441954],[-123.188465,38.40286],[-123.164757,38.388337],[-123.134312,38.345786],[-123.134523,38.296263],[-123.051963,38.215855],[-123.014817,38.149132],[-123.063797,38.036487],[-123.0812,38.018971],[-123.08388,37.983366],[-123.067965,37.958669],[-123.022507,37.942065],[-122.953224,37.941093],[-122.889291,37.974109],[-122.85046,37.945585],[-122.838896,37.918914],[-122.789027,37.893763],[-122.752466,37.857699],[-122.715845,37.845625],[-122.675654,37.848517],[-122.612285,37.815224],[-122.588174,37.789362],[-122.581281,37.760203],[-122.567497,37.639185],[-122.586454,37.592529],[-122.574963,37.49994],[-122.546996,37.457857],[-122.509889,37.441554],[-122.503543,37.411902],[-122.465869,37.34124],[-122.484046,37.249944],[-122.464117,37.177848],[-122.445632,37.150037],[-122.396916,37.109888],[-122.376086,37.065648],[-122.313899,37.054764],[-122.276375,37.024834],[-122.251082,36.985833],[-122.172024,36.942681],[-122.076399,36.910199],[-122.068317,36.874953],[-122.001124,36.647704],[-122.042748,36.596627],[-122.037459,36.560381],[-122.017455,36.537405],[-122.021998,36.508908],[-121.999472,36.466451],[-121.994104,36.435063],[-121.970391,36.383368],[-121.971877,36.357831],[-121.959053,36.287108],[-121.911267,36.248756],[-121.880193,36.210314],[-121.850153,36.19234],[-121.770693,36.162014],[-121.727812,36.129009],[-121.674359,36.064661],[-121.64818,35.998617],[-121.620365,35.969109],[-121.561461,35.943818],[-121.519192,35.8634],[-121.501047,35.842745],[-121.456097,35.817713],[-121.399754,35.765342],[-121.379327,35.726959],[-121.366362,35.680419],[-121.347721,35.664984],[-121.323512,35.624969],[-121.286036,35.608436],[-121.201555,35.58369],[-121.177756,35.561255],[-121.151056,35.516412],[-121.041635,35.41999],[-120.989632,35.411139],[-120.933292,35.392748],[-120.923435,35.348413],[-120.951278,35.29014],[-120.960247,35.243622],[-120.917792,35.187378],[-120.8473,35.137869],[-120.800411,35.116577],[-120.746308,35.109297],[-120.725503,35.113576],[-120.689606,35.098828],[-120.694715,35.028839],[-120.71483,34.962631],[-120.725745,34.9465],[-120.73382,34.896041],[-120.712967,34.862902],[-120.673281,34.838624],[-120.702093,34.748329],[-120.664691,34.696344],[-120.68648,34.645023],[-120.707183,34.616211],[-120.712757,34.568297],[-120.684529,34.527131],[-120.64236,34.503765],[-120.594334,34.504072],[-120.559439,34.488466],[-120.535664,34.452695],[-120.523646,34.419505],[-120.500999,34.403136],[-120.450998,34.391184],[-120.367335,34.408486],[-120.287125,34.417609],[-120.13512,34.422061],[-120.09067,34.409286],[-120.044814,34.412454],[-119.927899,34.374995],[-119.898502,34.360358],[-119.837921,34.354318],[-119.797067,34.365331],[-119.732023,34.339696],[-119.707593,34.337324],[-119.651357,34.366708],[-119.584795,34.36166],[-119.555829,34.345019],[-119.500953,34.326922],[-119.466995,34.29366],[-119.401994,34.272258],[-119.375935,34.24988],[-119.335926,34.237523],[-119.285743,34.140805],[-119.250942,34.106201],[-119.217993,34.062491],[-119.158963,34.040253],[-119.027407,34.014919],[-118.952426,33.992959],[-118.887301,33.987223],[-118.824893,33.949042],[-118.779039,33.954527],[-118.727459,33.980307],[-118.677017,33.979268],[-118.625916,33.987233],[-118.557356,33.987673],[-118.523447,33.953049],[-118.447254,33.84876],[-118.443968,33.839057],[-118.484483,33.803154],[-118.485577,33.753664],[-118.466962,33.725524],[-118.428637,33.701266],[-118.385931,33.686712],[-118.345415,33.663427],[-118.274239,33.663429],[-118.237008,33.690595],[-118.16583,33.691563],[-118.1259,33.697151],[-118.096473,33.653651],[-118.033611,33.609354],[-118.000893,33.593166],[-117.934046,33.549254],[-117.816356,33.490872],[-117.741409,33.410118],[-117.713571,33.408777],[-117.62588,33.342109],[-117.571531,33.312302],[-117.520999,33.268872],[-117.500875,33.242151],[-117.435563,33.177512],[-117.375872,33.075217],[-117.323279,32.903064],[-117.342,32.840354],[-117.3303,32.804817],[-117.320939,32.689847],[-117.309239,32.656401],[-117.276916,32.623474],[-117.251994,32.61486],[-117.223302,32.621238],[-117.204917,32.528832],[-117.126062,32.534156],[-116.794753,32.56246],[-116.499184,32.586812],[-116.04662,32.623353],[-115.801995,32.641633],[-115.513918,32.663591],[-115.250813,32.682309],[-114.719633,32.718763],[-114.689618,32.738171],[-114.615976,32.728489],[-114.581784,32.734946],[-114.564447,32.749554],[-114.526856,32.757094],[-114.531669,32.791185],[-114.510327,32.816488],[-114.468971,32.845155],[-114.462929,32.907944],[-114.480925,32.936276],[-114.467624,32.956663],[-114.490129,32.969884],[-114.506362,33.017403],[-114.52013,33.029984],[-114.578287,33.035375],[-114.618788,33.027202],[-114.639552,33.04529],[-114.670803,33.037983],[-114.68902,33.084035],[-114.707896,33.097431],[-114.67935,33.162433],[-114.674479,33.225504],[-114.689421,33.24525],[-114.677032,33.270169],[-114.723259,33.288079],[-114.731223,33.302433],[-114.700938,33.337014],[-114.699056,33.361148],[-114.720065,33.407891],[-114.62964,33.428137],[-114.622918,33.456561],[-114.589246,33.501813],[-114.560963,33.516739],[-114.558023,33.532589],[-114.524215,33.553068],[-114.540617,33.591412],[-114.522071,33.611277],[-114.533215,33.648443],[-114.523959,33.685879],[-114.496489,33.696901],[-114.512348,33.734214],[-114.507089,33.76793],[-114.52805,33.814963],[-114.529597,33.848063],[-114.503887,33.865754],[-114.534146,33.925187],[-114.522002,33.955623],[-114.499883,33.961789],[-114.46012,33.993888],[-114.438266,34.022609],[-114.434181,34.087379],[-114.415908,34.107636],[-114.366517,34.118577],[-114.324576,34.136759],[-114.286724,34.170715],[-114.254141,34.17383],[-114.164476,34.251667],[-114.13545,34.257886],[-114.138282,34.30323],[-114.176909,34.349306],[-114.226107,34.365916],[-114.262909,34.400373],[-114.291154,34.409784],[-114.301016,34.426807],[-114.339627,34.451435],[-114.371217,34.446992],[-114.386699,34.457911],[-114.380838,34.529724],[-114.405228,34.569637],[-114.435671,34.593841],[-114.442363,34.644153],[-114.47162,34.712966],[-114.516619,34.736745],[-114.552682,34.766871],[-114.592339,34.841153],[-114.628276,34.863596],[-114.629392,34.983171],[-114.633487,35.001857],[-114.994666,35.292511],[-115.100957,35.375681],[-115.25972,35.503541],[-115.646336,35.807735],[-115.918743,36.019936],[-116.250818,36.276939],[-116.380347,36.374961],[-116.488233,36.459097],[-116.750926,36.658377],[-117.000895,36.847694],[-117.373451,37.124932],[-117.500117,37.22038],[-117.712358,37.374931],[-117.875927,37.497267],[-118.372572,37.856012],[-118.714201,38.102105],[-118.771867,38.141871],[-119.097159,38.372851],[-119.461282,38.627533],[-119.626004,38.740941],[-120.001014,38.999574],[-120.006473,39.272878],[-120.006127,39.374106],[-120.00082,39.606828],[-120.001133,39.752229],[-119.997903,39.981636],[-119.995705,40.37583],[-119.995976,40.57055],[-119.998785,40.77385],[-119.999875,40.999894],[-119.99976,41.236061],[-119.998287,41.618818],[-119.999168,41.99454],[-120.291374,41.993004],[-120.647178,41.993084],[-121.035247,41.993324],[-121.126131,41.996009],[-121.340061,41.996361],[-121.573199,41.99851],[-121.846712,42.00307],[-122.000319,42.003967],[-122.162708,42.007746],[-122.378226,42.009517],[-122.634738,42.004854],[-122.893866,42.002669],[-123.045343,42.003075],[-123.145962,42.009242],[-123.347562,41.999108],[-123.434976,42.001637],[-123.624554,41.999837],[-123.657,41.995137],[-124.100376,41.996712],[-124.328835,41.998334]]]]},"properties":{"name":"California","ns_code":"01779778","geoid":"06","usps_abbrev":"CA","fips_code":"06"}},{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-89.485427,36.497491],[-89.466646,36.527041],[-89.47993,36.569087],[-89.530638,36.58171],[-89.570726,36.557656],[-89.560412,36.524406],[-89.539232,36.497934],[-89.485427,36.497491]]],[[[-81.968012,37.538035],[-82.056353,37.536804],[-82.075651,37.555915],[-82.117304,37.559226],[-82.132284,37.593327],[-82.156297,37.592365],[-82.181691,37.627147],[-82.2145,37.6254],[-82.226156,37.652913],[-82.258068,37.656883],[-82.295881,37.686736],[-82.319566,37.734238],[-82.321174,37.756087],[-82.340596,37.786028],[-82.376169,37.80203],[-82.412119,37.843891],[-82.420484,37.885446],[-82.475056,37.910859],[-82.502198,37.933052],[-82.468851,37.97323],[-82.488655,37.998912],[-82.518956,38.002153],[-82.54924,38.067952],[-82.583357,38.090032],[-82.585342,38.106634],[-82.634702,38.136941],[-82.644443,38.166561],[-82.611601,38.171339],[-82.598295,38.217361],[-82.574518,38.264505],[-82.582655,38.298365],[-82.57672,38.328515],[-82.598121,38.345933],[-82.59348,38.421821],[-82.610808,38.471953],[-82.653457,38.493702],[-82.698285,38.54377],[-82.725554,38.558185],[-82.788313,38.55973],[-82.821205,38.573344],[-82.847588,38.595641],[-82.856895,38.647405],[-82.87736,38.694458],[-82.875174,38.746837],[-82.897189,38.756214],[-82.93935,38.745004],[-82.971567,38.727452],[-83.026976,38.727554],[-83.062579,38.689457],[-83.112058,38.671843],[-83.134754,38.632013],[-83.154483,38.62077],[-83.201445,38.61673],[-83.245222,38.628711],[-83.288041,38.598349],[-83.318399,38.610515],[-83.327626,38.637851],[-83.377573,38.661809],[-83.468133,38.675476],[-83.520755,38.703094],[-83.61141,38.684679],[-83.634901,38.670426],[-83.644498,38.637078],[-83.668718,38.626542],[-83.723497,38.647076],[-83.770178,38.655857],[-83.784386,38.696581],[-83.840657,38.721976],[-83.859973,38.757217],[-83.97734,38.787435],[-84.044576,38.770557],[-84.070779,38.770414],[-84.15662,38.795072],[-84.213115,38.805835],[-84.230147,38.82643],[-84.234027,38.891407],[-84.286536,38.952542],[-84.313835,39.016588],[-84.360608,39.041513],[-84.412487,39.046967],[-84.430561,39.05874],[-84.435388,39.100885],[-84.458818,39.121479],[-84.511041,39.093654],[-84.553509,39.098509],[-84.575499,39.081225],[-84.632506,39.076544],[-84.651692,39.092528],[-84.689354,39.103192],[-84.718096,39.136616],[-84.750345,39.147622],[-84.784484,39.117719],[-84.820157,39.105489],[-84.897098,39.057137],[-84.838579,38.989902],[-84.835155,38.957929],[-84.877535,38.920689],[-84.869014,38.899667],[-84.81477,38.895511],[-84.786613,38.882416],[-84.790436,38.861246],[-84.825963,38.83663],[-84.812534,38.786729],[-84.887285,38.794776],[-84.933516,38.777501],[-84.991927,38.778537],[-85.073036,38.74104],[-85.13199,38.702916],[-85.173048,38.688022],[-85.221119,38.701058],[-85.258946,38.73777],[-85.305858,38.741536],[-85.372265,38.73045],[-85.407994,38.737136],[-85.452087,38.709785],[-85.455042,38.681263],[-85.438586,38.658102],[-85.439729,38.611493],[-85.415977,38.563654],[-85.42339,38.531845],[-85.475124,38.503689],[-85.49851,38.468495],[-85.52479,38.457636],[-85.586033,38.450092],[-85.62037,38.423462],[-85.655355,38.323849],[-85.685208,38.294692],[-85.743213,38.267283],[-85.780743,38.288352],[-85.821706,38.281119],[-85.835456,38.266666],[-85.851694,38.222445],[-85.884282,38.19957],[-85.904063,38.173427],[-85.909289,38.142235],[-85.90499,38.089818],[-85.923428,38.025247],[-85.943132,38.006622],[-86.021667,37.995793],[-86.049012,37.959861],[-86.079389,38.000625],[-86.1216,38.016052],[-86.17893,38.01081],[-86.221352,38.028669],[-86.267769,38.057171],[-86.2791,38.100754],[-86.272847,38.140835],[-86.29574,38.164069],[-86.347736,38.195363],[-86.37741,38.188574],[-86.366055,38.161531],[-86.325874,38.154029],[-86.332099,38.129929],[-86.375953,38.130539],[-86.403487,38.104563],[-86.443207,38.127762],[-86.465503,38.104306],[-86.432672,38.08527],[-86.433923,38.065705],[-86.456793,38.049031],[-86.513233,38.044054],[-86.52503,38.028902],[-86.525095,37.968081],[-86.507089,37.929917],[-86.541991,37.917034],[-86.58848,37.921346],[-86.600173,37.9044],[-86.604699,37.858127],[-86.648393,37.841453],[-86.660653,37.864247],[-86.645801,37.907208],[-86.680397,37.915077],[-86.718671,37.893057],[-86.752705,37.915372],[-86.79551,37.989453],[-86.815746,37.998957],[-86.851933,37.989029],[-86.919834,37.93639],[-86.9766,37.930965],[-87.040163,37.901215],[-87.043285,37.868552],[-87.06967,37.801513],[-87.091069,37.786964],[-87.128604,37.78577],[-87.14097,37.815112],[-87.164747,37.841353],[-87.219945,37.84889],[-87.318228,37.90497],[-87.344793,37.911099],[-87.377697,37.934391],[-87.428307,37.945047],[-87.463403,37.93494],[-87.50972,37.906028],[-87.556567,37.928606],[-87.577996,37.97057],[-87.601573,37.971304],[-87.628067,37.922892],[-87.592826,37.889688],[-87.588435,37.861685],[-87.615583,37.831848],[-87.673447,37.829873],[-87.681684,37.856273],[-87.666904,37.876795],[-87.684343,37.903754],[-87.711657,37.893872],[-87.759432,37.891861],[-87.794177,37.875356],[-87.832994,37.877143],[-87.874,37.92272],[-87.897144,37.927756],[-87.938548,37.890769],[-87.936301,37.867873],[-87.910017,37.843018],[-87.906939,37.807593],[-87.931794,37.7982],[-87.945991,37.773578],[-88.015487,37.801948],[-88.028016,37.799188],[-88.049183,37.755073],[-88.072311,37.73352],[-88.12499,37.707223],[-88.160389,37.656131],[-88.13351,37.574417],[-88.0721,37.528811],[-88.061168,37.504269],[-88.082243,37.472665],[-88.136246,37.471471],[-88.197714,37.460155],[-88.279207,37.453292],[-88.311974,37.441001],[-88.369196,37.40207],[-88.412746,37.425071],[-88.454642,37.409953],[-88.47409,37.391863],[-88.487236,37.339107],[-88.512263,37.297096],[-88.507062,37.259689],[-88.473688,37.221652],[-88.448016,37.203403],[-88.424603,37.151764],[-88.449353,37.087615],[-88.482624,37.067257],[-88.52316,37.06579],[-88.572863,37.079569],[-88.616928,37.116041],[-88.703274,37.142935],[-88.735061,37.145247],[-88.802554,37.187861],[-88.931424,37.227378],[-88.973793,37.2298],[-89.029866,37.211065],[-89.092755,37.156763],[-89.111409,37.118988],[-89.154346,37.08896],[-89.177857,37.057796],[-89.17383,37.011443],[-89.132915,36.982057],[-89.1092,36.976451],[-89.098968,36.956067],[-89.117115,36.888685],[-89.138109,36.847323],[-89.170443,36.84184],[-89.178223,36.808614],[-89.116983,36.775595],[-89.125967,36.751809],[-89.169785,36.759641],[-89.197856,36.739772],[-89.200654,36.718752],[-89.169426,36.688771],[-89.159118,36.666354],[-89.197753,36.628971],[-89.202771,36.601665],[-89.227046,36.569537],[-89.269546,36.569716],[-89.31645,36.624044],[-89.332034,36.632881],[-89.365797,36.625126],[-89.41727,36.499011],[-89.30102,36.507233],[-88.959746,36.502076],[-88.77157,36.502729],[-88.216645,36.499827],[-88.053293,36.497058],[-88.032675,36.536985],[-88.044862,36.60307],[-88.070541,36.678255],[-88.012203,36.67719],[-87.849544,36.663695],[-87.853319,36.63316],[-87.474687,36.640415],[-87.070491,36.64273],[-86.734208,36.648898],[-86.589906,36.652443],[-86.564255,36.633583],[-86.507781,36.652379],[-86.332126,36.648701],[-86.032922,36.630736],[-85.832432,36.6221],[-85.50151,36.614855],[-85.276867,36.626827],[-85.109237,36.622885],[-84.991632,36.617041],[-84.830035,36.604536],[-84.540474,36.596304],[-84.271545,36.591703],[-83.999943,36.589857],[-83.690789,36.582596],[-83.675395,36.600784],[-83.613896,36.63485],[-83.567853,36.646051],[-83.532404,36.664689],[-83.492805,36.670187],[-83.418682,36.668729],[-83.347635,36.700199],[-83.194252,36.739519],[-83.13512,36.742629],[-83.128987,36.775784],[-83.09848,36.813517],[-83.099904,36.831147],[-83.072836,36.854457],[-82.969243,36.858019],[-82.87908,36.889255],[-82.857644,36.92885],[-82.869607,36.973343],[-82.830842,36.993556],[-82.82872,37.005798],[-82.782863,37.007821],[-82.742759,37.042796],[-82.726486,37.073411],[-82.715149,37.121848],[-82.633918,37.154179],[-82.550589,37.204483],[-82.439893,37.247005],[-82.355536,37.265147],[-82.316008,37.29483],[-82.142983,37.414842],[-81.968012,37.538035]]]]},"properties":{"name":"Kentucky","ns_code":"01779786","geoid":"21","usps_abbrev":"KY","fips_code":"21"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-71.088571,41.431315],[-71.033604,41.414085],[-71.026103,41.371693],[-70.990748,41.351289],[-70.901866,41.36177],[-70.897722,41.327411],[-70.870027,41.297068],[-70.893595,41.267994],[-70.877327,41.224144],[-70.847746,41.205814],[-70.80595,41.198742],[-70.767837,41.20649],[-70.744307,41.22603],[-70.734843,41.259231],[-70.68502,41.293176],[-70.606672,41.29941],[-70.512199,41.298313],[-70.459851,41.265253],[-70.408733,41.277294],[-70.374466,41.269458],[-70.344083,41.276146],[-70.285736,41.242346],[-70.178851,41.204531],[-70.109684,41.189803],[-70.012483,41.187053],[-69.973182,41.193545],[-69.910319,41.226849],[-69.892209,41.271323],[-69.910093,41.317263],[-69.974592,41.408922],[-70.006467,41.433898],[-70.065174,41.442687],[-70.094412,41.43081],[-70.11644,41.386165],[-70.097844,41.353584],[-70.148699,41.345216],[-70.174906,41.35729],[-70.215115,41.360275],[-70.238142,41.386205],[-70.267283,41.393426],[-70.323593,41.391607],[-70.383449,41.369933],[-70.385874,41.433721],[-70.405928,41.457013],[-70.436449,41.468919],[-70.489689,41.462977],[-70.508603,41.498965],[-70.466436,41.50616],[-70.423896,41.528732],[-70.395164,41.556722],[-70.311254,41.571062],[-70.267429,41.558373],[-70.225558,41.568561],[-70.20804,41.58415],[-70.160357,41.59937],[-70.077934,41.612528],[-70.063352,41.590173],[-70.080316,41.564454],[-70.126792,41.530878],[-70.114394,41.484083],[-70.084904,41.467493],[-70.040313,41.46596],[-69.999458,41.490527],[-69.946613,41.512152],[-69.928994,41.532152],[-69.915399,41.589243],[-69.898562,41.606096],[-69.862876,41.673153],[-69.860058,41.758503],[-69.866525,41.817011],[-69.909178,41.942062],[-69.929109,41.978476],[-70.011591,42.073378],[-70.067098,42.105327],[-70.120691,42.125101],[-70.172542,42.134515],[-70.229175,42.131189],[-70.27743,42.114345],[-70.608381,42.138479],[-70.642946,42.178185],[-70.640113,42.228372],[-70.684061,42.253836],[-70.690393,42.278999],[-70.60629,42.53122],[-70.582709,42.553004],[-70.545374,42.570119],[-70.502143,42.624579],[-70.513934,42.680594],[-70.549306,42.724164],[-70.625943,42.739724],[-70.70258,42.724162],[-70.714324,42.731911],[-70.737225,42.787956],[-70.734874,42.824477],[-70.74883,42.858831],[-70.735005,42.874685],[-70.820894,42.872076],[-70.848625,42.860939],[-70.88561,42.882496],[-70.930798,42.884588],[-70.9665,42.868989],[-71.031201,42.859087],[-71.064201,42.806289],[-71.132503,42.821388],[-71.186103,42.790674],[-71.181803,42.73759],[-71.245504,42.742589],[-71.294205,42.69699],[-71.745815,42.707287],[-71.981402,42.713295],[-72.458436,42.72685],[-72.809113,42.736581],[-73.264957,42.74594],[-73.356894,42.49836],[-73.508142,42.086257],[-73.487314,42.049638],[-73.432812,42.050587],[-73.030063,42.039197],[-72.813541,42.036494],[-72.816741,41.997595],[-72.766738,42.002995],[-72.751765,42.029792],[-72.700036,42.036895],[-72.573235,42.03014],[-72.52813,42.034295],[-72.143104,42.030586],[-72.073426,42.027562],[-71.800649,42.023569],[-71.799242,42.008065],[-71.381401,42.018798],[-71.3817,41.893199],[-71.338698,41.898399],[-71.333997,41.8623],[-71.347197,41.823101],[-71.326496,41.779801],[-71.260982,41.752118],[-71.195555,41.675152],[-71.132507,41.660356],[-71.140442,41.605298],[-71.131727,41.593762],[-71.121116,41.492787],[-71.088571,41.431315]]]},"properties":{"name":"Massachusetts","ns_code":"00606926","geoid":"25","usps_abbrev":"MA","fips_code":"25"}},{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-82.902018,24.715678],[-82.932893,24.684668],[-82.964099,24.670596],[-82.985529,24.640485],[-82.986238,24.61065],[-82.974817,24.589605],[-82.928241,24.578138],[-82.900278,24.583272],[-82.849053,24.576748],[-82.80441,24.604296],[-82.766681,24.66794],[-82.766509,24.701764],[-82.800177,24.726282],[-82.86562,24.726225],[-82.902018,24.715678]]],[[[-87.518346,30.229506],[-87.39497,30.250202],[-87.296457,30.27269],[-87.257726,30.264158],[-87.138764,30.278493],[-87.064535,30.294702],[-86.908882,30.320226],[-86.713366,30.343381],[-86.645861,30.346173],[-86.588722,30.34192],[-86.5235,30.330321],[-86.486937,30.331693],[-86.397504,30.325354],[-86.279554,30.304318],[-86.18476,30.277966],[-85.999967,30.213108],[-85.947196,30.191446],[-85.826187,30.125185],[-85.767959,30.076404],[-85.709762,30.043182],[-85.632537,30.014255],[-85.587654,29.962518],[-85.540031,29.928003],[-85.505081,29.911781],[-85.446289,29.901033],[-85.469852,29.868284],[-85.474996,29.831542],[-85.470893,29.789028],[-85.457381,29.735231],[-85.429996,29.669967],[-85.381684,29.612853],[-85.326642,29.605934],[-85.292016,29.632273],[-85.234846,29.624999],[-85.173329,29.590911],[-85.109362,29.569357],[-85.07797,29.541333],[-85.031168,29.539088],[-84.927476,29.569628],[-84.825591,29.623639],[-84.773065,29.637929],[-84.73575,29.656375],[-84.639202,29.735214],[-84.58619,29.748259],[-84.542286,29.769797],[-84.52259,29.794358],[-84.512845,29.832042],[-84.484516,29.833406],[-84.44686,29.858732],[-84.384097,29.845039],[-84.338999,29.847125],[-84.298796,29.867126],[-84.256915,29.942848],[-84.265276,29.979045],[-84.251319,29.995969],[-84.184614,29.983069],[-84.141282,29.993465],[-84.109352,30.028084],[-84.043431,30.039755],[-84.016856,30.0164],[-83.9754,30.007171],[-83.913303,29.958704],[-83.884173,29.955553],[-83.862794,29.930363],[-83.808523,29.904346],[-83.745228,29.89382],[-83.696764,29.858666],[-83.666258,29.811802],[-83.647311,29.797139],[-83.638998,29.740045],[-83.609308,29.698416],[-83.544374,29.671453],[-83.51275,29.634629],[-83.481264,29.630329],[-83.46451,29.613319],[-83.468469,29.569707],[-83.449456,29.483351],[-83.425444,29.455772],[-83.36022,29.431083],[-83.351944,29.408114],[-83.30848,29.383018],[-83.297689,29.346075],[-83.238679,29.30861],[-83.239767,29.25024],[-83.233821,29.235728],[-83.17181,29.185921],[-83.166696,29.125245],[-83.14408,29.07284],[-83.11108,29.049868],[-83.076,29.041819],[-82.99984,29.050786],[-82.978081,29.069227],[-82.950078,29.076059],[-82.887809,29.046217],[-82.866599,29.045524],[-82.851278,29.017389],[-82.844767,28.972084],[-82.857828,28.942006],[-82.833008,28.899435],[-82.808244,28.890227],[-82.794786,28.857729],[-82.81361,28.811492],[-82.813037,28.791293],[-82.787541,28.743457],[-82.788007,28.709302],[-82.765158,28.656481],[-82.727392,28.595587],[-82.738986,28.578838],[-82.748738,28.532054],[-82.74202,28.485834],[-82.746195,28.44931],[-82.776715,28.403235],[-82.800268,28.354732],[-82.795276,28.299764],[-82.837436,28.263066],[-82.89215,28.245247],[-82.908311,28.206626],[-82.896633,28.080295],[-82.878105,28.04282],[-82.886552,28.01366],[-82.888203,27.963713],[-82.908909,27.890082],[-82.901337,27.839107],[-82.875,27.794343],[-82.8057,27.709384],[-82.815377,27.654618],[-82.81123,27.636363],[-82.823669,27.575077],[-82.815377,27.535958],[-82.765195,27.477378],[-82.735158,27.415808],[-82.705438,27.389668],[-82.67828,27.344143],[-82.631787,27.295098],[-82.62287,27.260773],[-82.605696,27.238202],[-82.56474,27.2056],[-82.52755,27.119208],[-82.49982,27.043895],[-82.394753,26.875342],[-82.338319,26.803318],[-82.3222,26.769663],[-82.31793,26.734402],[-82.32191,26.665079],[-82.281846,26.61019],[-82.276193,26.575227],[-82.257975,26.545812],[-82.236453,26.4773],[-82.216196,26.456467],[-82.173229,26.437646],[-82.144669,26.400286],[-82.112221,26.377755],[-82.068898,26.371318],[-82.008175,26.395359],[-81.978126,26.399692],[-81.941949,26.37536],[-81.906149,26.331427],[-81.884599,26.27685],[-81.867882,26.214383],[-81.859223,26.108242],[-81.85034,26.062872],[-81.801041,25.973828],[-81.806218,25.953709],[-81.784875,25.913956],[-81.775286,25.880947],[-81.742219,25.843898],[-81.718139,25.793033],[-81.687613,25.770912],[-81.628669,25.771261],[-81.597969,25.790582],[-81.588095,25.809922],[-81.529215,25.783842],[-81.487718,25.752285],[-81.445143,25.737576],[-81.399194,25.659252],[-81.372998,25.640587],[-81.347231,25.636727],[-81.32334,25.59307],[-81.276004,25.535118],[-81.259117,25.479956],[-81.221797,25.441496],[-81.205709,25.410751],[-81.205941,25.37702],[-81.196077,25.357058],[-81.234044,25.234522],[-81.215507,25.1894],[-81.195329,25.168837],[-81.184409,25.125001],[-81.149525,25.107384],[-81.120119,25.073538],[-81.098489,25.066471],[-81.075376,25.033158],[-81.05511,24.971413],[-81.02013,24.9309],[-80.99398,24.910454],[-80.973068,24.866433],[-80.938324,24.843193],[-80.964288,24.819907],[-81.06447,24.791116],[-81.096655,24.809256],[-81.132429,24.805835],[-81.15924,24.836018],[-81.183065,24.843269],[-81.202322,24.868352],[-81.252946,24.881145],[-81.293697,24.86815],[-81.312571,24.873705],[-81.369161,24.871302],[-81.402473,24.881827],[-81.458887,24.86745],[-81.528173,24.835487],[-81.541962,24.821385],[-81.60277,24.799559],[-81.723528,24.725524],[-81.806387,24.696472],[-81.866423,24.663305],[-81.89157,24.665855],[-81.936739,24.656502],[-81.987851,24.63477],[-82.026643,24.607666],[-82.081731,24.635634],[-82.137572,24.638715],[-82.164692,24.629473],[-82.210239,24.590843],[-82.218964,24.54221],[-82.205536,24.518991],[-82.175098,24.499617],[-82.100333,24.499998],[-82.067171,24.523715],[-82.051074,24.496844],[-82.023479,24.477864],[-81.974409,24.471209],[-81.979768,24.431656],[-81.946441,24.399348],[-81.866905,24.403588],[-81.813522,24.417639],[-81.788985,24.439482],[-81.76287,24.449643],[-81.71183,24.429733],[-81.610259,24.454308],[-81.585826,24.471094],[-81.539924,24.486034],[-81.519086,24.517248],[-81.527852,24.553279],[-81.514615,24.564757],[-81.474733,24.553455],[-81.420636,24.570572],[-81.385432,24.569933],[-81.293455,24.596722],[-81.27169,24.597096],[-81.204259,24.631186],[-81.184044,24.631205],[-81.147686,24.649064],[-81.124795,24.636605],[-81.076521,24.633375],[-81.047648,24.64024],[-81.022583,24.665275],[-80.999792,24.668912],[-80.918911,24.713066],[-80.893295,24.716453],[-80.852228,24.748931],[-80.812466,24.761211],[-80.783375,24.76126],[-80.745115,24.788878],[-80.674811,24.825611],[-80.652342,24.831403],[-80.619896,24.854586],[-80.585451,24.889329],[-80.538164,24.912733],[-80.514343,24.940628],[-80.469498,24.951755],[-80.453365,24.963698],[-80.439101,24.997989],[-80.409327,25.012677],[-80.390435,25.057189],[-80.35778,25.072902],[-80.333321,25.099202],[-80.302899,25.144923],[-80.249773,25.179479],[-80.229264,25.225501],[-80.243168,25.255375],[-80.217862,25.295247],[-80.188586,25.291267],[-80.150013,25.31442],[-80.112612,25.375391],[-80.11175,25.40088],[-80.141757,25.434711],[-80.126347,25.474551],[-80.115671,25.541393],[-80.079787,25.541533],[-80.0567,25.555212],[-80.04351,25.598051],[-80.060238,25.625383],[-80.0965,25.652753],[-80.091223,25.721903],[-80.06687,25.756733],[-80.056056,25.837688],[-80.067685,25.902395],[-80.052257,25.974956],[-80.040925,26.092459],[-80.016904,26.257978],[-80.014362,26.362236],[-80.006149,26.432809],[-79.988543,26.527264],[-79.980648,26.595447],[-79.981303,26.650273],[-79.974734,26.708231],[-79.97965,26.750341],[-79.975425,26.80025],[-79.996463,26.88181],[-80.039102,27.029853],[-80.080955,27.125329],[-80.095411,27.18064],[-80.127097,27.239374],[-80.227962,27.463004],[-80.229299,27.485629],[-80.261092,27.549139],[-80.281354,27.621171],[-80.296456,27.65341],[-80.328113,27.750306],[-80.39944,27.891467],[-80.429011,27.941482],[-80.499773,28.07726],[-80.543999,28.271092],[-80.53417,28.335703],[-80.519428,28.391084],[-80.481209,28.425511],[-80.46939,28.453097],[-80.478054,28.492451],[-80.503585,28.540362],[-80.522973,28.608238],[-80.635573,28.750268],[-80.721834,28.875],[-80.874815,29.105968],[-80.906836,29.144706],[-80.955785,29.250258],[-80.999776,29.33685],[-81.085187,29.528862],[-81.119814,29.59673],[-81.149144,29.666143],[-81.167403,29.723101],[-81.186399,29.76008],[-81.205177,29.822433],[-81.209268,29.875247],[-81.255134,30.000245],[-81.285314,30.125244],[-81.330627,30.299481],[-81.335381,30.361292],[-81.321563,30.378574],[-81.324877,30.424735],[-81.353574,30.44666],[-81.354883,30.492754],[-81.375002,30.532758],[-81.380867,30.627345],[-81.373398,30.662779],[-81.358169,30.675976],[-81.347015,30.712444],[-81.464013,30.710983],[-81.489898,30.726156],[-81.572395,30.721897],[-81.623771,30.736052],[-81.647483,30.727394],[-81.659805,30.751265],[-81.718109,30.744806],[-81.74096,30.765142],[-81.793968,30.787239],[-81.881858,30.799961],[-81.891052,30.822308],[-81.963928,30.8181],[-81.972458,30.779926],[-82.002385,30.789798],[-82.011603,30.761878],[-82.039795,30.747297],[-82.035927,30.706205],[-82.05022,30.674538],[-82.00581,30.565358],[-82.018554,30.528992],[-82.016906,30.475111],[-82.043762,30.414869],[-82.037218,30.371848],[-82.065598,30.358114],[-82.105018,30.368817],[-82.171623,30.359918],[-82.192596,30.378831],[-82.210733,30.42564],[-82.20124,30.485114],[-82.225072,30.50769],[-82.240403,30.53777],[-82.214677,30.568556],[-82.590548,30.592186],[-83.065223,30.620039],[-83.499925,30.645674],[-83.975655,30.67037],[-84.374894,30.689793],[-84.474409,30.692793],[-84.644815,30.701991],[-84.864693,30.711542],[-84.897622,30.751391],[-84.911122,30.751191],[-84.936824,30.818489],[-84.926824,30.846389],[-84.94252,30.888488],[-84.983527,30.935486],[-84.980427,30.962086],[-85.004026,30.973468],[-85.002499,31.000685],[-85.243632,31.000884],[-85.568112,30.996244],[-85.87493,30.993618],[-86.12154,30.992884],[-86.563436,30.995223],[-87.140755,30.999532],[-87.237685,30.996393],[-87.311949,30.998435],[-87.598829,30.997455],[-87.588862,30.96579],[-87.62027,30.887404],[-87.634788,30.866707],[-87.626224,30.846664],[-87.544789,30.778395],[-87.535114,30.749448],[-87.501502,30.721092],[-87.406356,30.674437],[-87.393294,30.627218],[-87.408018,30.583701],[-87.445103,30.528909],[-87.435578,30.480496],[-87.414677,30.457296],[-87.370768,30.446865],[-87.369383,30.431948],[-87.440678,30.391498],[-87.450778,30.346999],[-87.462978,30.334],[-87.49998,30.328957],[-87.50558,30.3111],[-87.452378,30.300201],[-87.51838,30.283901],[-87.518346,30.229506]]]]},"properties":{"name":"Florida","ns_code":"00294478","geoid":"12","usps_abbrev":"FL","fips_code":"12"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-111.048974,44.474072],[-111.131379,44.499925],[-111.180773,44.569038],[-111.230351,44.579727],[-111.241502,44.614225],[-111.219236,44.622616],[-111.255082,44.651011],[-111.294843,44.70006],[-111.337113,44.733204],[-111.37476,44.750295],[-111.397766,44.72476],[-111.465497,44.713824],[-111.490008,44.699537],[-111.473633,44.664968],[-111.525764,44.604883],[-111.499991,44.54192],[-111.591768,44.561502],[-111.617695,44.551012],[-111.704218,44.560205],[-111.821488,44.509286],[-111.866126,44.562811],[-111.947941,44.556776],[-111.978786,44.53589],[-112.032707,44.546642],[-112.096299,44.523212],[-112.130952,44.537791],[-112.183945,44.533053],[-112.221698,44.543519],[-112.228894,44.564002],[-112.286187,44.568472],[-112.319198,44.53911],[-112.358917,44.528847],[-112.356688,44.492621],[-112.366437,44.467358],[-112.390543,44.450666],[-112.473207,44.480027],[-112.50031,44.463051],[-112.550557,44.484928],[-112.60293,44.490939],[-112.664485,44.48645],[-112.71793,44.504273],[-112.781294,44.484888],[-112.840278,44.424964],[-112.813272,44.398173],[-112.812735,44.377181],[-112.844859,44.358221],[-112.919625,44.409581],[-112.951146,44.416699],[-113.003544,44.450814],[-113.027148,44.495716],[-113.00703,44.525872],[-113.045502,44.543934],[-113.039836,44.566842],[-113.087851,44.599243],[-113.056772,44.618659],[-113.067762,44.679474],[-113.098119,44.697975],[-113.102129,44.729032],[-113.137704,44.760109],[-113.131151,44.772392],[-113.179366,44.787149],[-113.193117,44.801653],[-113.247166,44.82295],[-113.340471,44.784682],[-113.356062,44.819798],[-113.422376,44.842595],[-113.455071,44.865424],[-113.461084,44.886742],[-113.49167,44.924408],[-113.494444,44.948597],[-113.443793,44.959894],[-113.45197,45.059247],[-113.520134,45.093033],[-113.513342,45.115225],[-113.556314,45.115243],[-113.58968,45.15536],[-113.59252,45.184689],[-113.636889,45.212983],[-113.650064,45.23471],[-113.69276,45.264299],[-113.67886,45.276092],[-113.738729,45.329741],[-113.734402,45.392353],[-113.77407,45.406659],[-113.775924,45.470998],[-113.760014,45.480138],[-113.772791,45.514411],[-113.83388,45.520632],[-113.821437,45.565973],[-113.797009,45.582017],[-113.806729,45.602146],[-113.862169,45.623784],[-113.904571,45.624767],[-113.897663,45.646706],[-113.931494,45.672965],[-113.933957,45.693061],[-113.973624,45.702809],[-114.019315,45.692937],[-114.013786,45.658238],[-114.067619,45.627706],[-114.086584,45.59118],[-114.122322,45.58426],[-114.135249,45.557465],[-114.180043,45.551432],[-114.192802,45.536596],[-114.248532,45.545419],[-114.248988,45.520636],[-114.279217,45.480616],[-114.345019,45.459916],[-114.36562,45.490416],[-114.429048,45.516624],[-114.43012,45.529309],[-114.517761,45.568129],[-114.549508,45.56059],[-114.558253,45.585104],[-114.538467,45.605892],[-114.563305,45.631612],[-114.507754,45.657626],[-114.495421,45.703321],[-114.504307,45.72173],[-114.547896,45.743606],[-114.566172,45.773864],[-114.514586,45.82685],[-114.509303,45.845531],[-114.406307,45.869145],[-114.395059,45.901458],[-114.431159,45.935737],[-114.402291,45.957799],[-114.414118,45.979278],[-114.457101,45.997296],[-114.493475,46.052402],[-114.466937,46.065689],[-114.459526,46.093907],[-114.474777,46.113191],[-114.5213,46.125287],[-114.515703,46.165687],[-114.477345,46.160629],[-114.44521,46.167885],[-114.451795,46.239666],[-114.47077,46.264517],[-114.427309,46.283624],[-114.433478,46.305502],[-114.413758,46.335945],[-114.410083,46.365625],[-114.422458,46.387097],[-114.384756,46.411784],[-114.379338,46.460166],[-114.403019,46.498675],[-114.348521,46.510241],[-114.347946,46.551642],[-114.329765,46.575665],[-114.320665,46.646963],[-114.359108,46.670061],[-114.453601,46.648967],[-114.466902,46.631695],[-114.546333,46.64498],[-114.593914,46.633046],[-114.635868,46.65951],[-114.641471,46.679515],[-114.620859,46.707415],[-114.646665,46.730802],[-114.696656,46.740572],[-114.717645,46.713994],[-114.75112,46.697385],[-114.788656,46.714033],[-114.765059,46.758081],[-114.787913,46.780818],[-114.830671,46.783605],[-114.856874,46.801633],[-114.920459,46.827697],[-114.936822,46.89716],[-114.926985,46.919586],[-114.959625,46.929493],[-115.00091,46.967703],[-115.047857,46.969532],[-115.087807,47.045518],[-115.107133,47.04904],[-115.191803,47.132048],[-115.245859,47.151964],[-115.261885,47.181742],[-115.300504,47.188139],[-115.294785,47.220914],[-115.323575,47.256529],[-115.409306,47.263988],[-115.426636,47.280158],[-115.52605,47.299252],[-115.551374,47.350042],[-115.617247,47.38252],[-115.643818,47.377537],[-115.657681,47.40065],[-115.749714,47.440362],[-115.69293,47.457237],[-115.646384,47.456695],[-115.649524,47.477752],[-115.750993,47.541594],[-115.755295,47.551438],[-115.692138,47.596425],[-115.694284,47.62346],[-115.73627,47.654762],[-115.722629,47.695162],[-115.783504,47.729305],[-115.797299,47.75752],[-115.824575,47.752137],[-115.846949,47.784286],[-115.852291,47.827991],[-115.881523,47.849672],[-115.901401,47.843097],[-115.965173,47.910654],[-115.993678,47.926183],[-116.030587,47.972247],[-116.048464,47.976802],[-116.049976,48.237463],[-116.049273,48.714641],[-116.049193,49.000912],[-116.641269,48.999946],[-117.032351,48.999188],[-117.032107,48.874926],[-117.035425,48.499914],[-117.035086,48.38521],[-117.041107,48.124904],[-117.04247,47.839009],[-117.039921,47.492266],[-117.040019,47.259272],[-117.039498,46.931999],[-117.039813,46.425425],[-117.053953,46.344566],[-117.023844,46.335976],[-117.022293,46.31747],[-116.987939,46.298031],[-116.991134,46.276342],[-116.970298,46.261233],[-116.956031,46.225976],[-116.962966,46.19968],[-116.922648,46.160744],[-116.959548,46.099058],[-116.981747,46.092881],[-116.942656,46.061],[-116.915989,45.995413],[-116.87598,45.954775],[-116.866544,45.916958],[-116.814131,45.877641],[-116.763402,45.81658],[-116.734543,45.826527],[-116.698079,45.820852],[-116.665268,45.782059],[-116.59421,45.77908],[-116.535698,45.734231],[-116.535117,45.691277],[-116.488818,45.650799],[-116.463635,45.602785],[-116.524172,45.548565],[-116.557621,45.503495],[-116.55483,45.46293],[-116.588195,45.44292],[-116.597447,45.41277],[-116.623385,45.393963],[-116.674648,45.315082],[-116.67473,45.275844],[-116.703697,45.240099],[-116.728757,45.144381],[-116.774847,45.105536],[-116.797329,45.060267],[-116.848037,45.021728],[-116.857549,44.982567],[-116.83199,44.933007],[-116.852427,44.887578],[-116.896589,44.846545],[-116.932199,44.802781],[-116.9347,44.783881],[-117.000303,44.756082],[-117.044217,44.74514],[-117.063824,44.703623],[-117.095868,44.664737],[-117.098221,44.640689],[-117.120522,44.614658],[-117.124754,44.583834],[-117.146032,44.568603],[-117.144161,44.545647],[-117.181583,44.52296],[-117.200237,44.492027],[-117.224104,44.483734],[-117.215072,44.427162],[-117.242675,44.396548],[-117.235117,44.373853],[-117.189842,44.335007],[-117.22274,44.298326],[-117.170341,44.258889],[-117.141264,44.258515],[-117.119861,44.278272],[-117.05651,44.230874],[-117.031862,44.248635],[-116.975382,44.242392],[-116.967259,44.194581],[-116.935443,44.193962],[-116.903607,44.179985],[-116.895931,44.154295],[-116.933701,44.100043],[-116.977085,44.08582],[-116.973185,44.049425],[-116.934499,44.021218],[-116.958328,43.983495],[-116.961535,43.918388],[-116.980544,43.91483],[-116.982347,43.86884],[-117.032289,43.828767],[-117.026634,43.80811],[-117.026651,43.374877],[-117.026874,43.127005],[-117.026231,42.831194],[-117.026531,42.374871],[-117.026197,41.99989],[-116.606567,41.99739],[-116.368477,41.99628],[-116.243962,41.997651],[-115.870181,41.996766],[-115.305702,41.996121],[-115.031783,41.996008],[-114.806948,42.001842],[-114.598267,41.994511],[-114.467581,41.995492],[-114.041723,41.99372],[-113.893261,41.988057],[-113.496548,41.993305],[-112.979918,41.998441],[-112.624578,42.000353],[-112.192976,42.001167],[-112.173351,41.996568],[-112.01218,41.99835],[-111.491095,41.999522],[-111.046689,42.001567],[-111.047023,42.474064],[-111.043547,42.719502],[-111.044078,42.97598],[-111.04412,43.247071],[-111.045383,43.484566],[-111.046516,43.908369],[-111.049077,44.02013],[-111.048974,44.474072]]]},"properties":{"name":"Idaho","ns_code":"01779783","geoid":"16","usps_abbrev":"ID","fips_code":"16"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-94.617919,36.499414],[-94.114073,36.498632],[-93.875197,36.498722],[-93.426451,36.498935],[-93.136615,36.49796],[-92.753678,36.497975],[-92.46094,36.498671],[-92.375159,36.497199],[-92.019432,36.498338],[-91.539505,36.499236],[-91.422068,36.497138],[-90.948379,36.498463],[-90.513782,36.49844],[-90.15228,36.49795],[-90.127286,36.411063],[-90.078873,36.399358],[-90.063594,36.384235],[-90.08241,36.321949],[-90.064413,36.302108],[-90.083795,36.271938],[-90.115101,36.265282],[-90.125487,36.231232],[-90.187556,36.20566],[-90.220846,36.184146],[-90.235372,36.13948],[-90.29293,36.114499],[-90.300557,36.097525],[-90.348208,36.041573],[-90.37789,35.995683],[-90.120302,35.997876],[-89.733095,36.000608],[-89.706932,36.000981],[-89.687254,36.034048],[-89.680029,36.082494],[-89.59307,36.129699],[-89.607,36.171179],[-89.69263,36.224959],[-89.695235,36.252766],[-89.651407,36.250683],[-89.611145,36.239271],[-89.534676,36.252771],[-89.536441,36.272827],[-89.578492,36.288317],[-89.611819,36.309088],[-89.610689,36.340442],[-89.531822,36.339246],[-89.509722,36.373626],[-89.54234,36.420103],[-89.520642,36.478668],[-89.539232,36.497934],[-89.560412,36.524406],[-89.570726,36.557656],[-89.530638,36.58171],[-89.47993,36.569087],[-89.466646,36.527041],[-89.485427,36.497491],[-89.494119,36.476268],[-89.476643,36.458393],[-89.453514,36.461789],[-89.41727,36.499011],[-89.365797,36.625126],[-89.332034,36.632881],[-89.31645,36.624044],[-89.269546,36.569716],[-89.227046,36.569537],[-89.202771,36.601665],[-89.197753,36.628971],[-89.159118,36.666354],[-89.169426,36.688771],[-89.200654,36.718752],[-89.197856,36.739772],[-89.169785,36.759641],[-89.125967,36.751809],[-89.116983,36.775595],[-89.178223,36.808614],[-89.170443,36.84184],[-89.138109,36.847323],[-89.117115,36.888685],[-89.098968,36.956067],[-89.1092,36.976451],[-89.132915,36.982057],[-89.170009,36.970298],[-89.192097,36.979995],[-89.203408,37.018856],[-89.259935,37.06407],[-89.307726,37.069654],[-89.301368,37.044982],[-89.257608,37.015496],[-89.266242,36.996302],[-89.29213,36.992189],[-89.317168,37.012767],[-89.37961,37.040669],[-89.37871,37.094586],[-89.42558,37.138235],[-89.461862,37.199517],[-89.457832,37.242594],[-89.489915,37.251315],[-89.518469,37.286256],[-89.509699,37.31426],[-89.474569,37.338165],[-89.43604,37.344441],[-89.420939,37.393952],[-89.439769,37.4372],[-89.471201,37.466473],[-89.516447,37.535558],[-89.519808,37.582747],[-89.481118,37.582973],[-89.478399,37.598869],[-89.517718,37.641217],[-89.512009,37.685525],[-89.52573,37.698441],[-89.583316,37.713261],[-89.618067,37.74982],[-89.64953,37.745496],[-89.667868,37.760257],[-89.66038,37.786296],[-89.739875,37.846921],[-89.797542,37.862128],[-89.799329,37.881516],[-89.844786,37.905572],[-89.898338,37.870931],[-89.953359,37.884614],[-89.97419,37.919509],[-89.959564,37.940158],[-89.931267,37.948277],[-89.940687,37.970874],[-89.988108,37.961749],[-90.065045,38.016875],[-90.092838,38.01726],[-90.126532,38.041665],[-90.130788,38.062341],[-90.17222,38.069636],[-90.242574,38.112125],[-90.274843,38.157559],[-90.334172,38.189857],[-90.358628,38.221981],[-90.372422,38.283725],[-90.370819,38.333554],[-90.341446,38.388298],[-90.289901,38.433136],[-90.264056,38.521025],[-90.22306,38.575732],[-90.192441,38.598619],[-90.179377,38.626657],[-90.187126,38.676404],[-90.21298,38.711988],[-90.166409,38.772649],[-90.123107,38.798048],[-90.113327,38.849306],[-90.19761,38.887648],[-90.250248,38.919344],[-90.309454,38.92412],[-90.392721,38.959071],[-90.450813,38.967769],[-90.472122,38.958838],[-90.487058,38.925862],[-90.546831,38.874009],[-90.577576,38.868384],[-90.623356,38.887149],[-90.663018,38.926283],[-90.679027,38.993867],[-90.712541,39.057064],[-90.68199,39.090066],[-90.68739,39.11991],[-90.709146,39.155111],[-90.726981,39.251173],[-90.751599,39.265432],[-90.793461,39.309498],[-90.8475,39.345272],[-90.934007,39.392127],[-90.939025,39.402744],[-90.993789,39.422959],[-91.03827,39.448435],[-91.062414,39.474122],[-91.064305,39.494643],[-91.100911,39.539001],[-91.148275,39.545798],[-91.168419,39.564928],[-91.185921,39.605119],[-91.223328,39.617603],[-91.27614,39.665759],[-91.347253,39.71048],[-91.367753,39.729029],[-91.363444,39.792804],[-91.376488,39.810033],[-91.433798,39.841865],[-91.44784,39.877951],[-91.420878,39.914865],[-91.494878,40.036453],[-91.489606,40.057435],[-91.510839,40.126137],[-91.513079,40.178537],[-91.506501,40.236304],[-91.492727,40.278217],[-91.46214,40.342414],[-91.419422,40.378264],[-91.441243,40.386255],[-91.483153,40.382492],[-91.524612,40.410765],[-91.526155,40.458625],[-91.567743,40.46229],[-91.594644,40.494997],[-91.616948,40.504794],[-91.621902,40.542292],[-91.681714,40.553035],[-91.68882,40.583409],[-91.729115,40.61364],[-91.8684,40.608056],[-92.096611,40.601831],[-92.485216,40.595085],[-92.659409,40.590341],[-93.0135,40.586297],[-93.260429,40.580814],[-93.547578,40.580407],[-94.07214,40.573026],[-94.282994,40.571469],[-94.594196,40.57096],[-94.99166,40.575692],[-95.488514,40.581735],[-95.765645,40.585208],[-95.773549,40.578205],[-95.75711,40.52599],[-95.697202,40.528475],[-95.694147,40.556942],[-95.671776,40.562628],[-95.652269,40.538108],[-95.661681,40.517312],[-95.699969,40.505275],[-95.69313,40.469396],[-95.659734,40.444484],[-95.66144,40.415917],[-95.642414,40.369829],[-95.622684,40.342323],[-95.653729,40.322582],[-95.553292,40.291158],[-95.556275,40.270761],[-95.516107,40.249187],[-95.478694,40.243661],[-95.4699,40.2227],[-95.47792,40.183844],[-95.440694,40.162282],[-95.431351,40.139163],[-95.396549,40.124701],[-95.419999,40.05044],[-95.391527,40.027058],[-95.363983,40.031498],[-95.30829,39.999998],[-95.250254,39.948644],[-95.205266,39.93975],[-95.206063,39.912061],[-95.189561,39.900145],[-95.146055,39.904183],[-95.139679,39.880592],[-95.085003,39.861883],[-95.035246,39.865921],[-95.015135,39.899643],[-94.95518,39.901288],[-94.934907,39.893784],[-94.939854,39.852044],[-94.891481,39.834644],[-94.876244,39.807394],[-94.89053,39.791425],[-94.91955,39.790291],[-94.912293,39.759338],[-94.869655,39.772899],[-94.859035,39.754116],[-94.875634,39.730492],[-94.902612,39.724202],[-94.947541,39.745337],[-94.970422,39.732121],[-94.969333,39.69073],[-95.024595,39.668485],[-95.055152,39.621657],[-95.056897,39.580567],[-95.107474,39.573743],[-95.108065,39.539919],[-95.050552,39.497514],[-95.033408,39.460876],[-94.990172,39.446192],[-94.972952,39.421705],[-94.919225,39.385174],[-94.888972,39.392432],[-94.879088,39.375703],[-94.910321,39.351295],[-94.898516,39.29845],[-94.84632,39.268481],[-94.827479,39.249896],[-94.831679,39.215938],[-94.782951,39.207162],[-94.762858,39.179991],[-94.735743,39.169191],[-94.688788,39.183228],[-94.659162,39.174126],[-94.650647,39.154092],[-94.606455,39.160827],[-94.588658,39.151163],[-94.607151,39.105582],[-94.608172,38.811095],[-94.613356,38.457967],[-94.612503,38.220379],[-94.614164,37.974007],[-94.617669,37.776193],[-94.616724,37.500123],[-94.618313,37.194687],[-94.617964,36.998905],[-94.618471,36.816277],[-94.617919,36.499414]]]},"properties":{"name":"Missouri","ns_code":"01779791","geoid":"29","usps_abbrev":"MO","fips_code":"29"}},{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-167.944593,25],[-167.952449,25.023538],[-167.98894,25.049049],[-168.01596,25.048561],[-168.050607,25.025868],[-168.05839,24.987885],[-168.037751,24.959715],[-167.983537,24.949265],[-167.953685,24.964386],[-167.944593,25]]],[[[-160.5,21.697025],[-160.53174,21.711998],[-160.57826,21.70025],[-160.59977,21.66765],[-160.590748,21.625],[-160.570728,21.606664],[-160.520366,21.60493],[-160.484924,21.63243],[-160.483196,21.665186],[-160.5,21.697025]]],[[[-164.755463,23.601692],[-164.76481,23.581721],[-164.75,23.536146],[-164.7013,23.517002],[-164.654024,23.535221],[-164.640019,23.576111],[-164.654083,23.607069],[-164.68263,23.622806],[-164.709793,23.623234],[-164.755463,23.601692]]],[[[-161.875,23.019242],[-161.858059,23.060806],[-161.863002,23.085183],[-161.887575,23.110384],[-161.91944,23.113988],[-161.965449,23.104987],[-161.982524,23.091275],[-161.985445,23.041131],[-161.955171,23.009169],[-161.894219,23.00943],[-161.875,23.019242]]],[[[-171.67768,25.75],[-171.66792,25.781217],[-171.676628,25.810907],[-171.710623,25.833211],[-171.76812,25.833681],[-171.80015,25.805822],[-171.809629,25.78135],[-171.797027,25.740539],[-171.77015,25.718199],[-171.73749,25.706533],[-171.69984,25.716858],[-171.67768,25.75]]],[[[-173.97704,26],[-173.925968,26.019627],[-173.903358,26.060056],[-173.913424,26.099399],[-173.92909,26.120139],[-173.957916,26.13569],[-174.007114,26.137053],[-174.04962,26.116578],[-174.067374,26.059614],[-174.059183,26.020719],[-174.04609,26.002306],[-174.006404,25.990289],[-173.97704,26]]],[[[-178.25,28.347151],[-178.233018,28.375],[-178.23222,28.427335],[-178.238469,28.45615],[-178.257041,28.476535],[-178.31512,28.516334],[-178.34054,28.517269],[-178.395769,28.5],[-178.42758,28.466102],[-178.438336,28.444088],[-178.440486,28.405172],[-178.415882,28.380086],[-178.39561,28.341901],[-178.301402,28.328336],[-178.25,28.347151]]],[[[-166.125,23.607113],[-166.110682,23.625],[-166.11769,23.664596],[-166.13295,23.684703],[-166.105881,23.713536],[-166.10678,23.742522],[-166.148171,23.785479],[-166.16486,23.835407],[-166.16594,23.875],[-166.182347,23.902325],[-166.233064,23.928491],[-166.307072,23.924883],[-166.380463,23.883978],[-166.38653,23.846363],[-166.378839,23.823635],[-166.35634,23.805945],[-166.322572,23.799052],[-166.315823,23.74012],[-166.28599,23.71812],[-166.25,23.713898],[-166.205415,23.691601],[-166.223964,23.672533],[-166.232285,23.64158],[-166.224238,23.614791],[-166.194409,23.589531],[-166.151155,23.590464],[-166.125,23.607113]]],[[[-160.267683,21.75],[-160.218301,21.728797],[-160.17031,21.739551],[-160.15206,21.762955],[-160.141939,21.799026],[-160.122015,21.82496],[-160.059408,21.845594],[-160.03103,21.869364],[-160.022423,21.911575],[-160.027502,21.931214],[-160.006191,21.956575],[-159.997205,21.99251],[-160.01829,22.03001],[-160.056722,22.068345],[-160.10031,22.082497],[-160.14042,22.073322],[-160.15954,22.041325],[-160.174011,21.991479],[-160.1995,21.981278],[-160.242661,21.943869],[-160.279947,21.920638],[-160.302371,21.861491],[-160.29853,21.7905],[-160.267683,21.75]]],[[[-157.111502,20.875],[-157.075207,20.827299],[-157.048069,20.820545],[-157.045183,20.770467],[-157.027278,20.728731],[-156.994434,20.693575],[-156.962839,20.685459],[-156.935899,20.692222],[-156.875,20.690965],[-156.845415,20.711677],[-156.795363,20.735251],[-156.75,20.807605],[-156.75746,20.850771],[-156.823329,20.930808],[-156.868474,20.964379],[-156.913323,20.977963],[-156.989822,20.985058],[-157.035268,20.983302],[-157.08883,20.958397],[-157.11123,20.93123],[-157.11724,20.891693],[-157.111502,20.875]]],[[[-175.746115,27.732717],[-175.726159,27.75],[-175.676624,27.846765],[-175.666492,27.875],[-175.67013,27.941601],[-175.704354,27.982737],[-175.734928,28],[-175.806733,28.007192],[-175.966335,27.929911],[-175.992144,27.889499],[-175.988874,27.861904],[-175.955759,27.833055],[-176.01083,27.830286],[-176.043354,27.795897],[-176.029292,27.742683],[-175.969598,27.693402],[-175.93949,27.688231],[-175.895192,27.699213],[-175.84505,27.728457],[-175.81752,27.722972],[-175.746115,27.732717]]],[[[-157.015058,21.261194],[-157.034394,21.245709],[-157.158992,21.257896],[-157.183943,21.271466],[-157.220212,21.278496],[-157.272186,21.276564],[-157.305252,21.252881],[-157.311675,21.204128],[-157.349892,21.157085],[-157.36566,21.125],[-157.366549,21.100956],[-157.34912,21.07224],[-157.321244,21.050676],[-157.231438,21.043099],[-157.129544,21.048555],[-157.072149,21.057597],[-157.05024,21.042704],[-156.973894,21.021821],[-156.914535,20.997584],[-156.836954,21],[-156.78529,21.02454],[-156.672586,21.095717],[-156.65052,21.134277],[-156.65956,21.181907],[-156.686507,21.210514],[-156.72208,21.226062],[-156.794843,21.234161],[-156.853514,21.222705],[-156.874362,21.233093],[-156.910279,21.229571],[-156.9274,21.256578],[-156.952167,21.269328],[-156.990343,21.273534],[-157.015058,21.261194]]],[[[-159.503667,21.833462],[-159.443999,21.817789],[-159.4039,21.834953],[-159.357779,21.865692],[-159.307978,21.908673],[-159.284354,21.940637],[-159.279222,21.965296],[-159.28371,22.018501],[-159.25,22.084146],[-159.241827,22.125],[-159.245779,22.166808],[-159.26552,22.203915],[-159.308798,22.25],[-159.40292,22.290473],[-159.43275,22.278035],[-159.48404,22.285916],[-159.524654,22.275494],[-159.574883,22.28295],[-159.612952,22.272235],[-159.677252,22.227108],[-159.75,22.199449],[-159.788826,22.160105],[-159.794006,22.134622],[-159.83772,22.094226],[-159.84812,22.076073],[-159.850045,22.016486],[-159.843609,22],[-159.793601,21.93978],[-159.73584,21.912166],[-159.711714,21.907557],[-159.631259,21.846688],[-159.587907,21.84547],[-159.529638,21.833418],[-159.503667,21.833462]]],[[[-158.31764,21.539148],[-158.298653,21.524718],[-158.301353,21.496818],[-158.276241,21.449319],[-158.240052,21.411531],[-158.217752,21.364532],[-158.183253,21.345935],[-158.164354,21.272335],[-158.14925,21.251737],[-158.110077,21.237071],[-157.974355,21.252039],[-157.89866,21.249939],[-157.85907,21.213135],[-157.810229,21.199238],[-157.771407,21.207833],[-157.74531,21.221671],[-157.708324,21.208202],[-157.67578,21.213801],[-157.60769,21.269134],[-157.59791,21.295134],[-157.60822,21.353054],[-157.62845,21.376616],[-157.652151,21.439107],[-157.640749,21.462695],[-157.66095,21.496789],[-157.712174,21.520814],[-157.750924,21.516458],[-157.78095,21.544607],[-157.798649,21.5852],[-157.84415,21.621804],[-157.88145,21.705183],[-157.94178,21.754579],[-157.997244,21.761591],[-158.05014,21.739881],[-158.095543,21.702995],[-158.114744,21.66721],[-158.148846,21.641999],[-158.278156,21.627842],[-158.324247,21.615675],[-158.34465,21.583177],[-158.342151,21.564286],[-158.31764,21.539148]]],[[[-156.565189,20.738914],[-156.51187,20.735386],[-156.5,20.699087],[-156.531659,20.67922],[-156.549625,20.65803],[-156.597734,20.657879],[-156.655056,20.625],[-156.704442,20.604591],[-156.733645,20.581844],[-156.754144,20.5443],[-156.75,20.454335],[-156.705115,20.454142],[-156.533456,20.46298],[-156.48937,20.5],[-156.479551,20.529573],[-156.488377,20.558546],[-156.459868,20.557666],[-156.42049,20.536609],[-156.36288,20.530908],[-156.290472,20.536895],[-156.25,20.550337],[-156.195608,20.577151],[-156.13527,20.569843],[-156.073271,20.598409],[-156.05427,20.597254],[-156.0163,20.612374],[-155.961458,20.660452],[-155.928101,20.724792],[-155.926785,20.781735],[-155.93913,20.836591],[-155.958991,20.875],[-156,20.875],[-156,20.852123],[-156.032289,20.859858],[-156.076476,20.880751],[-156.111061,20.908338],[-156.136358,20.917437],[-156.1953,20.971502],[-156.274302,21.004236],[-156.33922,21.004195],[-156.404908,20.974181],[-156.45109,20.968758],[-156.467546,20.98795],[-156.475383,21.019208],[-156.490728,21.035435],[-156.55951,21.082338],[-156.59103,21.092411],[-156.670424,21.076693],[-156.70849,21.043231],[-156.735017,21.005729],[-156.751796,20.948548],[-156.75194,20.913681],[-156.737531,20.867918],[-156.721737,20.842436],[-156.65986,20.778419],[-156.625,20.75],[-156.586932,20.75],[-156.565189,20.738914]]],[[[-155.247897,20.059808],[-155.438177,20.148815],[-155.54075,20.180249],[-155.578768,20.180147],[-155.63185,20.214253],[-155.688845,20.244776],[-155.702217,20.261602],[-155.751464,20.29447],[-155.836783,20.321226],[-155.906873,20.306067],[-155.947962,20.261652],[-155.957667,20.234972],[-155.957719,20.167614],[-155.932275,20.083445],[-155.884311,20.018327],[-155.938883,19.961518],[-155.962427,19.909152],[-156.012391,19.889753],[-156.05354,19.843534],[-156.079517,19.831131],[-156.10724,19.790402],[-156.119075,19.719301],[-156.08882,19.661408],[-156.07529,19.620962],[-156.03589,19.597961],[-156.022997,19.563632],[-156.012864,19.5],[-155.999134,19.466181],[-155.978105,19.445809],[-155.963615,19.386519],[-155.943213,19.344227],[-155.946461,19.290445],[-155.973882,19.14257],[-155.974041,19.107789],[-155.95406,19.053622],[-155.925931,19.008154],[-155.875,18.97643],[-155.828233,18.966542],[-155.78173,18.933417],[-155.739971,18.916891],[-155.722895,18.882523],[-155.694257,18.866786],[-155.662995,18.866159],[-155.630753,18.879687],[-155.5656,18.934517],[-155.54535,18.96185],[-155.537366,18.989057],[-155.518785,19.008071],[-155.494878,19.071586],[-155.466097,19.095352],[-155.428934,19.107215],[-155.391434,19.14436],[-155.342151,19.161315],[-155.297856,19.199453],[-155.258015,19.222171],[-155.230051,19.212851],[-155.182098,19.209954],[-155.10551,19.23427],[-155.049153,19.267251],[-154.997442,19.284554],[-154.939663,19.312834],[-154.889028,19.360392],[-154.847913,19.385152],[-154.810311,19.416057],[-154.775751,19.457113],[-154.756605,19.506911],[-154.759333,19.536462],[-154.77829,19.559895],[-154.822221,19.59331],[-154.875,19.616167],[-154.911451,19.662036],[-154.928935,19.673605],[-154.928109,19.704534],[-154.95243,19.756784],[-154.977849,19.781404],[-155.03331,19.793421],[-155.03162,19.875],[-155.086049,19.941743],[-155.14033,19.989481],[-155.247897,20.059808]]]]},"properties":{"name":"Hawaii","ns_code":"01779782","geoid":"15","usps_abbrev":"HI","fips_code":"15"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-85.605165,34.984678],[-85.828767,34.988069],[-86.248019,34.990421],[-86.467941,34.990486],[-86.836306,34.991899],[-87.084881,34.996462],[-87.429968,35.002791],[-87.662256,35.003537],[-88.000032,35.005942],[-88.202959,35.008028],[-88.200064,34.995636],[-88.152413,34.919741],[-88.097888,34.892202],[-88.118407,34.724292],[-88.135204,34.615878],[-88.165583,34.383944],[-88.210741,34.0292],[-88.252254,33.719586],[-88.294867,33.367103],[-88.322505,33.142358],[-88.354292,32.875131],[-88.392176,32.548377],[-88.428209,32.25103],[-88.473227,31.893856],[-88.464908,31.705476],[-88.451573,31.481531],[-88.425432,30.998323],[-88.411726,30.722702],[-88.400618,30.476084],[-88.384431,30.158543],[-88.347719,30.190088],[-88.310302,30.177816],[-88.27794,30.180071],[-88.162022,30.200093],[-88.13161,30.173621],[-88.074869,30.147149],[-88.028037,30.150381],[-88.003618,30.173417],[-87.925756,30.179561],[-87.807153,30.177378],[-87.718002,30.19176],[-87.647824,30.199211],[-87.518346,30.229506],[-87.51838,30.283901],[-87.452378,30.300201],[-87.50558,30.3111],[-87.49998,30.328957],[-87.462978,30.334],[-87.450778,30.346999],[-87.440678,30.391498],[-87.369383,30.431948],[-87.370768,30.446865],[-87.414677,30.457296],[-87.435578,30.480496],[-87.445103,30.528909],[-87.408018,30.583701],[-87.393294,30.627218],[-87.406356,30.674437],[-87.501502,30.721092],[-87.535114,30.749448],[-87.544789,30.778395],[-87.626224,30.846664],[-87.634788,30.866707],[-87.62027,30.887404],[-87.588862,30.96579],[-87.598829,30.997455],[-87.311949,30.998435],[-87.237685,30.996393],[-87.140755,30.999532],[-86.563436,30.995223],[-86.12154,30.992884],[-85.87493,30.993618],[-85.568112,30.996244],[-85.243632,31.000884],[-85.002499,31.000685],[-85.01139,31.053547],[-85.028573,31.074583],[-85.037062,31.109753],[-85.052867,31.119489],[-85.077801,31.157889],[-85.099647,31.164942],[-85.106963,31.202693],[-85.096843,31.225239],[-85.113261,31.264343],[-85.090334,31.293606],[-85.083828,31.326971],[-85.09217,31.364576],[-85.065639,31.439521],[-85.071621,31.468384],[-85.041428,31.539293],[-85.05796,31.57084],[-85.057473,31.618624],[-85.087029,31.640966],[-85.092429,31.659966],[-85.12593,31.696265],[-85.11913,31.730964],[-85.141831,31.782363],[-85.131231,31.815262],[-85.140731,31.857461],[-85.08213,31.944658],[-85.08683,31.957758],[-85.055075,32.010714],[-85.05883,32.046656],[-85.045063,32.088063],[-85.06206,32.132486],[-85.009224,32.181646],[-84.963728,32.195852],[-84.973328,32.21765],[-84.930727,32.21895],[-84.901191,32.258374],[-84.9338,32.29826],[-85.002791,32.322428],[-85.004582,32.345196],[-84.983866,32.362386],[-84.971831,32.442843],[-84.99353,32.450743],[-85.001532,32.514741],[-85.023645,32.542955],[-85.067199,32.579306],[-85.08224,32.616264],[-85.105437,32.644934],[-85.088483,32.657758],[-85.112337,32.683234],[-85.122738,32.716032],[-85.113167,32.732813],[-85.14298,32.761654],[-85.122326,32.774383],[-85.165635,32.808222],[-85.154855,32.839689],[-85.184737,32.870514],[-85.233108,33.111714],[-85.304439,33.482884],[-85.356921,33.748233],[-85.406748,34.002314],[-85.47045,34.328239],[-85.527261,34.588683],[-85.561416,34.750079],[-85.605165,34.984678]]]},"properties":{"name":"Alabama","ns_code":"01779775","geoid":"01","usps_abbrev":"AL","fips_code":"01"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-83.108614,35.000659],[-83.120872,34.942039],[-83.158966,34.929138],[-83.205032,34.880329],[-83.242599,34.877808],[-83.246361,34.856533],[-83.32415,34.787479],[-83.326309,34.750839],[-83.349075,34.736633],[-83.352692,34.716904],[-83.3389,34.680039],[-83.304641,34.669561],[-83.293183,34.654296],[-83.255281,34.637696],[-83.23258,34.611597],[-83.168278,34.590998],[-83.122904,34.560117],[-83.086807,34.517555],[-83.034565,34.483571],[-82.990684,34.479968],[-82.901551,34.486764],[-82.8644,34.459785],[-82.833571,34.364092],[-82.798658,34.341777],[-82.782128,34.298278],[-82.754242,34.275787],[-82.743172,34.251598],[-82.740585,34.207268],[-82.717459,34.150546],[-82.675219,34.129779],[-82.627907,34.06419],[-82.593887,34.028109],[-82.579553,33.979688],[-82.556765,33.945324],[-82.524515,33.94336],[-82.494811,33.911712],[-82.42281,33.863757],[-82.408353,33.86632],[-82.346933,33.834298],[-82.300213,33.800627],[-82.299393,33.785037],[-82.247472,33.752591],[-82.23432,33.699836],[-82.200164,33.662012],[-82.196584,33.630583],[-82.133523,33.590535],[-82.10624,33.595637],[-82.092016,33.581862],[-82.046335,33.56383],[-82.00983,33.530313],[-81.985938,33.486536],[-81.934136,33.468337],[-81.913126,33.438333],[-81.93139,33.428474],[-81.931549,33.382156],[-81.94474,33.364041],[-81.918337,33.332842],[-81.847736,33.307243],[-81.863336,33.289844],[-81.835738,33.271045],[-81.852822,33.248542],[-81.789236,33.208247],[-81.756935,33.197848],[-81.768235,33.167949],[-81.743835,33.14145],[-81.704634,33.11645],[-81.645433,33.094051],[-81.614994,33.095551],[-81.565501,33.047888],[-81.51059,33.025805],[-81.4919,33.006694],[-81.502716,32.938688],[-81.483198,32.921802],[-81.457061,32.850389],[-81.426475,32.840773],[-81.423331,32.778512],[-81.406074,32.741625],[-81.427505,32.702242],[-81.405711,32.688727],[-81.393033,32.651542],[-81.41866,32.629392],[-81.389205,32.595416],[-81.319121,32.559596],[-81.299796,32.563049],[-81.279516,32.536226],[-81.251069,32.517805],[-81.200408,32.468314],[-81.205565,32.423929],[-81.178283,32.392986],[-81.155114,32.344341],[-81.122631,32.30699],[-81.123276,32.276975],[-81.141414,32.272039],[-81.15577,32.245793],[-81.123149,32.20132],[-81.128142,32.169097],[-81.117225,32.117604],[-81.066965,32.090384],[-81.032633,32.085476],[-81.01197,32.100178],[-80.954483,32.068616],[-80.926769,32.041663],[-80.89296,32.034951],[-80.751429,32.033468],[-80.741672,32.064374],[-80.748202,32.08449],[-80.70522,32.105187],[-80.66472,32.142607],[-80.63695,32.144272],[-80.608451,32.162294],[-80.584985,32.162589],[-80.548933,32.192053],[-80.523824,32.234592],[-80.459332,32.262221],[-80.431544,32.261384],[-80.392327,32.280317],[-80.37283,32.313408],[-80.374825,32.342453],[-80.35746,32.350534],[-80.336717,32.380753],[-80.306163,32.397097],[-80.294078,32.418521],[-80.263645,32.429579],[-80.243074,32.472449],[-80.198839,32.496241],[-80.166951,32.491086],[-80.121459,32.499192],[-80.094998,32.523866],[-80.088877,32.549029],[-80.03077,32.559961],[-79.979002,32.558074],[-79.918341,32.607264],[-79.855063,32.636389],[-79.828058,32.664778],[-79.798255,32.675632],[-79.766592,32.711537],[-79.760074,32.738257],[-79.691893,32.75924],[-79.662251,32.783119],[-79.637821,32.816377],[-79.612276,32.822971],[-79.58539,32.850856],[-79.534689,32.870012],[-79.495945,32.931572],[-79.459374,32.940504],[-79.440181,32.958916],[-79.371297,32.945717],[-79.322257,32.956078],[-79.273373,33.046559],[-79.215538,33.064248],[-79.180871,33.107528],[-79.140519,33.13962],[-79.091614,33.159056],[-79.077605,33.188653],[-79.086583,33.21531],[-79.120217,33.246932],[-79.093312,33.304952],[-79.087581,33.369287],[-79.034496,33.456834],[-78.993033,33.488992],[-78.956996,33.538722],[-78.887415,33.611975],[-78.822059,33.670239],[-78.772415,33.707967],[-78.691382,33.755288],[-78.635723,33.776679],[-78.499301,33.812852],[-78.54108,33.85112],[-78.874747,34.134395],[-79.201539,34.40864],[-79.358252,34.545579],[-79.6753,34.804744],[-79.874855,34.80541],[-80.164577,34.811656],[-80.558125,34.81744],[-80.797491,34.819752],[-80.782042,34.935785],[-80.93495,35.107409],[-81.041489,35.044703],[-81.057648,35.062433],[-81.057236,35.086129],[-81.03247,35.110033],[-81.047091,35.145157],[-81.069092,35.151242],[-81.264273,35.161062],[-81.749875,35.180019],[-82.181121,35.194067],[-82.27492,35.200071],[-82.315871,35.190678],[-82.362991,35.191037],[-82.390253,35.21554],[-82.419744,35.198613],[-82.431481,35.173187],[-82.486653,35.174463],[-82.525566,35.15652],[-82.598579,35.137788],[-82.641797,35.131817],[-82.697945,35.095359],[-82.72701,35.094142],[-82.763712,35.068209],[-82.784839,35.0857],[-83.108614,35.000659]]]},"properties":{"name":"South Carolina","ns_code":"01779799","geoid":"45","usps_abbrev":"SC","fips_code":"45"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-71.501088,45.013349],[-71.540931,44.98512],[-71.515001,44.958597],[-71.515868,44.931715],[-71.496093,44.907849],[-71.545923,44.865932],[-71.551114,44.836965],[-71.576865,44.815197],[-71.57864,44.785444],[-71.630755,44.753141],[-71.626093,44.728543],[-71.59457,44.697033],[-71.584606,44.656882],[-71.561962,44.647189],[-71.553237,44.608914],[-71.5363,44.585908],[-71.549836,44.569016],[-71.597723,44.554657],[-71.571337,44.538329],[-71.591733,44.518175],[-71.597994,44.486885],[-71.652127,44.460792],[-71.658906,44.442633],[-71.714279,44.409545],[-71.791609,44.400188],[-71.814141,44.382278],[-71.812473,44.358477],[-71.872472,44.336628],[-71.906909,44.348284],[-71.92911,44.337577],[-71.98112,44.3375],[-72.01914,44.320255],[-72.058851,44.286369],[-72.047799,44.238531],[-72.065918,44.189289],[-72.043896,44.158449],[-72.032525,44.082488],[-72.084762,44.020756],[-72.116977,43.994486],[-72.099093,43.957286],[-72.116807,43.947557],[-72.121554,43.918493],[-72.150518,43.902221],[-72.187329,43.855151],[-72.182511,43.810354],[-72.232069,43.748428],[-72.271839,43.733716],[-72.305277,43.695267],[-72.303936,43.667986],[-72.327395,43.636774],[-72.328514,43.600805],[-72.371051,43.580494],[-72.380383,43.54088],[-72.398376,43.510829],[-72.380428,43.488525],[-72.391526,43.46878],[-72.413377,43.362741],[-72.395525,43.312605],[-72.407856,43.282895],[-72.439187,43.245223],[-72.43909,43.201054],[-72.450416,43.192373],[-72.453048,43.139475],[-72.432944,43.11253],[-72.434385,43.083713],[-72.467255,43.054119],[-72.458386,43.018602],[-72.4736,42.972284],[-72.532226,42.954882],[-72.524188,42.917609],[-72.552702,42.884874],[-72.557114,42.852474],[-72.539317,42.804647],[-72.475938,42.757702],[-72.458436,42.72685],[-71.981402,42.713295],[-71.745815,42.707287],[-71.294205,42.69699],[-71.245504,42.742589],[-71.181803,42.73759],[-71.186103,42.790674],[-71.132503,42.821388],[-71.064201,42.806289],[-71.031201,42.859087],[-70.9665,42.868989],[-70.930798,42.884588],[-70.88561,42.882496],[-70.848625,42.860939],[-70.820894,42.872076],[-70.735005,42.874685],[-70.726024,42.928524],[-70.694395,42.956754],[-70.67286,42.930419],[-70.605724,42.912329],[-70.575094,42.917126],[-70.611152,42.97899],[-70.63218,42.986429],[-70.701197,43.04524],[-70.70631,43.075339],[-70.737969,43.073728],[-70.824584,43.125088],[-70.833614,43.146127],[-70.828057,43.186529],[-70.809714,43.224227],[-70.818264,43.238384],[-70.859837,43.258025],[-70.896742,43.285364],[-70.931188,43.336562],[-70.973462,43.349914],[-70.986852,43.413805],[-70.960826,43.439331],[-70.975311,43.477718],[-70.953874,43.519167],[-70.950776,43.551491],[-70.972743,43.57031],[-70.98904,43.790138],[-70.99478,43.960348],[-71.009964,44.284783],[-71.026162,44.549268],[-71.033524,44.697637],[-71.058301,44.991243],[-71.077227,45.250439],[-71.083924,45.305451],[-71.097125,45.302226],[-71.131953,45.245423],[-71.178576,45.241389],[-71.231122,45.249712],[-71.297092,45.298985],[-71.336392,45.273066],[-71.362831,45.267617],[-71.375299,45.245482],[-71.420335,45.232719],[-71.39758,45.202938],[-71.43578,45.139395],[-71.429489,45.122256],[-71.46952,45.083661],[-71.486822,45.078351],[-71.500953,45.04506],[-71.501088,45.013349]]]},"properties":{"name":"New Hampshire","ns_code":"01779794","geoid":"33","usps_abbrev":"NH","fips_code":"33"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-104.053028,43.000585],[-103.475638,43.00048],[-102.889187,43.000438],[-102.625701,42.999773],[-102.125427,42.999196],[-101.862762,42.999374],[-101.633007,42.996255],[-101.22811,42.998127],[-100.88752,42.998015],[-100.525978,42.999042],[-100.034201,42.998145],[-99.635934,42.997834],[-99.195658,42.998084],[-98.88551,42.998181],[-98.49855,42.998559],[-98.467356,42.947556],[-98.342408,42.900847],[-98.325864,42.8865],[-98.258276,42.87439],[-98.219826,42.853157],[-98.129223,42.821056],[-98.062999,42.781001],[-98.013072,42.762219],[-97.947189,42.770709],[-97.888647,42.817177],[-97.875531,42.858656],[-97.831393,42.86896],[-97.774381,42.84974],[-97.686477,42.842212],[-97.60376,42.858329],[-97.561928,42.847552],[-97.504847,42.858477],[-97.43911,42.84711],[-97.417066,42.865918],[-97.341181,42.855882],[-97.306677,42.867604],[-97.289859,42.855499],[-97.248556,42.855386],[-97.218046,42.845113],[-97.212659,42.812069],[-97.150763,42.795566],[-97.130257,42.771541],[-97.071849,42.772305],[-96.97912,42.76009],[-96.948902,42.719465],[-96.907922,42.733857],[-96.806213,42.704154],[-96.802177,42.672235],[-96.764061,42.661983],[-96.728027,42.66688],[-96.687667,42.653127],[-96.711,42.608129],[-96.687005,42.579225],[-96.63803,42.551959],[-96.625961,42.513578],[-96.60347,42.50446],[-96.557776,42.52038],[-96.525088,42.510183],[-96.501319,42.482749],[-96.445483,42.49063],[-96.47719,42.491011],[-96.488163,42.511284],[-96.47696,42.555972],[-96.496026,42.580382],[-96.516084,42.630275],[-96.605596,42.70202],[-96.635561,42.740847],[-96.619849,42.783792],[-96.60356,42.783997],[-96.57783,42.829067],[-96.544831,42.850193],[-96.546561,42.874524],[-96.528536,42.897666],[-96.533761,42.928492],[-96.499283,42.958745],[-96.52082,42.979923],[-96.491981,43.010197],[-96.51395,43.030075],[-96.510851,43.04977],[-96.460742,43.064337],[-96.454063,43.097331],[-96.436567,43.119818],[-96.469556,43.158353],[-96.476729,43.221987],[-96.51754,43.217825],[-96.555281,43.226666],[-96.549534,43.248372],[-96.586525,43.273715],[-96.524522,43.312067],[-96.535022,43.336674],[-96.52172,43.386755],[-96.593339,43.433151],[-96.582402,43.466739],[-96.599191,43.500456],[-96.45326,43.50039],[-96.452858,43.822701],[-96.453404,44.025431],[-96.452275,44.302118],[-96.451234,44.718273],[-96.45197,44.962516],[-96.453097,45.300751],[-96.489065,45.357071],[-96.619752,45.408884],[-96.680454,45.410499],[-96.7314,45.45702],[-96.763432,45.520007],[-96.856834,45.605378],[-96.838648,45.647509],[-96.759312,45.688744],[-96.75035,45.698782],[-96.672665,45.732336],[-96.639222,45.772096],[-96.583085,45.820024],[-96.574517,45.844044],[-96.563672,45.935245],[-97.225797,45.93537],[-97.482542,45.935091],[-98.0285,45.935777],[-98.414398,45.936493],[-98.756598,45.938791],[-99.296714,45.940059],[-99.760635,45.940811],[-100.308163,45.943258],[-100.750596,45.943662],[-101.041137,45.943455],[-101.420443,45.943806],[-101.786099,45.944341],[-102.126414,45.944695],[-102.549895,45.944836],[-102.983434,45.945079],[-103.369029,45.945152],[-103.744941,45.945061],[-104.045441,45.94531],[-104.042596,45.749942],[-104.040188,45.374158],[-104.040131,45.011116],[-104.057697,44.99738],[-104.055913,44.874986],[-104.055926,44.517359],[-104.055389,44.249983],[-104.054688,43.999979],[-104.055122,43.740516],[-104.05479,43.41642],[-104.053028,43.000585]]]},"properties":{"name":"South Dakota","ns_code":"01785534","geoid":"46","usps_abbrev":"SD","fips_code":"46"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-91.419422,40.378264],[-91.46214,40.342414],[-91.492727,40.278217],[-91.506501,40.236304],[-91.513079,40.178537],[-91.510839,40.126137],[-91.489606,40.057435],[-91.494878,40.036453],[-91.420878,39.914865],[-91.44784,39.877951],[-91.433798,39.841865],[-91.376488,39.810033],[-91.363444,39.792804],[-91.367753,39.729029],[-91.347253,39.71048],[-91.27614,39.665759],[-91.223328,39.617603],[-91.185921,39.605119],[-91.168419,39.564928],[-91.148275,39.545798],[-91.100911,39.539001],[-91.064305,39.494643],[-91.062414,39.474122],[-91.03827,39.448435],[-90.993789,39.422959],[-90.939025,39.402744],[-90.934007,39.392127],[-90.8475,39.345272],[-90.793461,39.309498],[-90.751599,39.265432],[-90.726981,39.251173],[-90.709146,39.155111],[-90.68739,39.11991],[-90.68199,39.090066],[-90.712541,39.057064],[-90.679027,38.993867],[-90.663018,38.926283],[-90.623356,38.887149],[-90.577576,38.868384],[-90.546831,38.874009],[-90.487058,38.925862],[-90.472122,38.958838],[-90.450813,38.967769],[-90.392721,38.959071],[-90.309454,38.92412],[-90.250248,38.919344],[-90.19761,38.887648],[-90.113327,38.849306],[-90.123107,38.798048],[-90.166409,38.772649],[-90.21298,38.711988],[-90.187126,38.676404],[-90.179377,38.626657],[-90.192441,38.598619],[-90.22306,38.575732],[-90.264056,38.521025],[-90.289901,38.433136],[-90.341446,38.388298],[-90.370819,38.333554],[-90.372422,38.283725],[-90.358628,38.221981],[-90.334172,38.189857],[-90.274843,38.157559],[-90.242574,38.112125],[-90.17222,38.069636],[-90.130788,38.062341],[-90.126532,38.041665],[-90.092838,38.01726],[-90.065045,38.016875],[-89.988108,37.961749],[-89.940687,37.970874],[-89.931267,37.948277],[-89.959564,37.940158],[-89.97419,37.919509],[-89.953359,37.884614],[-89.898338,37.870931],[-89.844786,37.905572],[-89.799329,37.881516],[-89.797542,37.862128],[-89.739875,37.846921],[-89.66038,37.786296],[-89.667868,37.760257],[-89.64953,37.745496],[-89.618067,37.74982],[-89.583316,37.713261],[-89.52573,37.698441],[-89.512009,37.685525],[-89.517718,37.641217],[-89.478399,37.598869],[-89.481118,37.582973],[-89.519808,37.582747],[-89.516447,37.535558],[-89.471201,37.466473],[-89.439769,37.4372],[-89.420939,37.393952],[-89.43604,37.344441],[-89.474569,37.338165],[-89.509699,37.31426],[-89.518469,37.286256],[-89.489915,37.251315],[-89.457832,37.242594],[-89.461862,37.199517],[-89.42558,37.138235],[-89.37871,37.094586],[-89.37961,37.040669],[-89.317168,37.012767],[-89.29213,36.992189],[-89.266242,36.996302],[-89.257608,37.015496],[-89.301368,37.044982],[-89.307726,37.069654],[-89.259935,37.06407],[-89.203408,37.018856],[-89.192097,36.979995],[-89.170009,36.970298],[-89.132915,36.982057],[-89.17383,37.011443],[-89.177857,37.057796],[-89.154346,37.08896],[-89.111409,37.118988],[-89.092755,37.156763],[-89.029866,37.211065],[-88.973793,37.2298],[-88.931424,37.227378],[-88.802554,37.187861],[-88.735061,37.145247],[-88.703274,37.142935],[-88.616928,37.116041],[-88.572863,37.079569],[-88.52316,37.06579],[-88.482624,37.067257],[-88.449353,37.087615],[-88.424603,37.151764],[-88.448016,37.203403],[-88.473688,37.221652],[-88.507062,37.259689],[-88.512263,37.297096],[-88.487236,37.339107],[-88.47409,37.391863],[-88.454642,37.409953],[-88.412746,37.425071],[-88.369196,37.40207],[-88.311974,37.441001],[-88.279207,37.453292],[-88.197714,37.460155],[-88.136246,37.471471],[-88.082243,37.472665],[-88.061168,37.504269],[-88.0721,37.528811],[-88.13351,37.574417],[-88.160389,37.656131],[-88.12499,37.707223],[-88.072311,37.73352],[-88.049183,37.755073],[-88.028016,37.799188],[-88.094956,37.893689],[-88.013355,37.894854],[-88.037013,37.956276],[-88.012574,37.977062],[-88.034132,38.032045],[-87.967226,38.067105],[-87.960677,38.100191],[-88.004697,38.083965],[-88.013118,38.103527],[-87.974781,38.110515],[-87.944825,38.127272],[-87.910924,38.162557],[-87.969865,38.191786],[-87.984838,38.228674],[-87.937329,38.292431],[-87.85113,38.27512],[-87.830953,38.299365],[-87.832723,38.324853],[-87.806075,38.363143],[-87.784994,38.368011],[-87.743772,38.413115],[-87.73082,38.449228],[-87.744639,38.477271],[-87.685921,38.491843],[-87.656144,38.521668],[-87.670071,38.545237],[-87.621401,38.586118],[-87.627345,38.607237],[-87.597247,38.665314],[-87.534435,38.681754],[-87.51961,38.697198],[-87.495905,38.785434],[-87.526816,38.817369],[-87.525893,38.848795],[-87.552028,38.860318],[-87.51912,38.922603],[-87.513346,38.956],[-87.529496,38.971925],[-87.573466,38.985441],[-87.572588,39.057286],[-87.61838,39.104284],[-87.658745,39.135997],[-87.619603,39.186032],[-87.585725,39.200396],[-87.574615,39.223931],[-87.580652,39.255237],[-87.604947,39.260212],[-87.60592,39.311076],[-87.589084,39.333831],[-87.531646,39.347888],[-87.532707,39.666203],[-87.533269,39.875036],[-87.53153,40.142775],[-87.526168,40.505761],[-87.525661,40.836132],[-87.526675,41.32691],[-87.523661,41.759907],[-87.207774,41.760956],[-87.125042,42.097098],[-87.019935,42.493498],[-87.375058,42.493815],[-87.803218,42.492566],[-88.081066,42.495631],[-88.389994,42.494516],[-88.628997,42.495045],[-88.804148,42.4921],[-88.991611,42.496005],[-89.262669,42.49819],[-89.66982,42.505044],[-89.955237,42.505651],[-90.157406,42.508325],[-90.405927,42.506891],[-90.640927,42.508302],[-90.654027,42.478503],[-90.624328,42.458904],[-90.570736,42.441701],[-90.555018,42.416138],[-90.477941,42.384151],[-90.415937,42.322699],[-90.431039,42.282452],[-90.419326,42.254467],[-90.391108,42.225473],[-90.356964,42.205445],[-90.328273,42.201047],[-90.282173,42.178846],[-90.209479,42.15268],[-90.201404,42.130937],[-90.162895,42.116718],[-90.164485,42.042105],[-90.140061,42.003252],[-90.162141,41.961293],[-90.153584,41.906614],[-90.170041,41.876439],[-90.187969,41.803163],[-90.278633,41.767358],[-90.315549,41.734426],[-90.313052,41.699631],[-90.334525,41.679559],[-90.343452,41.646959],[-90.343228,41.587833],[-90.412825,41.565329],[-90.461432,41.523533],[-90.500633,41.518033],[-90.540935,41.526133],[-90.595237,41.511032],[-90.605937,41.494232],[-90.655839,41.462132],[-90.73754,41.450127],[-90.84746,41.455019],[-90.930691,41.421368],[-90.975168,41.433985],[-91.02779,41.423603],[-91.048259,41.409748],[-91.065058,41.369101],[-91.073553,41.310481],[-91.11419,41.250029],[-91.112348,41.239002],[-91.065899,41.199517],[-91.041875,41.166484],[-90.989662,41.155707],[-90.94626,41.09473],[-90.942253,41.034702],[-90.958142,40.979767],[-90.951967,40.958238],[-90.962916,40.924957],[-90.9985,40.90812],[-91.044653,40.868356],[-91.096946,40.811403],[-91.092476,40.776838],[-91.115735,40.725168],[-91.12082,40.672777],[-91.185295,40.637803],[-91.247851,40.63839],[-91.310048,40.625041],[-91.359873,40.601805],[-91.406202,40.542698],[-91.369059,40.512532],[-91.364915,40.484168],[-91.381045,40.44849],[-91.375712,40.391925],[-91.419422,40.378264]]]},"properties":{"name":"Illinois","ns_code":"01779784","geoid":"17","usps_abbrev":"IL","fips_code":"17"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-90.309289,34.995694],[-89.878364,34.994327],[-89.617973,34.995217],[-89.486693,34.993978],[-88.925242,34.994842],[-88.620196,34.995465],[-88.200064,34.995636],[-88.202959,35.008028],[-88.000032,35.005942],[-87.662256,35.003537],[-87.429968,35.002791],[-87.084881,34.996462],[-86.836306,34.991899],[-86.467941,34.990486],[-86.248019,34.990421],[-85.828767,34.988069],[-85.605165,34.984678],[-85.466509,34.982971],[-84.952772,34.987943],[-84.809184,34.987569],[-84.321869,34.988408],[-84.29024,35.225572],[-84.211818,35.266078],[-84.199117,35.243679],[-84.107006,35.251409],[-84.055712,35.268182],[-84.02141,35.300983],[-84.03551,35.317783],[-84.038327,35.347813],[-84.0074,35.371643],[-84.014707,35.411984],[-83.992131,35.440402],[-83.937015,35.471511],[-83.911773,35.476028],[-83.882563,35.517182],[-83.82559,35.523829],[-83.771736,35.562118],[-83.707199,35.568533],[-83.640958,35.565712],[-83.601854,35.578228],[-83.56609,35.565993],[-83.498335,35.56298],[-83.445802,35.611803],[-83.421576,35.611186],[-83.366941,35.638728],[-83.334965,35.665471],[-83.31049,35.654452],[-83.254231,35.695807],[-83.24067,35.726759],[-83.185694,35.729888],[-83.159208,35.764892],[-83.120183,35.766234],[-83.078732,35.789472],[-83.036209,35.787405],[-82.995803,35.773128],[-82.974245,35.786967],[-82.94383,35.825637],[-82.916273,35.841603],[-82.920609,35.868472],[-82.896583,35.878471],[-82.914381,35.929683],[-82.898506,35.9451],[-82.851603,35.949452],[-82.820411,35.922077],[-82.787465,35.952163],[-82.775866,36.000803],[-82.715365,36.023804],[-82.684765,36.045004],[-82.636379,36.065903],[-82.590663,36.032106],[-82.612604,35.993488],[-82.610889,35.967409],[-82.549682,35.964275],[-82.505384,35.97768],[-82.460597,36.007897],[-82.410158,36.082709],[-82.355657,36.115309],[-82.336056,36.115009],[-82.288955,36.13571],[-82.245053,36.131011],[-82.213852,36.159112],[-82.176849,36.142214],[-82.148748,36.149615],[-82.130246,36.104517],[-82.079743,36.10652],[-82.054142,36.126821],[-82.033141,36.120422],[-81.908136,36.302013],[-81.879641,36.313654],[-81.855095,36.337186],[-81.797544,36.358428],[-81.764927,36.338672],[-81.717405,36.347779],[-81.741524,36.412653],[-81.720842,36.422454],[-81.715023,36.454899],[-81.694948,36.467449],[-81.696823,36.506112],[-81.708067,36.535705],[-81.679115,36.569047],[-81.677393,36.588156],[-81.6469,36.611918],[-81.922644,36.616213],[-81.93414,36.594213],[-82.210792,36.595861],[-82.622603,36.593797],[-82.887946,36.593461],[-83.261099,36.593887],[-83.2763,36.598187],[-83.499909,36.597234],[-83.675395,36.600784],[-83.690789,36.582596],[-83.999943,36.589857],[-84.271545,36.591703],[-84.540474,36.596304],[-84.830035,36.604536],[-84.991632,36.617041],[-85.109237,36.622885],[-85.276867,36.626827],[-85.50151,36.614855],[-85.832432,36.6221],[-86.032922,36.630736],[-86.332126,36.648701],[-86.507781,36.652379],[-86.564255,36.633583],[-86.589906,36.652443],[-86.734208,36.648898],[-87.070491,36.64273],[-87.474687,36.640415],[-87.853319,36.63316],[-87.849544,36.663695],[-88.012203,36.67719],[-88.070541,36.678255],[-88.044862,36.60307],[-88.032675,36.536985],[-88.053293,36.497058],[-88.216645,36.499827],[-88.77157,36.502729],[-88.959746,36.502076],[-89.30102,36.507233],[-89.41727,36.499011],[-89.453514,36.461789],[-89.476643,36.458393],[-89.494119,36.476268],[-89.485427,36.497491],[-89.539232,36.497934],[-89.520642,36.478668],[-89.54234,36.420103],[-89.509722,36.373626],[-89.531822,36.339246],[-89.610689,36.340442],[-89.611819,36.309088],[-89.578492,36.288317],[-89.536441,36.272827],[-89.534676,36.252771],[-89.611145,36.239271],[-89.651407,36.250683],[-89.695235,36.252766],[-89.69263,36.224959],[-89.607,36.171179],[-89.59307,36.129699],[-89.680029,36.082494],[-89.687254,36.034048],[-89.706932,36.000981],[-89.733095,36.000608],[-89.71304,35.961644],[-89.656147,35.92581],[-89.644395,35.894782],[-89.66599,35.882868],[-89.714934,35.906247],[-89.742606,35.906653],[-89.772855,35.876244],[-89.761524,35.857239],[-89.709261,35.838911],[-89.704387,35.819607],[-89.74164,35.805633],[-89.758396,35.810469],[-89.796324,35.792807],[-89.820876,35.756868],[-89.877256,35.741369],[-89.906847,35.759699],[-89.950277,35.738494],[-89.955753,35.690621],[-89.929435,35.658974],[-89.886979,35.653637],[-89.857942,35.668312],[-89.856619,35.634444],[-89.896998,35.614882],[-89.947815,35.600093],[-89.957898,35.585474],[-89.945651,35.561558],[-89.910408,35.548761],[-89.918001,35.514136],[-89.945026,35.519388],[-89.957113,35.539818],[-89.989499,35.560136],[-90.03955,35.548557],[-90.050437,35.515894],[-90.043462,35.492339],[-90.019108,35.465067],[-90.031584,35.427662],[-90.069434,35.408163],[-90.068156,35.46678],[-90.08365,35.478297],[-90.118928,35.468328],[-90.129447,35.44193],[-90.168882,35.422206],[-90.179265,35.385194],[-90.143475,35.387602],[-90.142624,35.407669],[-90.114373,35.411108],[-90.074992,35.384152],[-90.107312,35.343143],[-90.109093,35.304987],[-90.163812,35.296115],[-90.168794,35.279088],[-90.152094,35.255989],[-90.09949,35.251393],[-90.07934,35.228838],[-90.097408,35.194794],[-90.117393,35.18789],[-90.066591,35.13599],[-90.10059,35.116691],[-90.139024,35.133995],[-90.173603,35.118073],[-90.209397,35.026546],[-90.291996,35.041793],[-90.309289,34.995694]]]},"properties":{"name":"Tennessee","ns_code":"01325873","geoid":"47","usps_abbrev":"TN","fips_code":"47"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-84.820157,39.105489],[-84.820102,39.25141],[-84.815754,39.478652],[-84.814187,39.813687],[-84.811209,39.99545],[-84.804159,40.275046],[-84.802253,40.63035],[-84.803148,40.958992],[-84.8036,41.275272],[-84.805972,41.696118],[-84.80588,41.760171],[-84.980969,41.759491],[-85.308274,41.759947],[-85.750291,41.758969],[-86.108465,41.760697],[-86.443566,41.759553],[-86.87503,41.760335],[-87.207774,41.760956],[-87.523661,41.759907],[-87.526675,41.32691],[-87.525661,40.836132],[-87.526168,40.505761],[-87.53153,40.142775],[-87.533269,39.875036],[-87.532707,39.666203],[-87.531646,39.347888],[-87.589084,39.333831],[-87.60592,39.311076],[-87.604947,39.260212],[-87.580652,39.255237],[-87.574615,39.223931],[-87.585725,39.200396],[-87.619603,39.186032],[-87.658745,39.135997],[-87.61838,39.104284],[-87.572588,39.057286],[-87.573466,38.985441],[-87.529496,38.971925],[-87.513346,38.956],[-87.51912,38.922603],[-87.552028,38.860318],[-87.525893,38.848795],[-87.526816,38.817369],[-87.495905,38.785434],[-87.51961,38.697198],[-87.534435,38.681754],[-87.597247,38.665314],[-87.627345,38.607237],[-87.621401,38.586118],[-87.670071,38.545237],[-87.656144,38.521668],[-87.685921,38.491843],[-87.744639,38.477271],[-87.73082,38.449228],[-87.743772,38.413115],[-87.784994,38.368011],[-87.806075,38.363143],[-87.832723,38.324853],[-87.830953,38.299365],[-87.85113,38.27512],[-87.937329,38.292431],[-87.984838,38.228674],[-87.969865,38.191786],[-87.910924,38.162557],[-87.944825,38.127272],[-87.974781,38.110515],[-88.013118,38.103527],[-88.004697,38.083965],[-87.960677,38.100191],[-87.967226,38.067105],[-88.034132,38.032045],[-88.012574,37.977062],[-88.037013,37.956276],[-88.013355,37.894854],[-88.094956,37.893689],[-88.028016,37.799188],[-88.015487,37.801948],[-87.945991,37.773578],[-87.931794,37.7982],[-87.906939,37.807593],[-87.910017,37.843018],[-87.936301,37.867873],[-87.938548,37.890769],[-87.897144,37.927756],[-87.874,37.92272],[-87.832994,37.877143],[-87.794177,37.875356],[-87.759432,37.891861],[-87.711657,37.893872],[-87.684343,37.903754],[-87.666904,37.876795],[-87.681684,37.856273],[-87.673447,37.829873],[-87.615583,37.831848],[-87.588435,37.861685],[-87.592826,37.889688],[-87.628067,37.922892],[-87.601573,37.971304],[-87.577996,37.97057],[-87.556567,37.928606],[-87.50972,37.906028],[-87.463403,37.93494],[-87.428307,37.945047],[-87.377697,37.934391],[-87.344793,37.911099],[-87.318228,37.90497],[-87.219945,37.84889],[-87.164747,37.841353],[-87.14097,37.815112],[-87.128604,37.78577],[-87.091069,37.786964],[-87.06967,37.801513],[-87.043285,37.868552],[-87.040163,37.901215],[-86.9766,37.930965],[-86.919834,37.93639],[-86.851933,37.989029],[-86.815746,37.998957],[-86.79551,37.989453],[-86.752705,37.915372],[-86.718671,37.893057],[-86.680397,37.915077],[-86.645801,37.907208],[-86.660653,37.864247],[-86.648393,37.841453],[-86.604699,37.858127],[-86.600173,37.9044],[-86.58848,37.921346],[-86.541991,37.917034],[-86.507089,37.929917],[-86.525095,37.968081],[-86.52503,38.028902],[-86.513233,38.044054],[-86.456793,38.049031],[-86.433923,38.065705],[-86.432672,38.08527],[-86.465503,38.104306],[-86.443207,38.127762],[-86.403487,38.104563],[-86.375953,38.130539],[-86.332099,38.129929],[-86.325874,38.154029],[-86.366055,38.161531],[-86.37741,38.188574],[-86.347736,38.195363],[-86.29574,38.164069],[-86.272847,38.140835],[-86.2791,38.100754],[-86.267769,38.057171],[-86.221352,38.028669],[-86.17893,38.01081],[-86.1216,38.016052],[-86.079389,38.000625],[-86.049012,37.959861],[-86.021667,37.995793],[-85.943132,38.006622],[-85.923428,38.025247],[-85.90499,38.089818],[-85.909289,38.142235],[-85.904063,38.173427],[-85.884282,38.19957],[-85.851694,38.222445],[-85.835456,38.266666],[-85.821706,38.281119],[-85.780743,38.288352],[-85.743213,38.267283],[-85.685208,38.294692],[-85.655355,38.323849],[-85.62037,38.423462],[-85.586033,38.450092],[-85.52479,38.457636],[-85.49851,38.468495],[-85.475124,38.503689],[-85.42339,38.531845],[-85.415977,38.563654],[-85.439729,38.611493],[-85.438586,38.658102],[-85.455042,38.681263],[-85.452087,38.709785],[-85.407994,38.737136],[-85.372265,38.73045],[-85.305858,38.741536],[-85.258946,38.73777],[-85.221119,38.701058],[-85.173048,38.688022],[-85.13199,38.702916],[-85.073036,38.74104],[-84.991927,38.778537],[-84.933516,38.777501],[-84.887285,38.794776],[-84.812534,38.786729],[-84.825963,38.83663],[-84.790436,38.861246],[-84.786613,38.882416],[-84.81477,38.895511],[-84.869014,38.899667],[-84.877535,38.920689],[-84.835155,38.957929],[-84.838579,38.989902],[-84.897098,39.057137],[-84.820157,39.105489]]]},"properties":{"name":"Indiana","ns_code":"00448508","geoid":"18","usps_abbrev":"IN","fips_code":"18"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-95.765645,40.585208],[-95.488514,40.581735],[-94.99166,40.575692],[-94.594196,40.57096],[-94.282994,40.571469],[-94.07214,40.573026],[-93.547578,40.580407],[-93.260429,40.580814],[-93.0135,40.586297],[-92.659409,40.590341],[-92.485216,40.595085],[-92.096611,40.601831],[-91.8684,40.608056],[-91.729115,40.61364],[-91.68882,40.583409],[-91.681714,40.553035],[-91.621902,40.542292],[-91.616948,40.504794],[-91.594644,40.494997],[-91.567743,40.46229],[-91.526155,40.458625],[-91.524612,40.410765],[-91.483153,40.382492],[-91.441243,40.386255],[-91.419422,40.378264],[-91.375712,40.391925],[-91.381045,40.44849],[-91.364915,40.484168],[-91.369059,40.512532],[-91.406202,40.542698],[-91.359873,40.601805],[-91.310048,40.625041],[-91.247851,40.63839],[-91.185295,40.637803],[-91.12082,40.672777],[-91.115735,40.725168],[-91.092476,40.776838],[-91.096946,40.811403],[-91.044653,40.868356],[-90.9985,40.90812],[-90.962916,40.924957],[-90.951967,40.958238],[-90.958142,40.979767],[-90.942253,41.034702],[-90.94626,41.09473],[-90.989662,41.155707],[-91.041875,41.166484],[-91.065899,41.199517],[-91.112348,41.239002],[-91.11419,41.250029],[-91.073553,41.310481],[-91.065058,41.369101],[-91.048259,41.409748],[-91.02779,41.423603],[-90.975168,41.433985],[-90.930691,41.421368],[-90.84746,41.455019],[-90.73754,41.450127],[-90.655839,41.462132],[-90.605937,41.494232],[-90.595237,41.511032],[-90.540935,41.526133],[-90.500633,41.518033],[-90.461432,41.523533],[-90.412825,41.565329],[-90.343228,41.587833],[-90.343452,41.646959],[-90.334525,41.679559],[-90.313052,41.699631],[-90.315549,41.734426],[-90.278633,41.767358],[-90.187969,41.803163],[-90.170041,41.876439],[-90.153584,41.906614],[-90.162141,41.961293],[-90.140061,42.003252],[-90.164485,42.042105],[-90.162895,42.116718],[-90.201404,42.130937],[-90.209479,42.15268],[-90.282173,42.178846],[-90.328273,42.201047],[-90.356964,42.205445],[-90.391108,42.225473],[-90.419326,42.254467],[-90.431039,42.282452],[-90.415937,42.322699],[-90.477941,42.384151],[-90.555018,42.416138],[-90.570736,42.441701],[-90.624328,42.458904],[-90.654027,42.478503],[-90.640927,42.508302],[-90.645627,42.5441],[-90.686975,42.591774],[-90.702671,42.630756],[-90.720209,42.640758],[-90.952415,42.686778],[-91.051275,42.737001],[-91.065606,42.756766],[-91.10056,42.883078],[-91.143491,42.904698],[-91.14655,42.963345],[-91.174692,43.038713],[-91.179382,43.068624],[-91.175253,43.134665],[-91.1562,43.142945],[-91.119115,43.200366],[-91.079278,43.228259],[-91.05791,43.253968],[-91.085652,43.29187],[-91.129121,43.32635],[-91.201847,43.349103],[-91.21477,43.365874],[-91.19767,43.395334],[-91.203144,43.419805],[-91.232241,43.460018],[-91.217706,43.50055],[-91.632178,43.500441],[-92.029845,43.500621],[-92.464473,43.50029],[-92.830258,43.499555],[-93.298874,43.499459],[-93.919733,43.499766],[-94.274829,43.500141],[-94.914574,43.500872],[-95.433839,43.500113],[-95.97247,43.500063],[-96.45326,43.50039],[-96.599191,43.500456],[-96.582402,43.466739],[-96.593339,43.433151],[-96.52172,43.386755],[-96.535022,43.336674],[-96.524522,43.312067],[-96.586525,43.273715],[-96.549534,43.248372],[-96.555281,43.226666],[-96.51754,43.217825],[-96.476729,43.221987],[-96.469556,43.158353],[-96.436567,43.119818],[-96.454063,43.097331],[-96.460742,43.064337],[-96.510851,43.04977],[-96.51395,43.030075],[-96.491981,43.010197],[-96.52082,42.979923],[-96.499283,42.958745],[-96.533761,42.928492],[-96.528536,42.897666],[-96.546561,42.874524],[-96.544831,42.850193],[-96.57783,42.829067],[-96.60356,42.783997],[-96.619849,42.783792],[-96.635561,42.740847],[-96.605596,42.70202],[-96.516084,42.630275],[-96.496026,42.580382],[-96.47696,42.555972],[-96.488163,42.511284],[-96.47719,42.491011],[-96.445483,42.49063],[-96.401962,42.48644],[-96.380705,42.446393],[-96.41031,42.412965],[-96.407998,42.337408],[-96.369969,42.310878],[-96.367977,42.290681],[-96.331312,42.259408],[-96.323723,42.229887],[-96.35987,42.210553],[-96.346688,42.164686],[-96.309758,42.132101],[-96.267486,42.10978],[-96.279201,42.073544],[-96.268063,42.041705],[-96.234356,42.040712],[-96.222823,42.023817],[-96.184711,42.004972],[-96.191971,41.985347],[-96.129186,41.965136],[-96.142265,41.915379],[-96.162067,41.903047],[-96.136525,41.864151],[-96.111252,41.850229],[-96.109746,41.823992],[-96.064897,41.791673],[-96.105194,41.731195],[-96.075865,41.714785],[-96.121048,41.677002],[-96.095131,41.647767],[-96.115995,41.622024],[-96.11364,41.601955],[-96.081188,41.574296],[-96.096617,41.545626],[-96.057331,41.511051],[-96.03429,41.513036],[-96.026657,41.540366],[-95.999966,41.53948],[-95.992777,41.514596],[-96.01738,41.492139],[-96.004047,41.472146],[-95.93634,41.465304],[-95.919989,41.452604],[-95.937694,41.39477],[-95.928774,41.37008],[-95.95713,41.349593],[-95.925185,41.321355],[-95.885554,41.318097],[-95.87748,41.284583],[-95.928646,41.281332],[-95.911296,41.239442],[-95.926117,41.211619],[-95.915428,41.185145],[-95.867624,41.188416],[-95.882944,41.154572],[-95.862427,41.089687],[-95.882225,41.063539],[-95.860862,41.038547],[-95.863492,40.99734],[-95.832055,40.98114],[-95.836438,40.921642],[-95.812083,40.884239],[-95.847785,40.864328],[-95.837186,40.835347],[-95.843745,40.803783],[-95.836903,40.776477],[-95.881529,40.750611],[-95.883178,40.717579],[-95.852615,40.702262],[-95.842801,40.677496],[-95.789485,40.659388],[-95.769759,40.622884],[-95.751271,40.609057],[-95.765645,40.585208]]]},"properties":{"name":"Iowa","ns_code":"01779785","geoid":"19","usps_abbrev":"IA","fips_code":"19"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-109.050044,31.332502],[-109.049186,31.797381],[-109.048142,32.160736],[-109.047612,32.426377],[-109.047117,32.777569],[-109.047483,33.067912],[-109.046564,33.375059],[-109.047145,33.74001],[-109.046765,34.17382],[-109.046175,34.520102],[-109.045866,34.949127],[-109.046084,35.249986],[-109.046523,35.523433],[-109.046348,35.75724],[-109.045726,36.116908],[-109.045946,36.375002],[-109.045554,36.644972],[-109.045223,36.999084],[-109.495338,36.999105],[-109.750669,36.99816],[-110.023043,36.998601],[-110.47019,36.997997],[-110.509004,37.003985],[-110.75723,37.003273],[-111.278221,37.000467],[-111.751401,37.001234],[-112.000735,37.000959],[-112.302044,37.001053],[-112.750761,37.000483],[-113.052912,36.999983],[-113.572079,36.999981],[-114.0506,37.000396],[-114.049935,36.709521],[-114.043135,36.380478],[-114.045559,36.288837],[-114.043944,36.19335],[-114.066798,36.179087],[-114.1534,36.02317],[-114.174683,36.02667],[-114.211932,36.014834],[-114.243865,36.015266],[-114.270862,36.045523],[-114.314427,36.060523],[-114.304171,36.07558],[-114.323458,36.101186],[-114.370181,36.142624],[-114.412491,36.146511],[-114.443736,36.125593],[-114.456487,36.138032],[-114.504715,36.127188],[-114.508104,36.149713],[-114.57109,36.151099],[-114.620605,36.131759],[-114.627079,36.140761],[-114.681847,36.109192],[-114.734085,36.104672],[-114.754508,36.086171],[-114.723324,36.026588],[-114.740866,36.012928],[-114.740536,35.975545],[-114.707603,35.92795],[-114.708112,35.909933],[-114.663214,35.873692],[-114.706076,35.845873],[-114.695757,35.833387],[-114.712026,35.805529],[-114.694267,35.756633],[-114.705447,35.711757],[-114.682657,35.688571],[-114.689001,35.65028],[-114.653927,35.611739],[-114.670191,35.583471],[-114.65677,35.534964],[-114.678892,35.501276],[-114.663541,35.447797],[-114.627325,35.410193],[-114.595163,35.321883],[-114.569529,35.162317],[-114.578263,35.12881],[-114.626316,35.120423],[-114.645152,35.104995],[-114.604182,35.073715],[-114.63819,35.022069],[-114.633487,35.001857],[-114.629392,34.983171],[-114.628276,34.863596],[-114.592339,34.841153],[-114.552682,34.766871],[-114.516619,34.736745],[-114.47162,34.712966],[-114.442363,34.644153],[-114.435671,34.593841],[-114.405228,34.569637],[-114.380838,34.529724],[-114.386699,34.457911],[-114.371217,34.446992],[-114.339627,34.451435],[-114.301016,34.426807],[-114.291154,34.409784],[-114.262909,34.400373],[-114.226107,34.365916],[-114.176909,34.349306],[-114.138282,34.30323],[-114.13545,34.257886],[-114.164476,34.251667],[-114.254141,34.17383],[-114.286724,34.170715],[-114.324576,34.136759],[-114.366517,34.118577],[-114.415908,34.107636],[-114.434181,34.087379],[-114.438266,34.022609],[-114.46012,33.993888],[-114.499883,33.961789],[-114.522002,33.955623],[-114.534146,33.925187],[-114.503887,33.865754],[-114.529597,33.848063],[-114.52805,33.814963],[-114.507089,33.76793],[-114.512348,33.734214],[-114.496489,33.696901],[-114.523959,33.685879],[-114.533215,33.648443],[-114.522071,33.611277],[-114.540617,33.591412],[-114.524215,33.553068],[-114.558023,33.532589],[-114.560963,33.516739],[-114.589246,33.501813],[-114.622918,33.456561],[-114.62964,33.428137],[-114.720065,33.407891],[-114.699056,33.361148],[-114.700938,33.337014],[-114.731223,33.302433],[-114.723259,33.288079],[-114.677032,33.270169],[-114.689421,33.24525],[-114.674479,33.225504],[-114.67935,33.162433],[-114.707896,33.097431],[-114.68902,33.084035],[-114.670803,33.037983],[-114.639552,33.04529],[-114.618788,33.027202],[-114.578287,33.035375],[-114.52013,33.029984],[-114.506362,33.017403],[-114.490129,32.969884],[-114.467624,32.956663],[-114.480925,32.936276],[-114.462929,32.907944],[-114.468971,32.845155],[-114.510327,32.816488],[-114.531669,32.791185],[-114.526856,32.757094],[-114.564447,32.749554],[-114.581784,32.734946],[-114.615976,32.728489],[-114.689618,32.738171],[-114.719633,32.718763],[-114.751079,32.659789],[-114.781896,32.624702],[-114.809555,32.616203],[-114.799683,32.593621],[-114.813644,32.567515],[-114.802559,32.535521],[-114.813613,32.494276],[-114.383941,32.36449],[-114.125773,32.285325],[-113.750756,32.169005],[-113.461183,32.078832],[-113.125961,31.97278],[-112.871505,31.896838],[-112.503812,31.783912],[-112.200717,31.690033],[-111.659381,31.519336],[-111.285239,31.400178],[-111.074825,31.332239],[-110.750638,31.333636],[-110.460172,31.332827],[-109.875628,31.33405],[-109.500621,31.333911],[-109.050044,31.332502]]]},"properties":{"name":"Arizona","ns_code":"01779777","geoid":"04","usps_abbrev":"AZ","fips_code":"04"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-96.563672,45.935245],[-96.574517,45.844044],[-96.583085,45.820024],[-96.639222,45.772096],[-96.672665,45.732336],[-96.75035,45.698782],[-96.759312,45.688744],[-96.838648,45.647509],[-96.856834,45.605378],[-96.763432,45.520007],[-96.7314,45.45702],[-96.680454,45.410499],[-96.619752,45.408884],[-96.489065,45.357071],[-96.453097,45.300751],[-96.45197,44.962516],[-96.451234,44.718273],[-96.452275,44.302118],[-96.453404,44.025431],[-96.452858,43.822701],[-96.45326,43.50039],[-95.97247,43.500063],[-95.433839,43.500113],[-94.914574,43.500872],[-94.274829,43.500141],[-93.919733,43.499766],[-93.298874,43.499459],[-92.830258,43.499555],[-92.464473,43.50029],[-92.029845,43.500621],[-91.632178,43.500441],[-91.217706,43.50055],[-91.24382,43.54913],[-91.236666,43.587656],[-91.268748,43.615348],[-91.26845,43.709824],[-91.244135,43.774667],[-91.262433,43.79217],[-91.284138,43.847065],[-91.35674,43.916564],[-91.36472,43.93488],[-91.406011,43.963929],[-91.440541,44.001518],[-91.507121,44.01898],[-91.5826,44.027381],[-91.646446,44.063337],[-91.710597,44.12048],[-91.817302,44.164235],[-91.875158,44.200575],[-91.892963,44.235149],[-91.887189,44.252513],[-91.928224,44.335473],[-91.959996,44.359797],[-92.038147,44.388731],[-92.053549,44.401375],[-92.123679,44.42184],[-92.221083,44.440386],[-92.282364,44.477707],[-92.298484,44.494621],[-92.317357,44.542512],[-92.347567,44.557149],[-92.432527,44.565705],[-92.539909,44.567456],[-92.568946,44.603372],[-92.622537,44.616054],[-92.621847,44.639018],[-92.664715,44.663379],[-92.732043,44.714345],[-92.808415,44.751604],[-92.765668,44.84101],[-92.773946,44.889997],[-92.750645,44.937299],[-92.769445,44.97215],[-92.761953,45.0221],[-92.802911,45.065403],[-92.744938,45.108309],[-92.766808,45.185466],[-92.751708,45.218666],[-92.762004,45.288213],[-92.737121,45.300459],[-92.698967,45.336374],[-92.704054,45.35366],[-92.650284,45.398769],[-92.646602,45.441635],[-92.680234,45.464344],[-92.726677,45.514462],[-92.726082,45.541112],[-92.773412,45.568235],[-92.823309,45.560934],[-92.883749,45.575483],[-92.888114,45.628377],[-92.869193,45.717568],[-92.809837,45.744172],[-92.784617,45.764199],[-92.757947,45.811216],[-92.765681,45.827252],[-92.712503,45.891705],[-92.637841,45.934469],[-92.551186,45.95224],[-92.525186,45.983862],[-92.472761,45.972952],[-92.442259,46.016177],[-92.410014,46.027251],[-92.350407,46.016368],[-92.335335,46.059422],[-92.294033,46.074377],[-92.292683,46.441283],[-92.292192,46.666042],[-92.265993,46.651041],[-92.212392,46.649941],[-92.176259,46.690473],[-92.189091,46.717541],[-92.146292,46.716032],[-92.13789,46.73954],[-92.089493,46.749237],[-92.020294,46.704041],[-91.981341,46.723091],[-91.875186,46.763303],[-91.59214,46.874935],[-91.500181,46.91332],[-91.319638,46.999929],[-91.000198,47.149758],[-90.654661,47.309822],[-90.264218,47.30027],[-89.957102,47.291103],[-89.820034,47.49991],[-89.625167,47.799549],[-89.483385,48.013716],[-89.581485,47.995925],[-89.617867,48.010947],[-89.715906,48.009246],[-89.734025,48.021871],[-89.819802,48.015099],[-89.871245,47.985945],[-89.89908,47.988057],[-89.99305,48.028404],[-89.993822,48.049027],[-90.023595,48.084708],[-90.132645,48.111768],[-90.224692,48.108148],[-90.28934,48.098993],[-90.305634,48.105117],[-90.375817,48.091214],[-90.403219,48.105114],[-90.438449,48.098747],[-90.556838,48.096008],[-90.579897,48.123922],[-90.641595,48.103515],[-90.74152,48.094583],[-90.761629,48.09828],[-90.797088,48.13926],[-90.804207,48.177834],[-90.832589,48.173765],[-90.839176,48.239511],[-90.88548,48.245784],[-90.97694,48.21943],[-91.031588,48.188456],[-91.082734,48.180764],[-91.250112,48.084087],[-91.29021,48.073947],[-91.370875,48.069417],[-91.429642,48.048608],[-91.450331,48.068805],[-91.48865,48.068073],[-91.575658,48.048792],[-91.569735,48.093345],[-91.588718,48.102217],[-91.640173,48.096931],[-91.653563,48.109568],[-91.711844,48.114605],[-91.698162,48.141645],[-91.715233,48.199297],[-91.781174,48.200433],[-91.816209,48.21175],[-91.864382,48.207031],[-91.89347,48.237699],[-91.945155,48.230442],[-91.954466,48.251838],[-92.006574,48.265423],[-92.012973,48.297392],[-92.000126,48.321354],[-92.083489,48.353868],[-92.161983,48.363306],[-92.206803,48.345596],[-92.262275,48.354931],[-92.288994,48.34299],[-92.301451,48.28861],[-92.28073,48.244275],[-92.314665,48.240527],[-92.370103,48.220299],[-92.415111,48.293845],[-92.469949,48.351837],[-92.47675,48.37176],[-92.45639,48.401134],[-92.507285,48.447876],[-92.656027,48.436709],[-92.712562,48.463013],[-92.698814,48.494885],[-92.636685,48.499434],[-92.634931,48.542873],[-92.728046,48.539289],[-92.929609,48.606884],[-92.950119,48.630419],[-92.984963,48.623731],[-93.089596,48.627705],[-93.17847,48.623279],[-93.207426,48.642419],[-93.25487,48.642746],[-93.347527,48.626619],[-93.371152,48.605069],[-93.404225,48.609337],[-93.465982,48.587287],[-93.467502,48.545661],[-93.547184,48.528674],[-93.632324,48.53009],[-93.645392,48.517274],[-93.794455,48.515986],[-93.81827,48.530028],[-93.805316,48.570298],[-93.821173,48.60629],[-93.844013,48.629384],[-93.926975,48.631203],[-94.006921,48.643124],[-94.157378,48.645712],[-94.244398,48.653421],[-94.264503,48.698861],[-94.308585,48.710176],[-94.342767,48.703247],[-94.416183,48.710917],[-94.438701,48.694878],[-94.538589,48.702641],[-94.592099,48.71912],[-94.694347,48.782184],[-94.70438,48.824263],[-94.684347,48.883958],[-94.718941,48.999991],[-94.750218,48.999992],[-94.750278,49.099273],[-94.773233,49.120732],[-94.798083,49.197871],[-94.79746,49.214353],[-94.825555,49.294389],[-94.816501,49.320997],[-94.854283,49.324108],[-94.957439,49.370066],[-95.058375,49.35313],[-95.115861,49.366505],[-95.153314,49.384358],[-95.153711,48.998903],[-95.368698,48.998729],[-95.922542,48.999734],[-96.625311,48.999982],[-96.929983,48.999984],[-97.228722,49.000562],[-97.234128,48.947898],[-97.199891,48.88259],[-97.17302,48.851568],[-97.183988,48.834085],[-97.150559,48.782562],[-97.136403,48.725733],[-97.105442,48.689648],[-97.09991,48.658522],[-97.12424,48.633973],[-97.164405,48.557047],[-97.152765,48.530285],[-97.14208,48.463347],[-97.149236,48.443358],[-97.131479,48.406586],[-97.15721,48.385732],[-97.155481,48.363768],[-97.126745,48.34214],[-97.13125,48.319543],[-97.11657,48.279661],[-97.135835,48.236919],[-97.13165,48.20711],[-97.149755,48.185824],[-97.146531,48.144055],[-97.098829,48.071477],[-97.071288,48.045797],[-97.0556,47.949085],[-97.018107,47.920228],[-97.02544,47.885935],[-97.005447,47.87024],[-96.899237,47.689579],[-96.888092,47.639648],[-96.849908,47.590754],[-96.86175,47.541398],[-96.849853,47.497311],[-96.855814,47.439723],[-96.865852,47.418975],[-96.837974,47.38273],[-96.852871,47.375009],[-96.830618,47.338014],[-96.843857,47.292939],[-96.829126,47.234723],[-96.839359,47.196357],[-96.822062,47.185175],[-96.83472,47.15639],[-96.81619,47.108481],[-96.826147,47.076497],[-96.817737,47.051118],[-96.834839,47.007254],[-96.791758,46.928465],[-96.759599,46.915708],[-96.776713,46.895619],[-96.775059,46.840363],[-96.802544,46.811521],[-96.787136,46.785651],[-96.7811,46.722048],[-96.79951,46.675245],[-96.796041,46.631209],[-96.745697,46.571027],[-96.750448,46.544048],[-96.735054,46.48057],[-96.713672,46.465012],[-96.7162,46.436679],[-96.693927,46.422081],[-96.667422,46.376117],[-96.59966,46.330481],[-96.597792,46.22888],[-96.584378,46.203539],[-96.588387,46.179084],[-96.554436,46.084186],[-96.577875,46.027034],[-96.563672,45.935245]]]},"properties":{"name":"Minnesota","ns_code":"00662849","geoid":"27","usps_abbrev":"MN","fips_code":"27"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-93.814351,29.596576],[-93.779317,29.611689],[-93.766521,29.634305],[-93.770147,29.670825],[-93.686728,29.694812],[-93.487754,29.717811],[-93.387246,29.713771],[-93.349444,29.695406],[-93.303627,29.706102],[-93.287354,29.724331],[-93.223168,29.726396],[-93.12515,29.706209],[-92.977,29.659582],[-92.806757,29.586386],[-92.750712,29.564883],[-92.632538,29.529718],[-92.55982,29.518179],[-92.40502,29.500289],[-92.29367,29.481496],[-92.223462,29.494713],[-92.146666,29.532037],[-92.07805,29.531489],[-92.045616,29.505806],[-92.02985,29.475961],[-91.98387,29.460713],[-91.964831,29.439392],[-91.913207,29.420207],[-91.897652,29.375219],[-91.875032,29.361992],[-91.840934,29.36019],[-91.77749,29.396084],[-91.723408,29.363418],[-91.699993,29.360089],[-91.644044,29.375555],[-91.56832,29.348068],[-91.52974,29.344455],[-91.421128,29.302828],[-91.318698,29.208357],[-91.292681,29.196177],[-91.207845,29.171159],[-91.149359,29.165084],[-91.118387,29.14277],[-91.006054,29.119994],[-91.000899,29.100481],[-91.02303,29.067398],[-91.008759,29.026902],[-90.970287,29.005027],[-90.90708,28.991132],[-90.822648,28.985911],[-90.720765,28.99263],[-90.552547,29.036806],[-90.479847,29.008612],[-90.40938,28.99534],[-90.344319,29.003178],[-90.239062,29.033104],[-90.200696,29.036184],[-90.151252,29.056345],[-90.092594,29.09199],[-90.032325,29.135044],[-89.610427,29.198635],[-89.553649,29.185976],[-89.502319,29.158376],[-89.468673,29.107461],[-89.46342,29.08282],[-89.465736,28.974437],[-89.491844,28.919406],[-89.48764,28.887371],[-89.456527,28.860609],[-89.425697,28.855127],[-89.384727,28.871503],[-89.279604,28.977783],[-89.234903,28.987152],[-89.209579,28.970199],[-89.196536,28.939964],[-89.169067,28.922574],[-89.13328,28.919728],[-89.096055,28.942493],[-89.088826,28.961147],[-89.045638,29.006942],[-89.012688,29.02768],[-88.996902,29.085304],[-88.927809,29.117275],[-88.91324,29.154574],[-88.909151,29.200161],[-88.91831,29.236276],[-88.942054,29.253742],[-89.022615,29.274463],[-89.069426,29.294297],[-89.094528,29.328932],[-89.112159,29.339672],[-89.137612,29.381429],[-89.142073,29.429465],[-89.119451,29.458065],[-89.072295,29.470838],[-89.038874,29.492229],[-88.960204,29.577104],[-88.912657,29.61178],[-88.869937,29.657099],[-88.82343,29.714992],[-88.801817,29.750197],[-88.767255,29.840771],[-88.758388,29.918271],[-88.764495,29.971944],[-88.778234,30.014066],[-88.811647,30.06749],[-88.839407,30.091158],[-88.875025,30.102495],[-88.90033,30.16998],[-88.94161,30.159419],[-89.000032,30.1611],[-89.029181,30.177874],[-89.074653,30.154294],[-89.183669,30.212155],[-89.25004,30.185519],[-89.288394,30.17847],[-89.416711,30.177639],[-89.504735,30.157923],[-89.538635,30.19589],[-89.571907,30.180721],[-89.616828,30.225772],[-89.631614,30.257013],[-89.630622,30.337491],[-89.657287,30.357183],[-89.683708,30.405586],[-89.683631,30.451787],[-89.721405,30.488883],[-89.752807,30.502962],[-89.779159,30.544029],[-89.78968,30.544656],[-89.818771,30.59288],[-89.820068,30.632808],[-89.841521,30.686568],[-89.842525,30.719942],[-89.822969,30.740075],[-89.831537,30.76761],[-89.804632,30.802511],[-89.770269,30.89939],[-89.750073,30.91293],[-89.75595,30.944119],[-89.735686,30.966573],[-89.728147,31.002431],[-90.210877,31.000654],[-90.7335,30.999218],[-91.122154,30.998908],[-91.636942,30.999416],[-91.590463,31.01727],[-91.564397,31.038965],[-91.56415,31.06683],[-91.625199,31.115963],[-91.624217,31.133729],[-91.589046,31.178586],[-91.595029,31.201969],[-91.644356,31.234414],[-91.641253,31.266917],[-91.558684,31.262176],[-91.518578,31.275283],[-91.510049,31.316822],[-91.548213,31.346084],[-91.54638,31.382763],[-91.568953,31.377629],[-91.578334,31.399067],[-91.548465,31.432668],[-91.532336,31.390275],[-91.504756,31.36498],[-91.472542,31.371069],[-91.472067,31.397076],[-91.499812,31.4201],[-91.513366,31.444396],[-91.515919,31.530729],[-91.475917,31.531266],[-91.443916,31.542466],[-91.407915,31.569366],[-91.422716,31.597065],[-91.486518,31.586566],[-91.517233,31.61346],[-91.497665,31.645371],[-91.463817,31.620365],[-91.423016,31.611265],[-91.400815,31.620465],[-91.395715,31.644165],[-91.397115,31.711364],[-91.369375,31.746903],[-91.320913,31.750064],[-91.279789,31.744751],[-91.28742,31.771964],[-91.348114,31.758163],[-91.363514,31.783363],[-91.345214,31.843861],[-91.294713,31.86046],[-91.283212,31.815762],[-91.262011,31.809362],[-91.245624,31.833165],[-91.265812,31.86486],[-91.233903,31.877607],[-91.20101,31.909159],[-91.18811,31.961358],[-91.16441,31.982557],[-91.106908,31.989357],[-91.075908,32.016827],[-91.087408,32.034056],[-91.141109,32.045654],[-91.16201,32.061855],[-91.139309,32.081753],[-91.098708,32.048355],[-91.080008,32.079154],[-91.038607,32.098253],[-91.030891,32.120558],[-91.005006,32.142851],[-91.002906,32.162052],[-91.049707,32.157352],[-91.052754,32.125777],[-91.08163,32.133992],[-91.11099,32.124644],[-91.162822,32.132694],[-91.174577,32.157311],[-91.16488,32.195743],[-91.133587,32.213431],[-91.11727,32.206668],[-91.083708,32.22645],[-91.061408,32.21865],[-91.034302,32.241548],[-90.983381,32.211767],[-90.969515,32.252053],[-90.984077,32.279953],[-90.947834,32.283486],[-90.916157,32.303582],[-90.912363,32.339454],[-90.986672,32.35176],[-91.004706,32.367244],[-90.99408,32.403861],[-90.965987,32.420654],[-90.993863,32.450851],[-91.027406,32.433942],[-91.093508,32.457441],[-91.115708,32.48234],[-91.116708,32.500138],[-91.093742,32.549127],[-91.049307,32.498539],[-91.000106,32.48229],[-90.987669,32.498481],[-91.018469,32.521019],[-91.057706,32.533777],[-91.080411,32.556468],[-91.030991,32.583347],[-91.003545,32.612271],[-91.025769,32.646572],[-91.049796,32.607188],[-91.121157,32.584806],[-91.142782,32.598899],[-91.152699,32.640757],[-91.126201,32.667135],[-91.063946,32.702925],[-91.060766,32.727494],[-91.125107,32.743195],[-91.1495,32.741931],[-91.165814,32.757841],[-91.16167,32.812465],[-91.143559,32.844738],[-91.105631,32.858396],[-91.070602,32.888658],[-91.064804,32.926464],[-91.080431,32.943206],[-91.086802,32.976266],[-91.106581,32.988937],[-91.135095,32.980108],[-91.131304,32.926918],[-91.163877,32.899476],[-91.196785,32.906784],[-91.212837,32.922103],[-91.201842,32.961212],[-91.166073,33.004106],[-91.587251,33.00631],[-92.041143,33.007784],[-92.219778,33.009166],[-92.55941,33.012734],[-93.000211,33.017625],[-93.49052,33.018442],[-94.042964,33.019219],[-94.043212,32.776803],[-94.042946,32.340572],[-94.04272,31.999263],[-94.006795,31.97343],[-93.970826,31.919968],[-93.90308,31.893922],[-93.901883,31.875168],[-93.872988,31.836696],[-93.874836,31.822314],[-93.839343,31.80033],[-93.822598,31.773559],[-93.836884,31.750171],[-93.794548,31.702076],[-93.823169,31.672893],[-93.8177,31.621638],[-93.838057,31.606795],[-93.820764,31.558221],[-93.785028,31.525962],[-93.742586,31.526229],[-93.719708,31.50584],[-93.749476,31.46869],[-93.692631,31.437192],[-93.704879,31.410881],[-93.674117,31.397681],[-93.667273,31.365413],[-93.67384,31.323855],[-93.687511,31.310813],[-93.659285,31.282106],[-93.613942,31.259375],[-93.618255,31.233105],[-93.589119,31.165889],[-93.54893,31.186601],[-93.539366,31.115207],[-93.563269,31.093592],[-93.52717,31.073189],[-93.524739,31.039007],[-93.539184,31.008212],[-93.56543,30.990579],[-93.531234,30.924388],[-93.558502,30.867905],[-93.553626,30.83514],[-93.592101,30.763675],[-93.61478,30.756064],[-93.608875,30.719117],[-93.631345,30.677872],[-93.6831,30.640763],[-93.678662,30.594097],[-93.713782,30.587584],[-93.738788,30.540975],[-93.706507,30.50991],[-93.716602,30.494424],[-93.698135,30.43888],[-93.757409,30.390813],[-93.764252,30.330229],[-93.729046,30.296705],[-93.704584,30.289949],[-93.703544,30.259321],[-93.720931,30.208461],[-93.692849,30.135213],[-93.724101,30.09301],[-93.720805,30.053043],[-93.739734,30.023987],[-93.790087,29.986564],[-93.806551,29.957445],[-93.830374,29.894358],[-93.859896,29.859921],[-93.922744,29.818808],[-93.92881,29.79708],[-93.89847,29.771577],[-93.888821,29.742234],[-93.87002,29.735482],[-93.837412,29.689885],[-93.814351,29.596576]]]},"properties":{"name":"Louisiana","ns_code":"01629543","geoid":"22","usps_abbrev":"LA","fips_code":"22"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-77.039006,38.791645],[-76.909393,38.892852],[-77.041018,38.995548],[-77.119759,38.934343],[-77.093216,38.905767],[-77.067742,38.899535],[-77.032143,38.850287],[-77.039006,38.791645]]]},"properties":{"name":"District of Columbia","ns_code":"01702382","geoid":"11","usps_abbrev":"DC","fips_code":"11"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-75.166435,38.027834],[-75.249609,38.026715],[-75.624449,37.994195],[-75.648228,37.966771],[-75.647606,37.947025],[-75.691321,37.955496],[-75.761642,37.941366],[-75.80124,37.912174],[-75.952672,37.906827],[-75.943693,37.946133],[-75.993338,37.953487],[-76.052021,37.953578],[-76.233415,37.887638],[-76.257527,37.905738],[-76.338617,37.945286],[-76.412934,37.966332],[-76.465008,38.01322],[-76.516609,38.026783],[-76.535402,38.073626],[-76.596128,38.106892],[-76.610384,38.148516],[-76.700899,38.161359],[-76.800199,38.16888],[-76.839368,38.163609],[-76.872716,38.171686],[-76.915867,38.199603],[-76.94902,38.208418],[-76.962086,38.256964],[-77.00115,38.280174],[-77.030683,38.311622],[-77.014796,38.332367],[-77.018498,38.381941],[-77.05342,38.398813],[-77.086678,38.367928],[-77.137734,38.368023],[-77.163219,38.345823],[-77.235208,38.332536],[-77.283796,38.342855],[-77.304938,38.375271],[-77.3204,38.435221],[-77.318542,38.474437],[-77.255703,38.563318],[-77.246362,38.593441],[-77.203696,38.618172],[-77.129682,38.634704],[-77.136293,38.647231],[-77.122632,38.685256],[-77.081614,38.707926],[-77.043338,38.718468],[-77.039006,38.791645],[-77.032143,38.850287],[-77.067742,38.899535],[-77.093216,38.905767],[-77.119759,38.934343],[-77.145081,38.963146],[-77.197774,38.96674],[-77.244911,38.982614],[-77.255759,39.001991],[-77.245093,39.022146],[-77.340144,39.062909],[-77.386818,39.062241],[-77.460602,39.074843],[-77.481015,39.105689],[-77.518447,39.119782],[-77.527322,39.146961],[-77.507558,39.181367],[-77.481202,39.187909],[-77.45771,39.224979],[-77.484731,39.246052],[-77.54084,39.265269],[-77.568753,39.306447],[-77.588777,39.301591],[-77.644084,39.30875],[-77.675467,39.32436],[-77.719519,39.321314],[-77.747587,39.294834],[-77.771365,39.236493],[-77.798157,39.200703],[-77.828806,39.132773],[-78.158193,39.343391],[-78.262815,39.41434],[-78.347087,39.466012],[-78.346718,39.427618],[-78.359918,39.409028],[-78.343214,39.388807],[-78.366867,39.35929],[-78.340415,39.353628],[-78.360571,39.317597],[-78.419422,39.257476],[-78.399669,39.243874],[-78.438695,39.198093],[-78.403907,39.167738],[-78.427294,39.152726],[-78.459311,39.114273],[-78.479597,39.109505],[-78.571901,39.031995],[-78.550467,39.018065],[-78.601655,38.964603],[-78.629553,38.980866],[-78.680456,38.925313],[-78.719914,38.906076],[-78.739147,38.927134],[-78.759085,38.900529],[-78.78803,38.885123],[-78.869276,38.762991],[-78.993761,38.850021],[-79.047349,38.79181],[-79.092955,38.702002],[-79.092655,38.660417],[-79.131056,38.653218],[-79.158257,38.593119],[-79.205859,38.524521],[-79.210591,38.492913],[-79.254482,38.45593],[-79.279692,38.424211],[-79.312276,38.411876],[-79.476638,38.457228],[-79.521469,38.533918],[-79.53687,38.550917],[-79.649075,38.591515],[-79.662875,38.570416],[-79.680074,38.510617],[-79.699473,38.474527],[-79.689667,38.431462],[-79.706634,38.41573],[-79.742771,38.353367],[-79.809934,38.304681],[-79.788945,38.268703],[-79.850326,38.233324],[-79.897335,38.193381],[-79.929031,38.139771],[-79.92633,38.107147],[-79.953511,38.08148],[-79.98029,38.027596],[-80.008888,37.99083],[-80.069431,37.945463],[-80.140609,37.883932],[-80.162202,37.875122],[-80.206482,37.81597],[-80.248389,37.76825],[-80.262765,37.738336],[-80.258143,37.720612],[-80.296078,37.691731],[-80.267504,37.646156],[-80.220984,37.627767],[-80.258919,37.595499],[-80.328504,37.564315],[-80.31237,37.546225],[-80.299789,37.508271],[-80.425629,37.449885],[-80.475601,37.422949],[-80.49486,37.435072],[-80.492981,37.457749],[-80.511391,37.481672],[-80.552036,37.473563],[-80.645893,37.422147],[-80.705203,37.394618],[-80.770082,37.372363],[-80.784188,37.394587],[-80.837678,37.425658],[-80.863003,37.411514],[-80.883247,37.383933],[-80.849451,37.346909],[-80.89805,37.316779],[-80.951018,37.29497],[-80.987319,37.301359],[-81.104147,37.280605],[-81.167029,37.262881],[-81.225104,37.234874],[-81.320105,37.299323],[-81.362156,37.337687],[-81.394287,37.316411],[-81.416663,37.273214],[-81.437158,37.274065],[-81.560631,37.206663],[-81.678221,37.20154],[-81.740124,37.237752],[-81.746039,37.263398],[-81.789294,37.284416],[-81.825851,37.279311],[-81.853553,37.287706],[-81.874059,37.327674],[-81.897936,37.33367],[-81.928463,37.360871],[-81.93587,37.382856],[-81.928154,37.4145],[-81.945765,37.440214],[-81.99227,37.460916],[-81.996578,37.476705],[-81.939989,37.512591],[-81.968012,37.538035],[-82.142983,37.414842],[-82.316008,37.29483],[-82.355536,37.265147],[-82.439893,37.247005],[-82.550589,37.204483],[-82.633918,37.154179],[-82.715149,37.121848],[-82.726486,37.073411],[-82.742759,37.042796],[-82.782863,37.007821],[-82.82872,37.005798],[-82.830842,36.993556],[-82.869607,36.973343],[-82.857644,36.92885],[-82.87908,36.889255],[-82.969243,36.858019],[-83.072836,36.854457],[-83.099904,36.831147],[-83.09848,36.813517],[-83.128987,36.775784],[-83.13512,36.742629],[-83.194252,36.739519],[-83.347635,36.700199],[-83.418682,36.668729],[-83.492805,36.670187],[-83.532404,36.664689],[-83.567853,36.646051],[-83.613896,36.63485],[-83.675395,36.600784],[-83.499909,36.597234],[-83.2763,36.598187],[-83.261099,36.593887],[-82.887946,36.593461],[-82.622603,36.593797],[-82.210792,36.595861],[-81.93414,36.594213],[-81.922644,36.616213],[-81.6469,36.611918],[-81.677393,36.588156],[-81.600101,36.586851],[-81.520119,36.580449],[-81.374773,36.574736],[-81.286844,36.57509],[-81.008527,36.563959],[-80.840334,36.559199],[-80.730385,36.562348],[-80.294792,36.543957],[-80.11334,36.542606],[-79.887248,36.542865],[-79.563478,36.541009],[-79.24983,36.541139],[-79.070096,36.542034],[-78.511317,36.540951],[-78.249794,36.544459],[-78.14287,36.543679],[-77.749905,36.545518],[-77.372744,36.544639],[-76.919464,36.543863],[-76.915897,36.552093],[-76.802631,36.55055],[-76.292968,36.550551],[-75.797497,36.550916],[-75.819825,36.625153],[-75.874647,36.744305],[-75.92685,36.936457],[-75.889676,37.054515],[-75.824147,37.110122],[-75.781587,37.137116],[-75.744639,37.182349],[-75.729271,37.216901],[-75.732284,37.245694],[-75.715515,37.275687],[-75.644386,37.34227],[-75.643456,37.372864],[-75.604026,37.422024],[-75.595642,37.465584],[-75.528423,37.561308],[-75.541779,37.606145],[-75.515962,37.671538],[-75.460933,37.771356],[-75.417073,37.82105],[-75.366857,37.809789],[-75.337979,37.815232],[-75.296004,37.845752],[-75.238073,37.93539],[-75.166435,38.027834]]]},"properties":{"name":"Virginia","ns_code":"01779803","geoid":"51","usps_abbrev":"VA","fips_code":"51"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-103.002434,36.500397],[-103.041923,36.50035],[-103.040824,36.000037],[-103.041666,35.625043],[-103.042258,35.394355],[-103.04264,35.109974],[-103.042691,34.739882],[-103.043762,34.31275],[-103.044173,33.974557],[-103.049608,33.737766],[-103.053903,33.506965],[-103.064639,33.000106],[-103.064968,32.754674],[-103.064676,32.500115],[-103.06478,32.226978],[-103.064422,32.000517],[-103.375458,32.000334],[-103.748317,32.000197],[-104.096927,31.999997],[-104.466406,32.000116],[-105.000507,32.00042],[-105.429383,32.000577],[-105.731353,32.001565],[-106.125534,32.002445],[-106.618486,32.000495],[-106.639536,31.980343],[-106.622163,31.936007],[-106.645295,31.894858],[-106.635922,31.866237],[-106.577244,31.810406],[-106.54714,31.807299],[-106.528242,31.783148],[-106.490549,31.748924],[-106.45143,31.764427],[-106.381074,31.732082],[-106.349565,31.696712],[-106.33472,31.664109],[-106.307944,31.629519],[-106.280142,31.561462],[-106.244854,31.53796],[-106.21962,31.481561],[-106.200119,31.462411],[-106.172389,31.453077],[-106.132291,31.425081],[-106.110112,31.423017],[-106.075307,31.397615],[-106.006924,31.392824],[-105.969281,31.365696],[-105.953544,31.364503],[-105.931585,31.312781],[-105.908629,31.312745],[-105.89511,31.291309],[-105.869294,31.288955],[-105.794287,31.202286],[-105.774028,31.168474],[-105.741284,31.164204],[-105.7084,31.13593],[-105.648839,31.115877],[-105.642684,31.099583],[-105.606438,31.085278],[-105.584994,31.056964],[-105.577388,31.019672],[-105.557226,30.989673],[-105.532676,30.984697],[-105.49898,30.950826],[-105.451421,30.924681],[-105.44256,30.909723],[-105.399415,30.888305],[-105.386724,30.853306],[-105.339166,30.840405],[-105.250212,30.799028],[-105.217783,30.805946],[-105.116809,30.743059],[-105.062486,30.686532],[-105.026618,30.679428],[-105.007796,30.686221],[-104.98611,30.662767],[-104.971411,30.609846],[-104.933675,30.599572],[-104.899052,30.570769],[-104.873928,30.495572],[-104.861446,30.427123],[-104.847632,30.413979],[-104.859397,30.391125],[-104.810904,30.363171],[-104.811805,30.333953],[-104.761442,30.300816],[-104.760964,30.276632],[-104.713316,30.237805],[-104.687076,30.179342],[-104.694381,30.101888],[-104.685829,30.082063],[-104.707249,30.050134],[-104.703953,30.023748],[-104.682387,29.97185],[-104.675861,29.915537],[-104.633929,29.871206],[-104.629084,29.852013],[-104.578726,29.782621],[-104.569113,29.751656],[-104.549796,29.740641],[-104.544198,29.681271],[-104.52498,29.665974],[-104.514031,29.63863],[-104.477326,29.628619],[-104.466752,29.609387],[-104.398921,29.571897],[-104.394881,29.556282],[-104.338201,29.520182],[-104.296789,29.524128],[-104.262175,29.513501],[-104.209153,29.481468],[-104.211166,29.449755],[-104.180792,29.425861],[-104.16838,29.396136],[-104.141158,29.377823],[-104.106874,29.37344],[-104.082256,29.346064],[-104.020218,29.312048],[-103.972059,29.296055],[-103.92572,29.294372],[-103.863335,29.27922],[-103.783626,29.265324],[-103.756362,29.219937],[-103.718561,29.180826],[-103.703735,29.184415],[-103.633657,29.15858],[-103.596281,29.151915],[-103.556868,29.155502],[-103.524835,29.137123],[-103.450019,29.065734],[-103.386817,29.021735],[-103.338751,29.020277],[-103.265735,28.99567],[-103.250416,28.98043],[-103.203834,28.98723],[-103.153896,28.971606],[-103.117478,28.997774],[-103.097848,29.027036],[-103.100134,29.060675],[-103.053887,29.100749],[-103.033879,29.100972],[-103.014259,29.124978],[-102.97874,29.186433],[-102.950888,29.178162],[-102.917234,29.191788],[-102.867474,29.223883],[-102.871032,29.240706],[-102.906382,29.262055],[-102.888178,29.293359],[-102.892971,29.309151],[-102.877726,29.3548],[-102.845303,29.357699],[-102.825612,29.396946],[-102.83248,29.432431],[-102.807213,29.49405],[-102.808195,29.523115],[-102.778382,29.543592],[-102.768641,29.59468],[-102.740154,29.598174],[-102.73451,29.642143],[-102.693539,29.676957],[-102.698551,29.695545],[-102.677219,29.741052],[-102.645758,29.733874],[-102.572095,29.757474],[-102.547978,29.744644],[-102.513,29.766569],[-102.514939,29.784299],[-102.473233,29.776018],[-102.434228,29.776946],[-102.404537,29.765181],[-102.34161,29.86905],[-102.299997,29.877369],[-102.261495,29.853241],[-102.221853,29.840365],[-102.188942,29.848809],[-102.159796,29.814685],[-102.116723,29.793038],[-102.084379,29.795064],[-102.049023,29.785672],[-101.981567,29.81502],[-101.95548,29.795333],[-101.875772,29.793796],[-101.849827,29.807279],[-101.837595,29.793364],[-101.788531,29.779272],[-101.782767,29.789321],[-101.712056,29.762777],[-101.662994,29.77106],[-101.646936,29.754565],[-101.606648,29.774113],[-101.57754,29.769074],[-101.567749,29.798727],[-101.53501,29.797679],[-101.539191,29.761774],[-101.500389,29.765868],[-101.455799,29.788049],[-101.448881,29.750699],[-101.415584,29.746534],[-101.398362,29.717],[-101.375386,29.701807],[-101.363218,29.652638],[-101.347863,29.662209],[-101.314135,29.659054],[-101.300027,29.640702],[-101.311706,29.615372],[-101.311636,29.585127],[-101.277878,29.59081],[-101.280494,29.615181],[-101.262233,29.630607],[-101.24103,29.565028],[-101.261176,29.536776],[-101.235273,29.524854],[-101.173824,29.514568],[-101.151877,29.477005],[-101.087149,29.469414],[-101.060151,29.458661],[-101.036604,29.406108],[-101.003953,29.364703],[-100.950727,29.347711],[-100.941265,29.333926],[-100.886842,29.307848],[-100.878126,29.28086],[-100.80006,29.248797],[-100.766004,29.185847],[-100.775905,29.173344],[-100.737795,29.139079],[-100.6752,29.100741],[-100.664021,29.074164],[-100.660208,29.031497],[-100.648664,29.000243],[-100.647268,28.955457],[-100.631611,28.902839],[-100.602595,28.902214],[-100.576866,28.835157],[-100.546576,28.824923],[-100.537772,28.780776],[-100.507613,28.740599],[-100.510534,28.692669],[-100.500354,28.66196],[-100.462069,28.641108],[-100.447598,28.610066],[-100.398462,28.585169],[-100.411388,28.55196],[-100.386963,28.514023],[-100.33474,28.500261],[-100.367765,28.475019],[-100.341534,28.449571],[-100.336187,28.430181],[-100.349306,28.401398],[-100.314199,28.345859],[-100.288639,28.316976],[-100.294296,28.28438],[-100.257789,28.24034],[-100.223629,28.235223],[-100.211313,28.193899],[-100.086898,28.146783],[-100.053122,28.084731],[-100.018951,28.066441],[-100.006148,28.018419],[-99.989762,27.992876],[-99.931811,27.980968],[-99.938541,27.954059],[-99.91746,27.917973],[-99.893456,27.899208],[-99.904385,27.875284],[-99.881329,27.849551],[-99.872294,27.795258],[-99.84966,27.79246],[-99.842967,27.768518],[-99.81312,27.773997],[-99.801651,27.741771],[-99.77074,27.732134],[-99.721519,27.666155],[-99.704601,27.654954],[-99.668942,27.659974],[-99.666108,27.636088],[-99.638929,27.626758],[-99.603533,27.641992],[-99.577636,27.618597],[-99.541889,27.606001],[-99.511049,27.564507],[-99.521919,27.544094],[-99.528392,27.49855],[-99.496826,27.500106],[-99.479251,27.478635],[-99.495104,27.451518],[-99.487765,27.413399],[-99.504397,27.339896],[-99.538035,27.31709],[-99.495021,27.303937],[-99.496504,27.273389],[-99.465825,27.26797],[-99.441545,27.249915],[-99.443286,27.21941],[-99.426418,27.178287],[-99.439844,27.151581],[-99.430672,27.125307],[-99.442043,27.105967],[-99.43447,27.078517],[-99.451035,27.066765],[-99.446123,27.023048],[-99.415476,27.01724],[-99.37731,26.973819],[-99.388253,26.944217],[-99.337297,26.922759],[-99.321819,26.906846],[-99.3289,26.88022],[-99.295146,26.86544],[-99.268613,26.843213],[-99.262208,26.815668],[-99.242444,26.788262],[-99.240023,26.745851],[-99.208907,26.724761],[-99.209948,26.693938],[-99.20024,26.655824],[-99.178064,26.620547],[-99.166742,26.536079],[-99.128379,26.525501],[-99.104851,26.500383],[-99.091976,26.472376],[-99.11085,26.426282],[-99.082006,26.396667],[-99.037058,26.413603],[-99.01064,26.392135],[-98.974164,26.401148],[-98.955846,26.376982],[-98.901677,26.371229],[-98.895694,26.353491],[-98.86191,26.36599],[-98.841562,26.358943],[-98.82045,26.371002],[-98.798211,26.360166],[-98.777028,26.325729],[-98.749469,26.329988],[-98.73225,26.299108],[-98.678958,26.260064],[-98.664633,26.235351],[-98.599154,26.257612],[-98.580817,26.254741],[-98.503766,26.2088],[-98.462714,26.225802],[-98.44228,26.198911],[-98.386694,26.157872],[-98.3666,26.168782],[-98.332948,26.16128],[-98.324868,26.122305],[-98.284291,26.10109],[-98.248737,26.072042],[-98.221217,26.076611],[-98.198466,26.055397],[-98.171246,26.069681],[-98.137302,26.060845],[-98.103811,26.067094],[-98.038367,26.042107],[-98.022703,26.06042],[-97.987302,26.065722],[-97.966069,26.051937],[-97.878755,26.065269],[-97.849594,26.052109],[-97.804259,26.059654],[-97.790246,26.033359],[-97.72647,26.022656],[-97.667422,26.029073],[-97.62289,25.989519],[-97.582563,25.937857],[-97.530977,25.920357],[-97.520812,25.886],[-97.49643,25.895805],[-97.470819,25.888354],[-97.44403,25.848614],[-97.373187,25.839956],[-97.358754,25.878808],[-97.374173,25.905923],[-97.350394,25.925237],[-97.326003,25.917689],[-97.2767,25.952146],[-97.24701,25.948234],[-97.209961,25.963458],[-97.091121,25.97384],[-97.097858,26.03862],[-97.08999,26.07534],[-97.108301,26.10451],[-97.110147,26.140583],[-97.126121,26.250351],[-97.156496,26.375348],[-97.214056,26.576766],[-97.251705,26.661866],[-97.282725,26.763423],[-97.300423,26.834613],[-97.31595,26.929289],[-97.323219,27.010256],[-97.319824,27.110023],[-97.309363,27.196109],[-97.296567,27.250323],[-97.250264,27.392308],[-97.199816,27.500319],[-97.125265,27.640597],[-97.050221,27.750308],[-97.021855,27.783364],[-96.984281,27.803783],[-96.959495,27.875302],[-96.875264,27.96992],[-96.844196,28.000296],[-96.746251,28.079622],[-96.618785,28.169522],[-96.531,28.221164],[-96.37525,28.29076],[-96.352686,28.312923],[-96.34181,28.342381],[-96.320762,28.362868],[-96.271767,28.382934],[-96.258191,28.407872],[-96.182242,28.452036],[-96.078331,28.500001],[-95.87524,28.582788],[-95.750238,28.638419],[-95.532019,28.750256],[-95.493888,28.76534],[-95.420071,28.805625],[-95.353471,28.817863],[-95.322113,28.834442],[-95.308121,28.85883],[-95.227228,28.910379],[-95.180507,28.949243],[-95.139469,28.991697],[-95.105447,29.016048],[-95.086398,29.06824],[-95.000202,29.104452],[-94.912171,29.159318],[-94.772686,29.231718],[-94.713311,29.282521],[-94.66622,29.281047],[-94.642421,29.300136],[-94.623898,29.343143],[-94.650311,29.38282],[-94.625192,29.397662],[-94.499452,29.452337],[-94.370351,29.50023],[-94.12518,29.595559],[-94.033565,29.625002],[-93.906043,29.625001],[-93.875006,29.621426],[-93.848588,29.60026],[-93.814351,29.596576],[-93.837412,29.689885],[-93.87002,29.735482],[-93.888821,29.742234],[-93.89847,29.771577],[-93.92881,29.79708],[-93.922744,29.818808],[-93.859896,29.859921],[-93.830374,29.894358],[-93.806551,29.957445],[-93.790087,29.986564],[-93.739734,30.023987],[-93.720805,30.053043],[-93.724101,30.09301],[-93.692849,30.135213],[-93.720931,30.208461],[-93.703544,30.259321],[-93.704584,30.289949],[-93.729046,30.296705],[-93.764252,30.330229],[-93.757409,30.390813],[-93.698135,30.43888],[-93.716602,30.494424],[-93.706507,30.50991],[-93.738788,30.540975],[-93.713782,30.587584],[-93.678662,30.594097],[-93.6831,30.640763],[-93.631345,30.677872],[-93.608875,30.719117],[-93.61478,30.756064],[-93.592101,30.763675],[-93.553626,30.83514],[-93.558502,30.867905],[-93.531234,30.924388],[-93.56543,30.990579],[-93.539184,31.008212],[-93.524739,31.039007],[-93.52717,31.073189],[-93.563269,31.093592],[-93.539366,31.115207],[-93.54893,31.186601],[-93.589119,31.165889],[-93.618255,31.233105],[-93.613942,31.259375],[-93.659285,31.282106],[-93.687511,31.310813],[-93.67384,31.323855],[-93.667273,31.365413],[-93.674117,31.397681],[-93.704879,31.410881],[-93.692631,31.437192],[-93.749476,31.46869],[-93.719708,31.50584],[-93.742586,31.526229],[-93.785028,31.525962],[-93.820764,31.558221],[-93.838057,31.606795],[-93.8177,31.621638],[-93.823169,31.672893],[-93.794548,31.702076],[-93.836884,31.750171],[-93.822598,31.773559],[-93.839343,31.80033],[-93.874836,31.822314],[-93.872988,31.836696],[-93.901883,31.875168],[-93.90308,31.893922],[-93.970826,31.919968],[-94.006795,31.97343],[-94.04272,31.999263],[-94.042946,32.340572],[-94.043212,32.776803],[-94.042964,33.019219],[-94.04273,33.241822],[-94.04345,33.552253],[-94.073833,33.556006],[-94.082352,33.57572],[-94.147428,33.565183],[-94.162266,33.588906],[-94.184308,33.594578],[-94.203594,33.566534],[-94.226188,33.552976],[-94.238866,33.576748],[-94.291212,33.581478],[-94.309582,33.551673],[-94.352643,33.56063],[-94.35359,33.544005],[-94.38953,33.546739],[-94.430041,33.591124],[-94.4532,33.59178],[-94.452701,33.617373],[-94.485878,33.637865],[-94.505655,33.620668],[-94.564076,33.626265],[-94.593294,33.665258],[-94.626844,33.682035],[-94.639198,33.663737],[-94.684796,33.684353],[-94.736814,33.692332],[-94.773126,33.727187],[-94.827948,33.740882],[-94.860687,33.741945],[-94.886934,33.769067],[-94.91143,33.778383],[-94.923289,33.808742],[-94.942217,33.80578],[-94.964401,33.837021],[-94.998019,33.860504],[-95.049025,33.86409],[-95.157145,33.936727],[-95.21668,33.962652],[-95.250885,33.936063],[-95.253814,33.893977],[-95.306397,33.874906],[-95.325535,33.885734],[-95.363209,33.866812],[-95.442746,33.866506],[-95.533798,33.881153],[-95.551216,33.889713],[-95.552799,33.924311],[-95.597522,33.942342],[-95.627318,33.907806],[-95.665478,33.909004],[-95.688876,33.888486],[-95.733183,33.896447],[-95.756612,33.892028],[-95.75142,33.860683],[-95.77024,33.845202],[-95.815723,33.859815],[-95.830406,33.834785],[-95.92478,33.884843],[-95.94603,33.859338],[-95.998351,33.85105],[-96.048834,33.836468],[-96.084626,33.846656],[-96.149227,33.837091],[-96.165199,33.78013],[-96.179846,33.759618],[-96.220522,33.74739],[-96.263797,33.767522],[-96.290359,33.770831],[-96.306078,33.744307],[-96.318759,33.696753],[-96.359374,33.689432],[-96.370847,33.717996],[-96.430216,33.778654],[-96.500984,33.772801],[-96.532651,33.823143],[-96.573151,33.819182],[-96.62315,33.841496],[-96.597348,33.875101],[-96.59217,33.895513],[-96.630117,33.895422],[-96.673449,33.912278],[-96.690708,33.849959],[-96.713734,33.831328],[-96.761587,33.824407],[-96.794276,33.868886],[-96.832157,33.874835],[-96.841592,33.852894],[-96.866438,33.853149],[-96.895728,33.896414],[-96.905253,33.947219],[-96.924268,33.959159],[-96.973807,33.935697],[-96.996251,33.942664],[-96.98374,33.89209],[-97.02144,33.846379],[-97.057599,33.836506],[-97.048324,33.817269],[-97.092646,33.804198],[-97.085191,33.764738],[-97.095644,33.729222],[-97.123578,33.717044],[-97.154367,33.724094],[-97.192969,33.760784],[-97.205705,33.802908],[-97.194678,33.831192],[-97.166824,33.840395],[-97.185458,33.9007],[-97.212601,33.9159],[-97.245049,33.903216],[-97.255639,33.863702],[-97.313983,33.867535],[-97.340052,33.859841],[-97.37469,33.818552],[-97.426799,33.818641],[-97.463202,33.84309],[-97.452182,33.86896],[-97.458343,33.901887],[-97.500929,33.919538],[-97.55827,33.897099],[-97.589254,33.903922],[-97.59798,33.955247],[-97.609091,33.968093],[-97.66149,33.990818],[-97.687694,33.98718],[-97.732224,33.936681],[-97.763043,33.934145],[-97.805972,33.876571],[-97.833505,33.858096],[-97.877387,33.850236],[-97.984373,33.898024],[-97.957155,33.914454],[-97.956917,33.958502],[-97.946802,33.990893],[-97.97167,34.005434],[-98.041117,33.993456],[-98.084435,34.002893],[-98.103617,34.029207],[-98.10063,34.049984],[-98.120208,34.072127],[-98.09055,34.122484],[-98.109462,34.154111],[-98.130816,34.150532],[-98.16879,34.114262],[-98.200075,34.116783],[-98.232474,34.134641],[-98.300209,34.134579],[-98.32258,34.14972],[-98.36402,34.157109],[-98.398441,34.128456],[-98.398389,34.104566],[-98.418805,34.082655],[-98.442808,34.083144],[-98.486328,34.062598],[-98.504149,34.072287],[-98.577356,34.1491],[-98.603096,34.160501],[-98.643223,34.164531],[-98.690072,34.133155],[-98.766671,34.136834],[-98.831115,34.162154],[-98.887112,34.16826],[-98.920704,34.183435],[-98.951284,34.212189],[-99.05635,34.200014],[-99.080577,34.211483],[-99.121004,34.20185],[-99.189776,34.214357],[-99.213161,34.308476],[-99.208832,34.339172],[-99.234298,34.340451],[-99.237562,34.366701],[-99.269796,34.380843],[-99.261275,34.403508],[-99.28791,34.41403],[-99.320073,34.409267],[-99.37555,34.458789],[-99.395187,34.44203],[-99.387181,34.410842],[-99.398728,34.375832],[-99.517624,34.414494],[-99.569696,34.418418],[-99.600026,34.374688],[-99.648142,34.382312],[-99.694528,34.378218],[-99.727031,34.410554],[-99.753447,34.420853],[-99.814313,34.476204],[-99.821839,34.497848],[-99.85305,34.511585],[-99.888741,34.550452],[-99.921801,34.570253],[-99.953817,34.578527],[-99.971013,34.562501],[-100.000277,34.56045],[-100.00038,34.769239],[-100.000384,35.095109],[-100.000395,35.306413],[-100.000393,35.692515],[-100.000398,35.967746],[-100.000406,36.499702],[-100.522227,36.499291],[-100.824105,36.499619],[-101.219265,36.499463],[-101.496598,36.499455],[-101.834063,36.499556],[-102.22058,36.500333],[-102.625467,36.500364],[-103.002434,36.500397]]]},"properties":{"name":"Texas","ns_code":"01779801","geoid":"48","usps_abbrev":"TX","fips_code":"48"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-71.501088,45.013349],[-71.798683,45.010812],[-72.103058,45.005598],[-72.270869,45.004186],[-72.481033,45.00887],[-72.58988,45.013237],[-72.845633,45.016659],[-72.968092,45.014092],[-73.085972,45.015494],[-73.343124,45.01084],[-73.354633,44.987352],[-73.338244,44.964751],[-73.338622,44.919366],[-73.356218,44.904492],[-73.379452,44.83801],[-73.335044,44.804109],[-73.333152,44.789588],[-73.363792,44.745254],[-73.370064,44.666071],[-73.38982,44.617211],[-73.381849,44.589316],[-73.342933,44.551907],[-73.299896,44.476651],[-73.296052,44.428334],[-73.31504,44.388526],[-73.333613,44.3723],[-73.324195,44.310033],[-73.310914,44.274298],[-73.319603,44.249909],[-73.343376,44.23819],[-73.363393,44.207737],[-73.390625,44.191068],[-73.411225,44.113767],[-73.437905,44.045125],[-73.410385,44.026503],[-73.408859,43.934505],[-73.3741,43.875304],[-73.372589,43.845354],[-73.391014,43.818411],[-73.351265,43.769823],[-73.370612,43.725329],[-73.405243,43.688368],[-73.42791,43.634428],[-73.41832,43.623325],[-73.428637,43.583994],[-73.398126,43.568065],[-73.365563,43.623441],[-73.302553,43.625709],[-73.284912,43.579272],[-73.258631,43.56495],[-73.241486,43.532621],[-73.246844,43.517252],[-73.256475,43.260093],[-73.27417,42.949028],[-73.278673,42.83341],[-73.290944,42.80192],[-73.276421,42.746019],[-73.264957,42.74594],[-72.809113,42.736581],[-72.458436,42.72685],[-72.475938,42.757702],[-72.539317,42.804647],[-72.557114,42.852474],[-72.552702,42.884874],[-72.524188,42.917609],[-72.532226,42.954882],[-72.4736,42.972284],[-72.458386,43.018602],[-72.467255,43.054119],[-72.434385,43.083713],[-72.432944,43.11253],[-72.453048,43.139475],[-72.450416,43.192373],[-72.43909,43.201054],[-72.439187,43.245223],[-72.407856,43.282895],[-72.395525,43.312605],[-72.413377,43.362741],[-72.391526,43.46878],[-72.380428,43.488525],[-72.398376,43.510829],[-72.380383,43.54088],[-72.371051,43.580494],[-72.328514,43.600805],[-72.327395,43.636774],[-72.303936,43.667986],[-72.305277,43.695267],[-72.271839,43.733716],[-72.232069,43.748428],[-72.182511,43.810354],[-72.187329,43.855151],[-72.150518,43.902221],[-72.121554,43.918493],[-72.116807,43.947557],[-72.099093,43.957286],[-72.116977,43.994486],[-72.084762,44.020756],[-72.032525,44.082488],[-72.043896,44.158449],[-72.065918,44.189289],[-72.047799,44.238531],[-72.058851,44.286369],[-72.01914,44.320255],[-71.98112,44.3375],[-71.92911,44.337577],[-71.906909,44.348284],[-71.872472,44.336628],[-71.812473,44.358477],[-71.814141,44.382278],[-71.791609,44.400188],[-71.714279,44.409545],[-71.658906,44.442633],[-71.652127,44.460792],[-71.597994,44.486885],[-71.591733,44.518175],[-71.571337,44.538329],[-71.597723,44.554657],[-71.549836,44.569016],[-71.5363,44.585908],[-71.553237,44.608914],[-71.561962,44.647189],[-71.584606,44.656882],[-71.59457,44.697033],[-71.626093,44.728543],[-71.630755,44.753141],[-71.57864,44.785444],[-71.576865,44.815197],[-71.551114,44.836965],[-71.545923,44.865932],[-71.496093,44.907849],[-71.515868,44.931715],[-71.515001,44.958597],[-71.540931,44.98512],[-71.501088,45.013349]]]},"properties":{"name":"Vermont","ns_code":"01779802","geoid":"50","usps_abbrev":"VT","fips_code":"50"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-70.575094,42.917126],[-70.537146,42.951423],[-70.528882,43.005769],[-70.558353,43.047264],[-70.599658,43.056939],[-70.582163,43.095487],[-70.555762,43.121505],[-70.52508,43.089278],[-70.493014,43.073043],[-70.430571,43.080218],[-70.406243,43.102092],[-70.403396,43.12509],[-70.419644,43.152551],[-70.44621,43.168149],[-70.493265,43.169151],[-70.519666,43.191015],[-70.506324,43.21883],[-70.519554,43.25162],[-70.49323,43.286829],[-70.421808,43.297495],[-70.369219,43.32222],[-70.318948,43.390138],[-70.287601,43.403522],[-70.268433,43.426351],[-70.155986,43.524444],[-69.855212,43.646947],[-69.808826,43.64734],[-69.786576,43.658131],[-69.749488,43.653985],[-69.719209,43.661745],[-69.664745,43.711748],[-69.631537,43.700885],[-69.566618,43.70283],[-69.51909,43.732122],[-69.501617,43.779686],[-69.40927,43.810817],[-69.387279,43.799016],[-69.397041,43.772959],[-69.384361,43.731756],[-69.356378,43.71088],[-69.297855,43.707694],[-69.262027,43.725426],[-69.23338,43.762316],[-69.242535,43.799761],[-69.226563,43.812203],[-69.18584,43.793786],[-69.141338,43.798421],[-69.083005,43.825647],[-69.055894,43.858911],[-69.022784,43.842507],[-69.024295,43.819842],[-68.990327,43.786891],[-68.949836,43.78017],[-68.925518,43.750088],[-68.874478,43.734179],[-68.826916,43.735711],[-68.797778,43.752882],[-68.782244,43.777537],[-68.785324,43.804339],[-68.749473,43.832531],[-68.724315,43.834592],[-68.68466,43.854647],[-68.663789,43.893926],[-68.679258,43.923455],[-68.716495,43.941984],[-68.721478,43.961938],[-68.659586,43.947991],[-68.585076,43.954312],[-68.547277,43.96862],[-68.436843,44.053233],[-68.368797,44.04522],[-68.311393,44.053429],[-68.263136,44.090617],[-68.20336,44.099587],[-68.175858,44.125083],[-68.17075,44.190114],[-68.122626,44.226041],[-68.12828,44.264253],[-68.060959,44.278256],[-68.018178,44.275107],[-67.973647,44.295159],[-67.960779,44.319265],[-67.925178,44.341434],[-67.898151,44.322126],[-67.858336,44.317024],[-67.80969,44.33651],[-67.795262,44.361165],[-67.805569,44.391015],[-67.77475,44.411314],[-67.741744,44.390831],[-67.674642,44.394634],[-67.636544,44.383592],[-67.567585,44.397209],[-67.492616,44.43222],[-67.455241,44.464873],[-67.439695,44.505384],[-67.3882,44.520399],[-67.356776,44.518094],[-67.317841,44.531544],[-67.301151,44.549591],[-67.248052,44.554898],[-67.187845,44.581782],[-67.096711,44.639192],[-67.010765,44.717322],[-66.977521,44.731241],[-66.941841,44.765625],[-66.902228,44.776429],[-66.885444,44.794208],[-66.932563,44.825508],[-66.965317,44.828905],[-66.982165,44.86722],[-66.968843,44.910419],[-67.021641,44.953925],[-67.094597,45.074793],[-67.112587,45.11257],[-67.158871,45.162035],[-67.202548,45.171404],[-67.227194,45.163462],[-67.272065,45.191223],[-67.291015,45.187471],[-67.295881,45.147968],[-67.340924,45.125092],[-67.380558,45.152108],[-67.461888,45.242668],[-67.476372,45.275371],[-67.431258,45.34107],[-67.427325,45.390721],[-67.473883,45.424739],[-67.500072,45.490849],[-67.434955,45.528217],[-67.420732,45.549695],[-67.431055,45.584114],[-67.456667,45.60431],[-67.499006,45.586643],[-67.589773,45.606765],[-67.675156,45.630933],[-67.713036,45.681213],[-67.754303,45.667575],[-67.803503,45.677696],[-67.809622,45.729574],[-67.781796,45.731117],[-67.809157,45.767372],[-67.801989,45.803066],[-67.763437,45.828676],[-67.804096,45.869747],[-67.803778,45.882741],[-67.750733,45.91759],[-67.78121,45.943589],[-67.781854,46.259293],[-67.788234,46.599908],[-67.78984,46.805877],[-67.790328,47.067202],[-67.882895,47.104317],[-67.890709,47.126395],[-67.927419,47.154955],[-67.951986,47.194628],[-67.989778,47.209995],[-68.025184,47.239871],[-68.073659,47.259085],[-68.15228,47.309594],[-68.152405,47.322021],[-68.223718,47.34473],[-68.234513,47.355295],[-68.327559,47.360013],[-68.380225,47.339578],[-68.383972,47.301171],[-68.429882,47.281293],[-68.474812,47.29716],[-68.517699,47.29594],[-68.549931,47.282101],[-68.577816,47.287629],[-68.607429,47.247057],[-68.663256,47.236221],[-68.687236,47.244432],[-68.811529,47.215131],[-68.857423,47.190325],[-68.904981,47.180436],[-68.941029,47.206101],[-69.040918,47.244973],[-69.054932,47.315298],[-69.054509,47.376563],[-69.035803,47.407249],[-69.062257,47.432631],[-69.081384,47.423742],[-69.121862,47.442598],[-69.176045,47.456771],[-69.224496,47.459854],[-69.458347,47.231322],[-69.769522,46.923483],[-69.997213,46.695402],[-70.056539,46.416815],[-70.094507,46.408241],[-70.148089,46.359],[-70.175244,46.358148],[-70.208989,46.329527],[-70.20687,46.299139],[-70.231688,46.291026],[-70.260763,46.229716],[-70.290405,46.185087],[-70.237081,46.144879],[-70.2569,46.099499],[-70.28248,46.100475],[-70.30714,46.061107],[-70.279076,46.060849],[-70.313699,46.022205],[-70.302773,45.998987],[-70.311671,45.966533],[-70.265401,45.962829],[-70.239536,45.93968],[-70.263039,45.924041],[-70.25409,45.902286],[-70.284473,45.871693],[-70.34192,45.852311],[-70.415233,45.795663],[-70.407096,45.762555],[-70.38807,45.748247],[-70.400494,45.719743],[-70.439176,45.703889],[-70.465552,45.706474],[-70.527065,45.666577],[-70.552855,45.667904],[-70.619255,45.612071],[-70.645283,45.606294],[-70.689045,45.562099],[-70.684789,45.550919],[-70.722427,45.513867],[-70.717814,45.490169],[-70.681156,45.452176],[-70.651032,45.445054],[-70.624516,45.406148],[-70.650432,45.377274],[-70.678185,45.394283],[-70.712112,45.390574],[-70.744021,45.421124],[-70.794133,45.428385],[-70.825605,45.400244],[-70.802608,45.366116],[-70.81989,45.34007],[-70.806162,45.321079],[-70.84877,45.263161],[-70.858122,45.229155],[-70.884709,45.234808],[-70.921246,45.278874],[-70.917949,45.311695],[-70.989163,45.334168],[-71.008487,45.319243],[-71.083924,45.305451],[-71.077227,45.250439],[-71.058301,44.991243],[-71.033524,44.697637],[-71.026162,44.549268],[-71.009964,44.284783],[-70.99478,43.960348],[-70.98904,43.790138],[-70.972743,43.57031],[-70.950776,43.551491],[-70.953874,43.519167],[-70.975311,43.477718],[-70.960826,43.439331],[-70.986852,43.413805],[-70.973462,43.349914],[-70.931188,43.336562],[-70.896742,43.285364],[-70.859837,43.258025],[-70.818264,43.238384],[-70.809714,43.224227],[-70.828057,43.186529],[-70.833614,43.146127],[-70.824584,43.125088],[-70.737969,43.073728],[-70.70631,43.075339],[-70.701197,43.04524],[-70.63218,42.986429],[-70.611152,42.97899],[-70.575094,42.917126]]]},"properties":{"name":"Maine","ns_code":"01779787","geoid":"23","usps_abbrev":"ME","fips_code":"23"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-81.677393,36.588156],[-81.679115,36.569047],[-81.708067,36.535705],[-81.696823,36.506112],[-81.694948,36.467449],[-81.715023,36.454899],[-81.720842,36.422454],[-81.741524,36.412653],[-81.717405,36.347779],[-81.764927,36.338672],[-81.797544,36.358428],[-81.855095,36.337186],[-81.879641,36.313654],[-81.908136,36.302013],[-82.033141,36.120422],[-82.054142,36.126821],[-82.079743,36.10652],[-82.130246,36.104517],[-82.148748,36.149615],[-82.176849,36.142214],[-82.213852,36.159112],[-82.245053,36.131011],[-82.288955,36.13571],[-82.336056,36.115009],[-82.355657,36.115309],[-82.410158,36.082709],[-82.460597,36.007897],[-82.505384,35.97768],[-82.549682,35.964275],[-82.610889,35.967409],[-82.612604,35.993488],[-82.590663,36.032106],[-82.636379,36.065903],[-82.684765,36.045004],[-82.715365,36.023804],[-82.775866,36.000803],[-82.787465,35.952163],[-82.820411,35.922077],[-82.851603,35.949452],[-82.898506,35.9451],[-82.914381,35.929683],[-82.896583,35.878471],[-82.920609,35.868472],[-82.916273,35.841603],[-82.94383,35.825637],[-82.974245,35.786967],[-82.995803,35.773128],[-83.036209,35.787405],[-83.078732,35.789472],[-83.120183,35.766234],[-83.159208,35.764892],[-83.185694,35.729888],[-83.24067,35.726759],[-83.254231,35.695807],[-83.31049,35.654452],[-83.334965,35.665471],[-83.366941,35.638728],[-83.421576,35.611186],[-83.445802,35.611803],[-83.498335,35.56298],[-83.56609,35.565993],[-83.601854,35.578228],[-83.640958,35.565712],[-83.707199,35.568533],[-83.771736,35.562118],[-83.82559,35.523829],[-83.882563,35.517182],[-83.911773,35.476028],[-83.937015,35.471511],[-83.992131,35.440402],[-84.014707,35.411984],[-84.0074,35.371643],[-84.038327,35.347813],[-84.03551,35.317783],[-84.02141,35.300983],[-84.055712,35.268182],[-84.107006,35.251409],[-84.199117,35.243679],[-84.211818,35.266078],[-84.29024,35.225572],[-84.321869,34.988408],[-84.039375,34.986973],[-83.749894,34.987691],[-83.619985,34.986592],[-83.620185,34.992091],[-83.501536,34.992862],[-83.108614,35.000659],[-82.784839,35.0857],[-82.763712,35.068209],[-82.72701,35.094142],[-82.697945,35.095359],[-82.641797,35.131817],[-82.598579,35.137788],[-82.525566,35.15652],[-82.486653,35.174463],[-82.431481,35.173187],[-82.419744,35.198613],[-82.390253,35.21554],[-82.362991,35.191037],[-82.315871,35.190678],[-82.27492,35.200071],[-82.181121,35.194067],[-81.749875,35.180019],[-81.264273,35.161062],[-81.069092,35.151242],[-81.047091,35.145157],[-81.03247,35.110033],[-81.057236,35.086129],[-81.057648,35.062433],[-81.041489,35.044703],[-80.93495,35.107409],[-80.782042,34.935785],[-80.797491,34.819752],[-80.558125,34.81744],[-80.164577,34.811656],[-79.874855,34.80541],[-79.6753,34.804744],[-79.358252,34.545579],[-79.201539,34.40864],[-78.874747,34.134395],[-78.54108,33.85112],[-78.499301,33.812852],[-78.399002,33.843262],[-78.341208,33.855293],[-78.262335,33.863163],[-78.145353,33.862734],[-78.066581,33.847985],[-78.052895,33.827432],[-78.01286,33.803863],[-77.99971,33.76713],[-77.964052,33.752899],[-77.917505,33.76382],[-77.893686,33.804702],[-77.89897,33.854639],[-77.884519,33.90367],[-77.863534,33.93467],[-77.830206,34.030283],[-77.785555,34.125171],[-77.753791,34.155023],[-77.74742,34.175594],[-77.691093,34.245744],[-77.668453,34.258302],[-77.623579,34.303162],[-77.516162,34.382443],[-77.418832,34.435923],[-77.295077,34.488968],[-77.219176,34.53966],[-77.124671,34.583147],[-76.999666,34.617009],[-76.818937,34.643253],[-76.749655,34.647665],[-76.6928,34.64295],[-76.614722,34.618278],[-76.612344,34.600128],[-76.58372,34.552625],[-76.562509,34.536912],[-76.524378,34.532155],[-76.491991,34.546532],[-76.444196,34.633155],[-76.374638,34.715991],[-76.315731,34.77603],[-76.249632,34.834631],[-76.124626,34.933081],[-76.02443,35.005364],[-75.998411,35.007389],[-75.908588,35.071522],[-75.807724,35.115906],[-75.70737,35.146111],[-75.6246,35.175824],[-75.59022,35.183757],[-75.548003,35.168184],[-75.499593,35.177172],[-75.4746,35.202029],[-75.425581,35.390009],[-75.415089,35.50018],[-75.402422,35.54421],[-75.40039,35.593512],[-75.41782,35.686082],[-75.437617,35.74696],[-75.480501,35.814207],[-75.566047,35.975614],[-75.670103,36.156074],[-75.711319,36.250163],[-75.749635,36.353606],[-75.790558,36.500156],[-75.797497,36.550916],[-76.292968,36.550551],[-76.802631,36.55055],[-76.915897,36.552093],[-76.919464,36.543863],[-77.372744,36.544639],[-77.749905,36.545518],[-78.14287,36.543679],[-78.249794,36.544459],[-78.511317,36.540951],[-79.070096,36.542034],[-79.24983,36.541139],[-79.563478,36.541009],[-79.887248,36.542865],[-80.11334,36.542606],[-80.294792,36.543957],[-80.730385,36.562348],[-80.840334,36.559199],[-81.008527,36.563959],[-81.286844,36.57509],[-81.374773,36.574736],[-81.520119,36.580449],[-81.600101,36.586851],[-81.677393,36.588156]]]},"properties":{"name":"North Carolina","ns_code":"01027616","geoid":"37","usps_abbrev":"NC","fips_code":"37"}}]}
diff --git a/viz-lib/src/visualizations/cohort/Cornelius.tsx b/viz-lib/src/visualizations/cohort/Cornelius.tsx
new file mode 100644
index 000000000..7d5c8eb78
--- /dev/null
+++ b/viz-lib/src/visualizations/cohort/Cornelius.tsx
@@ -0,0 +1,237 @@
+/*!
+ * React port of Cornelius library (based on v0.1 released under the MIT license)
+ * Original library: http://restorando.github.io/cornelius
+ */
+
+import { isNil, isFinite, map, extend, min, max } from "lodash";
+import moment from "moment";
+import chroma from "chroma-js";
+import React, { useMemo } from "react";
+import Tooltip from "antd/lib/tooltip";
+import { createNumberFormatter, formatSimpleTemplate } from "@/lib/value-format";
+import chooseTextColorForBackground from "@/lib/chooseTextColorForBackground";
+
+import "./cornelius.less";
+
+const momentInterval = {
+ daily: "days",
+ weekly: "weeks",
+ monthly: "months",
+ yearly: "years",
+};
+
+const timeLabelFormats = {
+ daily: "MMMM D, YYYY",
+ weekly: "[Week of] MMM D, YYYY",
+ monthly: "MMMM YYYY",
+ yearly: "YYYY",
+};
+
+const defaultOptions = {
+ initialDate: null,
+ timeInterval: "monthly",
+ noValuePlaceholder: "-",
+ rawNumberOnHover: true,
+ displayAbsoluteValues: false,
+ initialIntervalNumber: 1,
+ maxColumns: Infinity,
+
+ title: null,
+ timeColumnTitle: "Time",
+ peopleColumnTitle: "People",
+ stageColumnTitle: "{{ @ }}",
+ numberFormat: "0,0[.]00",
+ percentFormat: "0.00%",
+ timeLabelFormat: timeLabelFormats.monthly,
+
+ colors: {
+ min: "#ffffff",
+ max: "#041d66",
+ steps: 7,
+ },
+};
+
+function prepareOptions(options: any) {
+ options = extend({}, defaultOptions, options, {
+ initialDate: moment(options.initialDate),
+ colors: extend({}, defaultOptions.colors, options.colors),
+ });
+
+ return extend(options, {
+ // @ts-expect-error ts-migrate(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message
+ timeLabelFormat: timeLabelFormats[options.timeInterval],
+ formatNumber: createNumberFormatter(options.numberFormat),
+ formatPercent: createNumberFormatter(options.percentFormat),
+ getColorForValue: chroma
+ .scale([options.colors.min, options.colors.max])
+ .mode("hsl")
+ .domain([0, 100])
+ .classes(options.colors.steps),
+ });
+}
+
+function isLightColor(backgroundColor: any) {
+ backgroundColor = chroma(backgroundColor);
+ const white = "#ffffff";
+ const black = "#000000";
+ return chroma.contrast(backgroundColor, white) < chroma.contrast(backgroundColor, black);
+}
+
+function formatStageTitle(options: any, index: any) {
+ return formatSimpleTemplate(options.stageColumnTitle, { "@": options.initialIntervalNumber - 1 + index });
+}
+
+function formatTimeLabel(options: any, offset: any) {
+ // @ts-expect-error ts-migrate(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message
+ const interval = momentInterval[options.timeInterval];
+ return options.initialDate
+ .clone()
+ .add(offset, interval)
+ .format(options.timeLabelFormat);
+}
+
+function CorneliusHeader({ options, maxRowLength }: any) {
+ // eslint-disable-line react/prop-types
+ const cells = [];
+ for (let i = 1; i < maxRowLength; i += 1) {
+ cells.push(
+
+ {formatStageTitle(options, i)}
+
+ );
+ }
+
+ return (
+
+ {options.timeColumnTitle}
+ {options.peopleColumnTitle}
+ {cells}
+
+ );
+}
+
+function CorneliusRow({ options, data, index, maxRowLength }: any) {
+ // eslint-disable-line react/prop-types
+ const baseValue = data[0] || 0;
+
+ const cells = [];
+ for (let i = 1; i < maxRowLength; i += 1) {
+ const value = data[i];
+ const percentageValue = isFinite(value / baseValue) ? (value / baseValue) * 100 : null;
+ const cellProps = { key: `col${i}` };
+
+ if (isNil(percentageValue)) {
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'className' does not exist on type '{ key... Remove this comment to see the full error message
+ cellProps.className = "cornelius-empty";
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'children' does not exist on type '{ key:... Remove this comment to see the full error message
+ cellProps.children = options.noValuePlaceholder;
+ } else {
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'className' does not exist on type '{ key... Remove this comment to see the full error message
+ cellProps.className = options.displayAbsoluteValues ? "cornelius-absolute" : "cornelius-percentage";
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'children' does not exist on type '{ key:... Remove this comment to see the full error message
+ cellProps.children = options.displayAbsoluteValues
+ ? options.formatNumber(value)
+ : options.formatPercent(percentageValue);
+
+ const backgroundColor = options.getColorForValue(percentageValue);
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'style' does not exist on type '{ key: st... Remove this comment to see the full error message
+ cellProps.style = {
+ backgroundColor,
+ color: chooseTextColorForBackground(backgroundColor),
+ };
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'style' does not exist on type '{ key: st... Remove this comment to see the full error message
+ if (isLightColor(cellProps.style.color)) {
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'className' does not exist on type '{ key... Remove this comment to see the full error message
+ cellProps.className += " cornelius-white-text";
+ }
+
+ if (options.rawNumberOnHover && !options.displayAbsoluteValues) {
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'children' does not exist on type '{ key:... Remove this comment to see the full error message
+ cellProps.children = (
+
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'children' does not exist on type '{ key:... Remove this comment to see the full error message */}
+ {cellProps.children}
+
+ );
+ }
+ }
+
+ cells.push( );
+ }
+
+ return (
+
+ {formatTimeLabel(options, index)}
+ {options.formatNumber(baseValue)}
+ {cells}
+
+ );
+}
+
+type OwnCorneliusProps = {
+ data?: number[][];
+ options?: {
+ initialDate: any; // TODO: PropTypes.instanceOf(Date)
+ timeInterval?: "daily" | "weekly" | "monthly" | "yearly";
+ noValuePlaceholder?: string;
+ rawNumberOnHover?: boolean;
+ displayAbsoluteValues?: boolean;
+ initialIntervalNumber?: number;
+ maxColumns?: number;
+ title?: string;
+ timeColumnTitle?: string;
+ peopleColumnTitle?: string;
+ stageColumnTitle?: string;
+ numberFormat?: string;
+ percentFormat?: string;
+ timeLabelFormat?: string;
+ colors?: {
+ min?: string;
+ max?: string;
+ steps?: number;
+ };
+ };
+};
+
+type CorneliusProps = OwnCorneliusProps & typeof Cornelius.defaultProps;
+
+export default function Cornelius({ data, options }: CorneliusProps) {
+ options = useMemo(() => prepareOptions(options), [options]);
+
+ const maxRowLength = useMemo(
+ () =>
+ min([
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'length' does not exist on type 'number'.
+ max(map(data, d => d.length)) || 0,
+ // @ts-expect-error ts-migrate(2532) FIXME: Object is possibly 'undefined'.
+ options.maxColumns + 1, // each row includes totals, but `maxColumns` is only for stage columns
+ ]),
+ [data, options.maxColumns]
+ );
+
+ if (data.length === 0) {
+ return null;
+ }
+
+ return (
+
+ {options.title &&
{options.title}
}
+
+
+
+
+
+
+ {map(data, (row, index) => (
+
+ ))}
+
+
+
+ );
+}
+
+Cornelius.defaultProps = {
+ data: [],
+ options: {},
+};
diff --git a/viz-lib/src/visualizations/cohort/Editor/AppearanceSettings.tsx b/viz-lib/src/visualizations/cohort/Editor/AppearanceSettings.tsx
new file mode 100644
index 000000000..b0a5b4ee8
--- /dev/null
+++ b/viz-lib/src/visualizations/cohort/Editor/AppearanceSettings.tsx
@@ -0,0 +1,108 @@
+import React from "react";
+import { useDebouncedCallback } from "use-debounce";
+import { Section, Input, Checkbox, ContextHelp } from "@/components/visualizations/editor";
+import { EditorPropTypes } from "@/visualizations/prop-types";
+
+export default function AppearanceSettings({ options, onOptionsChange }: any) {
+ const [debouncedOnOptionsChange] = useDebouncedCallback(onOptionsChange, 200);
+
+ return (
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ }
+ defaultValue={options.stageColumnTitle}
+ onChange={(e: any) => debouncedOnOptionsChange({ stageColumnTitle: e.target.value })}
+ />
+
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ onOptionsChange({ showTooltips: event.target.checked })}>
+ Show Tooltips
+
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ onOptionsChange({ percentValues: event.target.checked })}>
+ Normalize Values to Percentage
+
+
+
+ );
+}
+
+AppearanceSettings.propTypes = EditorPropTypes;
diff --git a/viz-lib/src/visualizations/cohort/Editor/ColorsSettings.tsx b/viz-lib/src/visualizations/cohort/Editor/ColorsSettings.tsx
new file mode 100644
index 000000000..73c26f2db
--- /dev/null
+++ b/viz-lib/src/visualizations/cohort/Editor/ColorsSettings.tsx
@@ -0,0 +1,65 @@
+import { isFinite } from "lodash";
+import React from "react";
+import { Section, ColorPicker, InputNumber } from "@/components/visualizations/editor";
+import { EditorPropTypes } from "@/visualizations/prop-types";
+import DefaultColorPalette from "@/visualizations/ColorPalette";
+
+const ColorPalette = {
+ White: "#FFFFFF",
+ ...DefaultColorPalette,
+};
+
+const minSteps = 3;
+const maxSteps = 20;
+
+function validateSteps(value: any) {
+ value = isFinite(value) ? value : parseInt(value, 10);
+ value = isFinite(value) ? value : 0;
+ return Math.max(minSteps, Math.min(value, maxSteps));
+}
+
+export default function ColorsSettings({ options, onOptionsChange }: any) {
+ return (
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ onOptionsChange({ colors: { min } })}
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'Label' does not exist on type '({ classN... Remove this comment to see the full error message
+ addonAfter={ }
+ />
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ onOptionsChange({ colors: { max } })}
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'Label' does not exist on type '({ classN... Remove this comment to see the full error message
+ addonAfter={ }
+ />
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ onOptionsChange({ colors: { steps: validateSteps(value) } })}
+ />
+
+
+ );
+}
+
+ColorsSettings.propTypes = EditorPropTypes;
diff --git a/viz-lib/src/visualizations/cohort/Editor/ColumnsSettings.tsx b/viz-lib/src/visualizations/cohort/Editor/ColumnsSettings.tsx
new file mode 100644
index 000000000..73f8d7d32
--- /dev/null
+++ b/viz-lib/src/visualizations/cohort/Editor/ColumnsSettings.tsx
@@ -0,0 +1,84 @@
+import { map } from "lodash";
+import React from "react";
+import { Section, Select } from "@/components/visualizations/editor";
+import { EditorPropTypes } from "@/visualizations/prop-types";
+
+export default function ColumnsSettings({ options, data, onOptionsChange }: any) {
+ return (
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ onOptionsChange({ dateColumn })}>
+ {map(data.columns, ({ name }) => (
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message
+
+ {name}
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ ))}
+
+
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ onOptionsChange({ stageColumn })}>
+ {map(data.columns, ({ name }) => (
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message
+
+ {name}
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ ))}
+
+
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ onOptionsChange({ totalColumn })}>
+ {map(data.columns, ({ name }) => (
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message
+
+ {name}
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ ))}
+
+
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ onOptionsChange({ valueColumn })}>
+ {map(data.columns, ({ name }) => (
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message
+
+ {name}
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ ))}
+
+
+
+ );
+}
+
+ColumnsSettings.propTypes = EditorPropTypes;
diff --git a/viz-lib/src/visualizations/cohort/Editor/OptionsSettings.tsx b/viz-lib/src/visualizations/cohort/Editor/OptionsSettings.tsx
new file mode 100644
index 000000000..223d452b7
--- /dev/null
+++ b/viz-lib/src/visualizations/cohort/Editor/OptionsSettings.tsx
@@ -0,0 +1,59 @@
+import { map } from "lodash";
+import React from "react";
+import { Section, Select } from "@/components/visualizations/editor";
+import { EditorPropTypes } from "@/visualizations/prop-types";
+
+const CohortTimeIntervals = {
+ daily: "Daily",
+ weekly: "Weekly",
+ monthly: "Monthly",
+};
+
+const CohortModes = {
+ diagonal: "Fill gaps with zeros",
+ simple: "Show data as is",
+};
+
+export default function OptionsSettings({ options, onOptionsChange }: any) {
+ return (
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ onOptionsChange({ timeInterval })}>
+ {map(CohortTimeIntervals, (name, value) => (
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message
+
+ {name}
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ ))}
+
+
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ onOptionsChange({ mode })}>
+ {map(CohortModes, (name, value) => (
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message
+
+ {name}
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ ))}
+
+
+
+ );
+}
+
+OptionsSettings.propTypes = EditorPropTypes;
diff --git a/viz-lib/src/visualizations/cohort/Editor/index.ts b/viz-lib/src/visualizations/cohort/Editor/index.ts
new file mode 100644
index 000000000..283f3630a
--- /dev/null
+++ b/viz-lib/src/visualizations/cohort/Editor/index.ts
@@ -0,0 +1,13 @@
+import createTabbedEditor from "@/components/visualizations/editor/createTabbedEditor";
+
+import ColumnsSettings from "./ColumnsSettings";
+import OptionsSettings from "./OptionsSettings";
+import ColorsSettings from "./ColorsSettings";
+import AppearanceSettings from "./AppearanceSettings";
+
+export default createTabbedEditor([
+ { key: "Columns", title: "Columns", component: ColumnsSettings },
+ { key: "Options", title: "Options", component: OptionsSettings },
+ { key: "Colors", title: "Colors", component: ColorsSettings },
+ { key: "Appearance", title: "Appearance", component: AppearanceSettings },
+]);
diff --git a/viz-lib/src/visualizations/cohort/Renderer.tsx b/viz-lib/src/visualizations/cohort/Renderer.tsx
new file mode 100644
index 000000000..ce56888a9
--- /dev/null
+++ b/viz-lib/src/visualizations/cohort/Renderer.tsx
@@ -0,0 +1,44 @@
+import React, { useMemo } from "react";
+import { RendererPropTypes } from "@/visualizations/prop-types";
+
+import prepareData from "./prepareData";
+import "./renderer.less";
+
+import Cornelius from "./Cornelius";
+
+export default function Renderer({ data, options }: any) {
+ const { data: cohortData, initialDate } = useMemo(() => prepareData(data, options), [data, options]);
+
+ const corneliusOptions = useMemo(
+ () => ({
+ initialDate,
+ timeInterval: options.timeInterval,
+
+ noValuePlaceholder: options.noValuePlaceholder,
+ rawNumberOnHover: options.showTooltips,
+ displayAbsoluteValues: !options.percentValues,
+
+ timeColumnTitle: options.timeColumnTitle,
+ peopleColumnTitle: options.peopleColumnTitle,
+ stageColumnTitle: options.stageColumnTitle,
+
+ numberFormat: options.numberFormat,
+ percentFormat: options.percentFormat,
+
+ colors: options.colors,
+ }),
+ [options, initialDate]
+ );
+
+ if (cohortData.length === 0) {
+ return null;
+ }
+
+ return (
+
+
+
+ );
+}
+
+Renderer.propTypes = RendererPropTypes;
diff --git a/viz-lib/src/visualizations/cohort/cornelius.less b/viz-lib/src/visualizations/cohort/cornelius.less
new file mode 100644
index 000000000..9072864b9
--- /dev/null
+++ b/viz-lib/src/visualizations/cohort/cornelius.less
@@ -0,0 +1,53 @@
+@import "../variables";
+
+.cornelius-container {
+ .cornelius-title {
+ text-align: center;
+ padding-bottom: 10px;
+ font-weight: bold;
+ font-size: 14pt;
+ color: @table-header-color;
+ border-collapse: collapse;
+ }
+
+ .cornelius-table {
+ font-size: 9pt;
+ border-spacing: 0;
+ border: 1px solid #e4e4e4;
+ border-collapse: collapse;
+
+ th,
+ td {
+ text-align: center;
+ padding: 10px;
+ border: 1px solid #e4e4e4;
+ color: @table-header-color;
+ font-weight: bold;
+ }
+
+ .cornelius-label {
+ text-align: left;
+ }
+
+ .cornelius-empty,
+ .cornelius-percentage,
+ .cornelius-absolute {
+ font-weight: normal;
+ border: none;
+ }
+
+ .cornelius-label,
+ .cornelius-people,
+ .cornelius-stage {
+ font-weight: bold;
+ color: @table-header-color;
+ }
+
+ .cornelius-percentage,
+ .cornelius-absolute {
+ &.cornelius-white-text {
+ text-shadow: 1px 1px 1px #000000;
+ }
+ }
+ }
+}
diff --git a/viz-lib/src/visualizations/cohort/getOptions.ts b/viz-lib/src/visualizations/cohort/getOptions.ts
new file mode 100644
index 000000000..4efe2abb5
--- /dev/null
+++ b/viz-lib/src/visualizations/cohort/getOptions.ts
@@ -0,0 +1,32 @@
+import { merge } from "lodash";
+import ColorPalette from "@/visualizations/ColorPalette";
+
+const DEFAULT_OPTIONS = {
+ timeInterval: "daily",
+ mode: "diagonal",
+ dateColumn: "date",
+ stageColumn: "day_number",
+ totalColumn: "total",
+ valueColumn: "value",
+
+ showTooltips: true,
+ percentValues: true,
+
+ timeColumnTitle: "Time",
+ peopleColumnTitle: "Users",
+ stageColumnTitle: "{{ @ }}",
+
+ numberFormat: "0,0[.]00",
+ percentFormat: "0.00%",
+ noValuePlaceholder: "-",
+
+ colors: {
+ min: "#ffffff",
+ max: ColorPalette["Dark Blue"],
+ steps: 7,
+ },
+};
+
+export default function getOptions(options: any) {
+ return merge({}, DEFAULT_OPTIONS, options);
+}
diff --git a/viz-lib/src/visualizations/cohort/index.ts b/viz-lib/src/visualizations/cohort/index.ts
new file mode 100644
index 000000000..146b212d9
--- /dev/null
+++ b/viz-lib/src/visualizations/cohort/index.ts
@@ -0,0 +1,14 @@
+import getOptions from "./getOptions";
+import Renderer from "./Renderer";
+import Editor from "./Editor";
+
+export default {
+ type: "COHORT",
+ name: "Cohort",
+ getOptions,
+ Renderer,
+ Editor,
+
+ autoHeight: true,
+ defaultRows: 8,
+};
diff --git a/viz-lib/src/visualizations/cohort/prepareData.ts b/viz-lib/src/visualizations/cohort/prepareData.ts
new file mode 100644
index 000000000..22324e464
--- /dev/null
+++ b/viz-lib/src/visualizations/cohort/prepareData.ts
@@ -0,0 +1,147 @@
+import _ from "lodash";
+import moment from "moment";
+
+const momentInterval = {
+ weekly: "weeks",
+ daily: "days",
+ monthly: "months",
+};
+
+function groupData(sortedData: any) {
+ const result = {};
+
+ _.each(sortedData, item => {
+ const date = moment(item.date);
+ const groupKey = date.valueOf();
+ // @ts-expect-error ts-migrate(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message
+ result[groupKey] = result[groupKey] || {
+ date,
+ total: parseInt(item.total, 10) || 0,
+ values: {},
+ };
+ // @ts-expect-error ts-migrate(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message
+ result[groupKey].values[item.stage] = parseInt(item.value, 10) || null;
+ });
+
+ return _.values(result);
+}
+
+function prepareDiagonalData(sortedData: any, options: any) {
+ const timeInterval = options.timeInterval;
+ const grouped = groupData(sortedData);
+ const firstStage = _.min(_.map(sortedData, i => i.stage));
+ // @ts-expect-error ts-migrate(2571) FIXME: Object is of type 'unknown'.
+ const stageCount = moment(_.last(grouped).date).diff(_.first(grouped).date, momentInterval[timeInterval]);
+ let lastStage = firstStage + stageCount;
+
+ let previousDate: any = null;
+
+ const data: any = [];
+ _.each(grouped, group => {
+ if (previousDate !== null) {
+ // @ts-expect-error ts-migrate(2571) FIXME: Object is of type 'unknown'.
+ let diff = Math.abs(previousDate.diff(group.date, momentInterval[timeInterval]));
+ while (diff > 1) {
+ const row = [0];
+ for (let stage = firstStage; stage <= lastStage; stage += 1) {
+ // @ts-expect-error ts-migrate(2571) FIXME: Object is of type 'unknown'.
+ row.push(group.values[stage] || 0);
+ }
+ data.push(row);
+ // It should be diagonal, so decrease count of stages for each next row
+ lastStage -= 1;
+ diff -= 1;
+ }
+ }
+
+ // @ts-expect-error ts-migrate(2571) FIXME: Object is of type 'unknown'.
+ previousDate = group.date;
+
+ // @ts-expect-error ts-migrate(2571) FIXME: Object is of type 'unknown'.
+ const row = [group.total];
+ for (let stage = firstStage; stage <= lastStage; stage += 1) {
+ // @ts-expect-error ts-migrate(2571) FIXME: Object is of type 'unknown'.
+ row.push(group.values[stage] || 0);
+ }
+ // It should be diagonal, so decrease count of stages for each next row
+ lastStage -= 1;
+
+ data.push(row);
+ });
+
+ return data;
+}
+
+function prepareSimpleData(sortedData: any, options: any) {
+ const timeInterval = options.timeInterval;
+ const grouped = groupData(sortedData);
+ const stages = _.map(sortedData, i => i.stage);
+ const firstStage = _.min(stages);
+ const lastStage = _.max(stages);
+
+ let previousDate: any = null;
+
+ const data: any = [];
+ _.each(grouped, group => {
+ if (previousDate !== null) {
+ // @ts-expect-error ts-migrate(2571) FIXME: Object is of type 'unknown'.
+ let diff = Math.abs(previousDate.diff(group.date, momentInterval[timeInterval]));
+ while (diff > 1) {
+ data.push([0]);
+ diff -= 1;
+ }
+ }
+
+ // @ts-expect-error ts-migrate(2571) FIXME: Object is of type 'unknown'.
+ previousDate = group.date;
+
+ // @ts-expect-error ts-migrate(2571) FIXME: Object is of type 'unknown'.
+ const row = [group.total];
+ for (let stage = firstStage; stage <= lastStage; stage += 1) {
+ // @ts-expect-error ts-migrate(2571) FIXME: Object is of type 'unknown'.
+ row.push(group.values[stage]);
+ }
+
+ data.push(row);
+ });
+
+ return data;
+}
+
+function isDataValid(rawData: any, options: any) {
+ const columnNames = _.map(rawData.columns, c => c.name);
+ return (
+ rawData.rows.length > 0 &&
+ _.includes(columnNames, options.dateColumn) &&
+ _.includes(columnNames, options.stageColumn) &&
+ _.includes(columnNames, options.totalColumn) &&
+ _.includes(columnNames, options.valueColumn)
+ );
+}
+
+export default function prepareData(rawData: any, options: any) {
+ if (!isDataValid(rawData, options)) {
+ return { data: [], initialDate: null };
+ }
+
+ rawData = _.map(rawData.rows, item => ({
+ date: item[options.dateColumn],
+ stage: parseInt(item[options.stageColumn], 10),
+ total: parseFloat(item[options.totalColumn]),
+ value: parseFloat(item[options.valueColumn]),
+ }));
+ const sortedData = _.sortBy(rawData, r => r.date + r.stage);
+ const initialDate = moment(sortedData[0].date).toDate();
+
+ let data;
+ switch (options.mode) {
+ case "simple":
+ data = prepareSimpleData(sortedData, options);
+ break;
+ default:
+ data = prepareDiagonalData(sortedData, options);
+ break;
+ }
+
+ return { data, initialDate };
+}
diff --git a/viz-lib/src/visualizations/cohort/renderer.less b/viz-lib/src/visualizations/cohort/renderer.less
new file mode 100644
index 000000000..9809e13d0
--- /dev/null
+++ b/viz-lib/src/visualizations/cohort/renderer.less
@@ -0,0 +1,21 @@
+@import "../variables";
+
+.cohort-visualization-container {
+ .cornelius-table {
+ width: 100%;
+
+ &,
+ tr,
+ th,
+ td {
+ border-color: #f0f0f0;
+ }
+
+ .cornelius-time,
+ .cornelius-label,
+ .cornelius-stage,
+ .cornelius-people {
+ background-color: fade(@visualizations-gray, 3%);
+ }
+ }
+}
diff --git a/viz-lib/src/visualizations/counter/Editor/FormatSettings.tsx b/viz-lib/src/visualizations/counter/Editor/FormatSettings.tsx
new file mode 100644
index 000000000..6fac1f1c4
--- /dev/null
+++ b/viz-lib/src/visualizations/counter/Editor/FormatSettings.tsx
@@ -0,0 +1,88 @@
+import React from "react";
+import { Section, Input, InputNumber, Switch } from "@/components/visualizations/editor";
+import { EditorPropTypes } from "@/visualizations/prop-types";
+
+import { isValueNumber } from "../utils";
+
+export default function FormatSettings({ options, data, onOptionsChange }: any) {
+ const inputsEnabled = isValueNumber(data.rows, options);
+ return (
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ onOptionsChange({ stringDecimal })}
+ />
+
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+ any' is not assi... Remove this comment to see the full error message
+ onChange={(formatTargetValue: any) => onOptionsChange({ formatTargetValue })}>
+ Format Target Value
+
+
+
+ );
+}
+
+FormatSettings.propTypes = EditorPropTypes;
diff --git a/viz-lib/src/visualizations/counter/Editor/GeneralSettings.tsx b/viz-lib/src/visualizations/counter/Editor/GeneralSettings.tsx
new file mode 100644
index 000000000..3f3155bee
--- /dev/null
+++ b/viz-lib/src/visualizations/counter/Editor/GeneralSettings.tsx
@@ -0,0 +1,100 @@
+import { map } from "lodash";
+import React from "react";
+import { Section, Select, Input, InputNumber, Switch } from "@/components/visualizations/editor";
+import { EditorPropTypes } from "@/visualizations/prop-types";
+
+export default function GeneralSettings({ options, data, visualizationName, onOptionsChange }: any) {
+ return (
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ onOptionsChange({ counterColName })}>
+ {map(data.columns, col => (
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message
+
+ {col.name}
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ ))}
+
+
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ onOptionsChange({ rowNumber })}
+ />
+
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ onOptionsChange({ targetColName })}>
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+ No target value
+ {map(data.columns, col => (
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message
+
+ {col.name}
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ ))}
+
+
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ onOptionsChange({ targetRowNumber })}
+ />
+
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+ any' is not assignable to... Remove this comment to see the full error message
+ onChange={(countRow: any) => onOptionsChange({ countRow })}>
+ Count Rows
+
+
+
+ );
+}
+
+GeneralSettings.propTypes = EditorPropTypes;
diff --git a/viz-lib/src/visualizations/counter/Editor/index.ts b/viz-lib/src/visualizations/counter/Editor/index.ts
new file mode 100644
index 000000000..ce4bce4ea
--- /dev/null
+++ b/viz-lib/src/visualizations/counter/Editor/index.ts
@@ -0,0 +1,9 @@
+import createTabbedEditor from "@/components/visualizations/editor/createTabbedEditor";
+
+import GeneralSettings from "./GeneralSettings";
+import FormatSettings from "./FormatSettings";
+
+export default createTabbedEditor([
+ { key: "General", title: "General", component: GeneralSettings },
+ { key: "Format", title: "Format", component: FormatSettings },
+]);
diff --git a/viz-lib/src/visualizations/counter/Renderer.tsx b/viz-lib/src/visualizations/counter/Renderer.tsx
new file mode 100644
index 000000000..3c925e423
--- /dev/null
+++ b/viz-lib/src/visualizations/counter/Renderer.tsx
@@ -0,0 +1,87 @@
+import { isFinite } from "lodash";
+import React, { useState, useEffect } from "react";
+import cx from "classnames";
+import resizeObserver from "@/services/resizeObserver";
+import { RendererPropTypes } from "@/visualizations/prop-types";
+
+import { getCounterData } from "./utils";
+
+import "./render.less";
+
+function getCounterStyles(scale: any) {
+ return {
+ msTransform: `scale(${scale})`,
+ MozTransform: `scale(${scale})`,
+ WebkitTransform: `scale(${scale})`,
+ transform: `scale(${scale})`,
+ };
+}
+
+function getCounterScale(container: any) {
+ const inner = container.firstChild;
+ const scale = Math.min(container.offsetWidth / inner.offsetWidth, container.offsetHeight / inner.offsetHeight);
+ return Number(isFinite(scale) ? scale : 1).toFixed(2); // keep only two decimal places
+}
+
+export default function Renderer({ data, options, visualizationName }: any) {
+ const [scale, setScale] = useState("1.00");
+ const [container, setContainer] = useState(null);
+
+ useEffect(() => {
+ if (container) {
+ const unwatch = resizeObserver(container, () => {
+ setScale(getCounterScale(container));
+ });
+ return unwatch;
+ }
+ }, [container]);
+
+ useEffect(() => {
+ if (container) {
+ // update scaling when options or data change (new formatting, values, etc.
+ // may change inner container dimensions which will not be tracked by `resizeObserver`);
+ setScale(getCounterScale(container));
+ }
+ }, [data, options, container]);
+
+ const {
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'showTrend' does not exist on type '{}'.
+ showTrend,
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'trendPositive' does not exist on type '{... Remove this comment to see the full error message
+ trendPositive,
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'counterValue' does not exist on type '{}... Remove this comment to see the full error message
+ counterValue,
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'counterValueTooltip' does not exist on t... Remove this comment to see the full error message
+ counterValueTooltip,
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'targetValue' does not exist on type '{}'... Remove this comment to see the full error message
+ targetValue,
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'targetValueTooltip' does not exist on ty... Remove this comment to see the full error message
+ targetValueTooltip,
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'counterLabel' does not exist on type '{}... Remove this comment to see the full error message
+ counterLabel,
+ } = getCounterData(data.rows, options, visualizationName);
+ return (
+
+ {/* @ts-expect-error ts-migrate(2322) FIXME: Type 'Dispatch
>' is not assig... Remove this comment to see the full error message */}
+
+
+
+ {counterValue}
+
+ {targetValue && (
+
+ ({targetValue})
+
+ )}
+
{counterLabel}
+
+
+
+ );
+}
+
+Renderer.propTypes = RendererPropTypes;
diff --git a/viz-lib/src/visualizations/counter/index.ts b/viz-lib/src/visualizations/counter/index.ts
new file mode 100644
index 000000000..21fa130cf
--- /dev/null
+++ b/viz-lib/src/visualizations/counter/index.ts
@@ -0,0 +1,27 @@
+import Renderer from "./Renderer";
+import Editor from "./Editor";
+
+const DEFAULT_OPTIONS = {
+ counterLabel: "",
+ counterColName: "counter",
+ rowNumber: 1,
+ targetRowNumber: 1,
+ stringDecimal: 0,
+ stringDecChar: ".",
+ stringThouSep: ",",
+ tooltipFormat: "0,0.000", // TODO: Show in editor
+};
+
+export default {
+ type: "COUNTER",
+ name: "Counter",
+ getOptions: (options: any) => ({
+ ...DEFAULT_OPTIONS,
+ ...options,
+ }),
+ Renderer,
+ Editor,
+
+ defaultColumns: 2,
+ defaultRows: 5,
+};
diff --git a/viz-lib/src/visualizations/counter/render.less b/viz-lib/src/visualizations/counter/render.less
new file mode 100755
index 000000000..db19ccb72
--- /dev/null
+++ b/viz-lib/src/visualizations/counter/render.less
@@ -0,0 +1,47 @@
+.counter-visualization-container {
+ display: block;
+ text-align: center;
+ padding: 15px 10px;
+ overflow: hidden;
+ position: relative;
+
+ .counter-visualization-content {
+ margin: 0;
+ padding: 0;
+ font-size: 80px;
+ line-height: normal;
+ overflow: hidden;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+
+ .counter-visualization-value,
+ .counter-visualization-target {
+ font-size: 1em;
+ display: block;
+ }
+
+ .counter-visualization-label {
+ font-size: 0.5em;
+ display: block;
+ }
+
+ .counter-visualization-target {
+ color: #ccc;
+ }
+
+ .counter-visualization-label {
+ font-size: 0.5em;
+ display: block;
+ }
+ }
+
+ &.trend-positive .counter-visualization-value {
+ color: #5cb85c;
+ }
+
+ &.trend-negative .counter-visualization-value {
+ color: #d9534f;
+ }
+}
diff --git a/viz-lib/src/visualizations/counter/utils.test.ts b/viz-lib/src/visualizations/counter/utils.test.ts
new file mode 100644
index 000000000..65a7fc34f
--- /dev/null
+++ b/viz-lib/src/visualizations/counter/utils.test.ts
@@ -0,0 +1,168 @@
+import { getCounterData } from "./utils";
+
+let dummy: any;
+
+describe("Visualizations -> Counter -> Utils", () => {
+ beforeEach(() => {
+ dummy = {
+ rows: [
+ { city: "New York City", population: 18604000 },
+ { city: "Shangai", population: 24484000 },
+ { city: "Tokyo", population: 38140000 },
+ ],
+ options: {},
+ visualisationName: "Visualisation Name",
+ result: {
+ counterLabel: "Visualisation Name",
+ counterValue: "",
+ targetValue: null,
+ counterValueTooltip: "",
+ targetValueTooltip: "",
+ },
+ };
+ });
+
+ describe("getCounterData()", () => {
+ describe('"Count rows" option is disabled', () => {
+ test("No target and counter values return empty result", () => {
+ const result = getCounterData(dummy.rows, dummy.options, dummy.visualisationName);
+ expect(result).toEqual({
+ ...dummy.result,
+ showTrend: false,
+ });
+ });
+
+ test('"Counter label" overrides vizualization name', () => {
+ const result = getCounterData(dummy.rows, { counterLabel: "Counter Label" }, dummy.visualisationName);
+ expect(result).toEqual({
+ ...dummy.result,
+ counterLabel: "Counter Label",
+ showTrend: false,
+ });
+ });
+
+ test('"Counter Value Column Name" must be set to a correct non empty value', () => {
+ const result = getCounterData(dummy.rows, { rowNumber: 3 }, dummy.visualisationName);
+ expect(result).toEqual({
+ ...dummy.result,
+ showTrend: false,
+ });
+
+ const result2 = getCounterData(dummy.rows, { counterColName: "missingColumn" }, dummy.visualisationName);
+ expect(result2).toEqual({
+ ...dummy.result,
+ showTrend: false,
+ });
+ });
+
+ test('"Counter Value Column Name" uses correct column', () => {
+ const result = getCounterData(dummy.rows, { counterColName: "population" }, dummy.visualisationName);
+ expect(result).toEqual({
+ ...dummy.result,
+ counterValue: "18,604,000.000",
+ counterValueTooltip: "18,604,000",
+ showTrend: false,
+ });
+ });
+
+ test("Counter and target values return correct result including trend", () => {
+ const result = getCounterData(
+ dummy.rows,
+ {
+ rowNumber: 1,
+ counterColName: "population",
+ targetRowNumber: 2,
+ targetColName: "population",
+ },
+ dummy.visualisationName
+ );
+ expect(result).toEqual({
+ ...dummy.result,
+ counterValue: "18,604,000.000",
+ counterValueTooltip: "18,604,000",
+ targetValue: "24484000",
+ targetValueTooltip: "24,484,000",
+ showTrend: true,
+ trendPositive: false,
+ });
+
+ const result2 = getCounterData(
+ dummy.rows,
+ {
+ rowNumber: 2,
+ counterColName: "population",
+ targetRowNumber: 1,
+ targetColName: "population",
+ },
+ dummy.visualisationName
+ );
+ expect(result2).toEqual({
+ ...dummy.result,
+ counterValue: "24,484,000.000",
+ counterValueTooltip: "24,484,000",
+ targetValue: "18604000",
+ targetValueTooltip: "18,604,000",
+ showTrend: true,
+ trendPositive: true,
+ });
+ });
+ });
+
+ describe('"Count rows" option is enabled', () => {
+ beforeEach(() => {
+ dummy.result = {
+ ...dummy.result,
+ counterValue: "3.000",
+ counterValueTooltip: "3",
+ showTrend: false,
+ };
+ });
+
+ test("Rows are counted correctly", () => {
+ const result = getCounterData(dummy.rows, { countRow: true }, dummy.visualisationName);
+ expect(result).toEqual(dummy.result);
+ });
+
+ test("Counter value is ignored", () => {
+ const result = getCounterData(
+ dummy.rows,
+ {
+ countRow: true,
+ rowNumber: 3,
+ counterColName: "population",
+ },
+ dummy.visualisationName
+ );
+ expect(result).toEqual(dummy.result);
+ });
+
+ test("Target value and trend are computed correctly", () => {
+ const result = getCounterData(
+ dummy.rows,
+ {
+ countRow: true,
+ targetRowNumber: 2,
+ targetColName: "population",
+ },
+ dummy.visualisationName
+ );
+ expect(result).toEqual({
+ ...dummy.result,
+ targetValue: "24484000",
+ targetValueTooltip: "24,484,000",
+ showTrend: true,
+ trendPositive: false,
+ });
+ });
+
+ test("Empty rows return counter value 0", () => {
+ const result = getCounterData([], { countRow: true }, dummy.visualisationName);
+ expect(result).toEqual({
+ ...dummy.result,
+ counterValue: "0.000",
+ counterValueTooltip: "0",
+ });
+ });
+ });
+ });
+});
diff --git a/viz-lib/src/visualizations/counter/utils.ts b/viz-lib/src/visualizations/counter/utils.ts
new file mode 100644
index 000000000..1f433fffe
--- /dev/null
+++ b/viz-lib/src/visualizations/counter/utils.ts
@@ -0,0 +1,149 @@
+import { isNumber, isFinite, toString } from "lodash";
+import numeral from "numeral";
+
+// TODO: allow user to specify number format string instead of delimiters only
+// It will allow to remove this function (move all that weird formatting logic to a migration
+// that will set number format for all existing counter visualization)
+function numberFormat(value: any, decimalPoints: any, decimalDelimiter: any, thousandsDelimiter: any) {
+ // Temporarily update locale data (restore defaults after formatting)
+ const locale = numeral.localeData();
+ const savedDelimiters = locale.delimiters;
+
+ // Mimic old behavior - AngularJS `number` filter defaults:
+ // - `,` as thousands delimiter
+ // - `.` as decimal delimiter
+ // - three decimal points
+ locale.delimiters = {
+ thousands: ",",
+ decimal: ".",
+ };
+ let formatString = "0,0.000";
+ if ((Number.isFinite(decimalPoints) && decimalPoints >= 0) || decimalDelimiter || thousandsDelimiter) {
+ locale.delimiters = {
+ thousands: thousandsDelimiter,
+ decimal: decimalDelimiter || ".",
+ };
+
+ formatString = "0,0";
+ if (decimalPoints > 0) {
+ formatString += ".";
+ while (decimalPoints > 0) {
+ formatString += "0";
+ decimalPoints -= 1;
+ }
+ }
+ }
+ const result = numeral(value).format(formatString);
+
+ locale.delimiters = savedDelimiters;
+ return result;
+}
+
+// 0 - special case, use first record
+// 1..N - 1-based record number from beginning (wraps if greater than dataset size)
+// -1..-N - 1-based record number from end (wraps if greater than dataset size)
+function getRowNumber(index: any, rowsCount: any) {
+ index = parseInt(index, 10) || 0;
+ if (index === 0) {
+ return index;
+ }
+ const wrappedIndex = (Math.abs(index) - 1) % rowsCount;
+ return index > 0 ? wrappedIndex : rowsCount - wrappedIndex - 1;
+}
+
+function formatValue(value: any, { stringPrefix, stringSuffix, stringDecimal, stringDecChar, stringThouSep }: any) {
+ if (isNumber(value)) {
+ value = numberFormat(value, stringDecimal, stringDecChar, stringThouSep);
+ return toString(stringPrefix) + value + toString(stringSuffix);
+ }
+ return toString(value);
+}
+
+function formatTooltip(value: any, formatString: any) {
+ if (isNumber(value)) {
+ return numeral(value).format(formatString);
+ }
+ return toString(value);
+}
+
+export function getCounterData(rows: any, options: any, visualizationName: any) {
+ const result = {};
+ const rowsCount = rows.length;
+
+ if (rowsCount > 0 || options.countRow) {
+ const counterColName = options.counterColName;
+ const targetColName = options.targetColName;
+
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'counterLabel' does not exist on type '{}... Remove this comment to see the full error message
+ result.counterLabel = options.counterLabel || visualizationName;
+
+ if (options.countRow) {
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'counterValue' does not exist on type '{}... Remove this comment to see the full error message
+ result.counterValue = rowsCount;
+ } else if (counterColName) {
+ const rowNumber = getRowNumber(options.rowNumber, rowsCount);
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'counterValue' does not exist on type '{}... Remove this comment to see the full error message
+ result.counterValue = rows[rowNumber][counterColName];
+ }
+
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'showTrend' does not exist on type '{}'.
+ result.showTrend = false;
+
+ if (targetColName) {
+ const targetRowNumber = getRowNumber(options.targetRowNumber, rowsCount);
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'targetValue' does not exist on type '{}'... Remove this comment to see the full error message
+ result.targetValue = rows[targetRowNumber][targetColName];
+
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'counterValue' does not exist on type '{}... Remove this comment to see the full error message
+ if (Number.isFinite(result.counterValue) && isFinite(result.targetValue)) {
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'counterValue' does not exist on type '{}... Remove this comment to see the full error message
+ const delta = result.counterValue - result.targetValue;
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'showTrend' does not exist on type '{}'.
+ result.showTrend = true;
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'trendPositive' does not exist on type '{... Remove this comment to see the full error message
+ result.trendPositive = delta >= 0;
+ }
+ } else {
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'targetValue' does not exist on type '{}'... Remove this comment to see the full error message
+ result.targetValue = null;
+ }
+
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'counterValueTooltip' does not exist on t... Remove this comment to see the full error message
+ result.counterValueTooltip = formatTooltip(result.counterValue, options.tooltipFormat);
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'targetValueTooltip' does not exist on ty... Remove this comment to see the full error message
+ result.targetValueTooltip = formatTooltip(result.targetValue, options.tooltipFormat);
+
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'counterValue' does not exist on type '{}... Remove this comment to see the full error message
+ result.counterValue = formatValue(result.counterValue, options);
+
+ if (options.formatTargetValue) {
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'targetValue' does not exist on type '{}'... Remove this comment to see the full error message
+ result.targetValue = formatValue(result.targetValue, options);
+ } else {
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'targetValue' does not exist on type '{}'... Remove this comment to see the full error message
+ if (isFinite(result.targetValue)) {
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'targetValue' does not exist on type '{}'... Remove this comment to see the full error message
+ result.targetValue = numeral(result.targetValue).format("0[.]00[0]");
+ }
+ }
+ }
+
+ return result;
+}
+
+export function isValueNumber(rows: any, options: any) {
+ if (options.countRow) {
+ return true; // array length is always a number
+ }
+
+ const rowsCount = rows.length;
+ if (rowsCount > 0) {
+ const rowNumber = getRowNumber(options.rowNumber, rowsCount);
+ const counterColName = options.counterColName;
+ if (counterColName) {
+ return isNumber(rows[rowNumber][counterColName]);
+ }
+ }
+
+ return false;
+}
diff --git a/viz-lib/src/visualizations/details/DetailsRenderer.tsx b/viz-lib/src/visualizations/details/DetailsRenderer.tsx
new file mode 100644
index 000000000..ce8a59bea
--- /dev/null
+++ b/viz-lib/src/visualizations/details/DetailsRenderer.tsx
@@ -0,0 +1,64 @@
+import React, { useState } from "react";
+import { map, mapValues, keyBy } from "lodash";
+import moment from "moment";
+import { RendererPropTypes } from "@/visualizations/prop-types";
+import { visualizationsSettings } from "@/visualizations/visualizationsSettings";
+import Descriptions from "antd/lib/descriptions";
+import Pagination from "antd/lib/pagination";
+
+import "./details.less";
+
+function renderValue(value: any, type: any) {
+ const formats = {
+ date: visualizationsSettings.dateFormat,
+ datetime: visualizationsSettings.dateTimeFormat,
+ };
+
+ if (type === "date" || type === "datetime") {
+ if (moment.isMoment(value)) {
+ // @ts-expect-error ts-migrate(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message
+ return value.format(formats[type]);
+ }
+ }
+
+ return "" + value;
+}
+
+export default function DetailsRenderer({ data }: any) {
+ const [page, setPage] = useState(0);
+
+ if (!data || !data.rows || data.rows.length === 0) {
+ return null;
+ }
+
+ const types = mapValues(keyBy(data.columns, "name"), "type");
+
+ // We use columsn to maintain order of columns in the view.
+ const columns = data.columns.map((column: any) => column.name);
+ const row = data.rows[page];
+
+ return (
+
+
+ {map(columns, key => (
+
+ {renderValue(row[key], types[key])}
+
+ ))}
+
+ {data.rows.length > 1 && (
+
+ )}
+
+ );
+}
+
+DetailsRenderer.propTypes = RendererPropTypes;
diff --git a/viz-lib/src/visualizations/details/details.less b/viz-lib/src/visualizations/details/details.less
new file mode 100644
index 000000000..69a7c4141
--- /dev/null
+++ b/viz-lib/src/visualizations/details/details.less
@@ -0,0 +1,10 @@
+.details-viz {
+ .ant-descriptions-item-label {
+ width: 1px;
+ white-space: nowrap;
+ }
+
+ .paginator-container {
+ margin-top: 10px;
+ }
+}
diff --git a/viz-lib/src/visualizations/details/index.ts b/viz-lib/src/visualizations/details/index.ts
new file mode 100644
index 000000000..a8428ea67
--- /dev/null
+++ b/viz-lib/src/visualizations/details/index.ts
@@ -0,0 +1,15 @@
+import DetailsRenderer from "./DetailsRenderer";
+
+const DEFAULT_OPTIONS = {};
+
+export default {
+ type: "DETAILS",
+ name: "Details View",
+ getOptions: (options: any) => ({
+ ...DEFAULT_OPTIONS,
+ ...options,
+ }),
+ Renderer: DetailsRenderer,
+ defaultColumns: 2,
+ defaultRows: 2,
+};
diff --git a/viz-lib/src/visualizations/funnel/Editor/AppearanceSettings.tsx b/viz-lib/src/visualizations/funnel/Editor/AppearanceSettings.tsx
new file mode 100644
index 000000000..e1a140eb7
--- /dev/null
+++ b/viz-lib/src/visualizations/funnel/Editor/AppearanceSettings.tsx
@@ -0,0 +1,82 @@
+import React from "react";
+import { useDebouncedCallback } from "use-debounce";
+import { Section, Input, InputNumber, ContextHelp } from "@/components/visualizations/editor";
+import { EditorPropTypes } from "@/visualizations/prop-types";
+
+export default function AppearanceSettings({ options, onOptionsChange }: any) {
+ const [onOptionsChangeDebounced] = useDebouncedCallback(onOptionsChange, 200);
+
+ return (
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ }
+ data-test="Funnel.NumberFormat"
+ defaultValue={options.numberFormat}
+ onChange={(event: any) => onOptionsChangeDebounced({ numberFormat: event.target.value })}
+ />
+
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ onOptionsChangeDebounced({ itemsLimit })}
+ />
+
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ onOptionsChangeDebounced({ percentValuesRange: { min } })}
+ />
+
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ onOptionsChangeDebounced({ percentValuesRange: { max } })}
+ />
+
+
+ );
+}
+
+AppearanceSettings.propTypes = EditorPropTypes;
diff --git a/viz-lib/src/visualizations/funnel/Editor/GeneralSettings.tsx b/viz-lib/src/visualizations/funnel/Editor/GeneralSettings.tsx
new file mode 100644
index 000000000..dda25fdf9
--- /dev/null
+++ b/viz-lib/src/visualizations/funnel/Editor/GeneralSettings.tsx
@@ -0,0 +1,133 @@
+import { map } from "lodash";
+import React, { useMemo } from "react";
+import { useDebouncedCallback } from "use-debounce";
+import { Section, Select, Input, Checkbox } from "@/components/visualizations/editor";
+import { EditorPropTypes } from "@/visualizations/prop-types";
+
+export default function GeneralSettings({ options, data, onOptionsChange }: any) {
+ const columnNames = useMemo(() => map(data.columns, c => c.name), [data]);
+
+ const [onOptionsChangeDebounced] = useDebouncedCallback(onOptionsChange, 200);
+
+ return (
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ onOptionsChange({ stepCol: { colName: colName || null } })}>
+ {map(columnNames, col => (
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message
+
+ {col}
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ ))}
+
+
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ onOptionsChange({ valueCol: { colName: colName || null } })}>
+ {map(columnNames, col => (
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message
+
+ {col}
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ ))}
+
+
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ onOptionsChange({ autoSort: !event.target.checked })}>
+ Custom Sorting
+
+
+
+ {!options.autoSort && (
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ onOptionsChange({ sortKeyCol: { colName: colName || null } })}>
+ {map(columnNames, col => (
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message
+
+ {col}
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ ))}
+
+
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ onOptionsChange({ sortKeyCol: { reverse: order === "desc" } })}>
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ ascending
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ descending
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+
+
+
+ )}
+
+ );
+}
+
+GeneralSettings.propTypes = EditorPropTypes;
diff --git a/viz-lib/src/visualizations/funnel/Editor/index.ts b/viz-lib/src/visualizations/funnel/Editor/index.ts
new file mode 100644
index 000000000..1b70003a5
--- /dev/null
+++ b/viz-lib/src/visualizations/funnel/Editor/index.ts
@@ -0,0 +1,9 @@
+import createTabbedEditor from "@/components/visualizations/editor/createTabbedEditor";
+
+import GeneralSettings from "./GeneralSettings";
+import AppearanceSettings from "./AppearanceSettings";
+
+export default createTabbedEditor([
+ { key: "General", title: "General", component: GeneralSettings },
+ { key: "Appearance", title: "Appearance", component: AppearanceSettings },
+]);
diff --git a/viz-lib/src/visualizations/funnel/Renderer/FunnelBar.tsx b/viz-lib/src/visualizations/funnel/Renderer/FunnelBar.tsx
new file mode 100644
index 000000000..9ac317dce
--- /dev/null
+++ b/viz-lib/src/visualizations/funnel/Renderer/FunnelBar.tsx
@@ -0,0 +1,31 @@
+import React from "react";
+import cx from "classnames";
+
+import "./funnel-bar.less";
+
+type OwnProps = {
+ color?: string;
+ value?: number;
+ align?: "left" | "center" | "right";
+ className?: string;
+ children?: React.ReactNode;
+};
+
+type Props = OwnProps & typeof FunnelBar.defaultProps;
+
+export default function FunnelBar({ color, value, align, className, children }: Props) {
+ return (
+
+ );
+}
+
+FunnelBar.defaultProps = {
+ color: "#dadada",
+ value: 0.0,
+ align: "left",
+ className: null,
+ children: null,
+};
diff --git a/viz-lib/src/visualizations/funnel/Renderer/funnel-bar.less b/viz-lib/src/visualizations/funnel/Renderer/funnel-bar.less
new file mode 100644
index 000000000..0de7e3d6d
--- /dev/null
+++ b/viz-lib/src/visualizations/funnel/Renderer/funnel-bar.less
@@ -0,0 +1,32 @@
+.funnel-bar {
+ @height: 30px;
+
+ position: relative;
+ height: @height;
+ line-height: @height;
+
+ &-left {
+ text-align: left;
+ }
+ &-center {
+ text-align: center;
+ }
+ &-right {
+ text-align: right;
+ }
+
+ .funnel-bar-value {
+ display: inline-block;
+ vertical-align: top;
+ height: @height;
+ }
+
+ .funnel-bar-label {
+ display: inline-block;
+ text-align: center;
+ vertical-align: middle;
+ position: absolute;
+ left: 0;
+ right: 0;
+ }
+}
diff --git a/viz-lib/src/visualizations/funnel/Renderer/index.less b/viz-lib/src/visualizations/funnel/Renderer/index.less
new file mode 100644
index 000000000..5c86a74b9
--- /dev/null
+++ b/viz-lib/src/visualizations/funnel/Renderer/index.less
@@ -0,0 +1,38 @@
+.funnel-visualization-container {
+ table {
+ min-width: 450px;
+ table-layout: fixed;
+
+ tbody tr td {
+ border: none;
+
+ &.text-ellipsis {
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ }
+ }
+ }
+ .step {
+ max-width: 0;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ }
+ .step .step-name {
+ visibility: hidden;
+ width: inherit;
+ padding: 3px 5px;
+ background-color: white;
+ border: 1px solid;
+ border-radius: 3px;
+ position: absolute;
+ z-index: 1;
+ white-space: initial;
+ word-wrap: break-word;
+ }
+
+ .step:hover .step-name {
+ visibility: visible;
+ }
+}
diff --git a/viz-lib/src/visualizations/funnel/Renderer/index.tsx b/viz-lib/src/visualizations/funnel/Renderer/index.tsx
new file mode 100644
index 000000000..9a56bdeb5
--- /dev/null
+++ b/viz-lib/src/visualizations/funnel/Renderer/index.tsx
@@ -0,0 +1,107 @@
+import { maxBy } from "lodash";
+import React, { useMemo } from "react";
+import Table from "antd/lib/table";
+import Tooltip from "antd/lib/tooltip";
+import { RendererPropTypes } from "@/visualizations/prop-types";
+import ColorPalette from "@/visualizations/ColorPalette";
+import { createNumberFormatter } from "@/lib/value-format";
+
+import prepareData from "./prepareData";
+import FunnelBar from "./FunnelBar";
+import "./index.less";
+
+function generateRowKeyPrefix() {
+ return Math.trunc(Math.random() * Number.MAX_SAFE_INTEGER).toString(36) + ":";
+}
+
+export default function Renderer({ data, options }: any) {
+ const funnelData = useMemo(() => prepareData(data.rows, options), [data, options]);
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ const rowKeyPrefix = useMemo(() => generateRowKeyPrefix(), [funnelData]);
+
+ const formatValue = useMemo(() => createNumberFormatter(options.numberFormat), [options.numberFormat]);
+
+ const formatPercentValue = useMemo(() => {
+ const format = createNumberFormatter(options.percentFormat);
+ return (value: any) => {
+ if (value < options.percentValuesRange.min) {
+ return `<${format(options.percentValuesRange.min)}`;
+ }
+ if (value > options.percentValuesRange.max) {
+ return `>${format(options.percentValuesRange.max)}`;
+ }
+ return format(value);
+ };
+ }, [options.percentFormat, options.percentValuesRange]);
+
+ const columns = useMemo(() => {
+ if (funnelData.length === 0) {
+ return [];
+ }
+
+ // @ts-expect-error ts-migrate(2532) FIXME: Object is possibly 'undefined'.
+ const maxToPrevious = maxBy(funnelData, d => (isFinite(d.pctPrevious) ? d.pctPrevious : 0)).pctPrevious;
+ return [
+ {
+ title: options.stepCol.displayAs,
+ dataIndex: "step",
+ width: "25%",
+ className: "text-ellipsis",
+ render: (text: any) => (
+
+ {text}
+
+ ),
+ },
+ {
+ title: options.valueCol.displayAs,
+ dataIndex: "value",
+ width: "45%",
+ align: "center",
+ render: (value: any, item: any) => (
+ // @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message
+
+ {formatValue(value)}
+
+ ),
+ },
+ {
+ title: "% Max",
+ dataIndex: "pctMax",
+ width: "15%",
+ align: "center",
+ render: (value: any) => formatPercentValue(value),
+ },
+ {
+ title: "% Previous",
+ dataIndex: "pctPrevious",
+ width: "15%",
+ align: "center",
+ render: (value: any) => (
+ // @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message
+
+ {formatPercentValue(value)}
+
+ ),
+ },
+ ];
+ }, [options.stepCol.displayAs, options.valueCol.displayAs, funnelData, formatValue, formatPercentValue]);
+
+ if (funnelData.length === 0) {
+ return null;
+ }
+
+ return (
+
+
rowKeyPrefix + index}
+ pagination={false}
+ />
+
+ );
+}
+
+Renderer.propTypes = RendererPropTypes;
diff --git a/viz-lib/src/visualizations/funnel/Renderer/prepareData.ts b/viz-lib/src/visualizations/funnel/Renderer/prepareData.ts
new file mode 100644
index 000000000..718d594fe
--- /dev/null
+++ b/viz-lib/src/visualizations/funnel/Renderer/prepareData.ts
@@ -0,0 +1,41 @@
+import { map, maxBy, sortBy, toString } from "lodash";
+import moment from "moment";
+import { visualizationsSettings } from "@/visualizations/visualizationsSettings";
+
+function stepValueToString(value: any) {
+ if (moment.isMoment(value)) {
+ const format = visualizationsSettings.dateTimeFormat || "DD/MM/YYYY HH:mm";
+ return value.format(format);
+ }
+ return toString(value);
+}
+
+export default function prepareData(rows: any, options: any) {
+ if (rows.length === 0 || !options.stepCol.colName || !options.valueCol.colName) {
+ return [];
+ }
+
+ rows = [...rows];
+ if (options.sortKeyCol.colName) {
+ rows = sortBy(rows, options.sortKeyCol.colName);
+ }
+ if (options.sortKeyCol.reverse) {
+ rows = rows.reverse();
+ }
+
+ const data = map(rows, row => ({
+ step: stepValueToString(row[options.stepCol.colName]),
+ value: parseFloat(row[options.valueCol.colName]) || 0.0,
+ }));
+
+ // @ts-expect-error ts-migrate(2532) FIXME: Object is possibly 'undefined'.
+ const maxVal = maxBy(data, d => d.value).value;
+ data.forEach((d, i) => {
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'pctMax' does not exist on type '{ step: ... Remove this comment to see the full error message
+ d.pctMax = (d.value / maxVal) * 100.0;
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'pctPrevious' does not exist on type '{ s... Remove this comment to see the full error message
+ d.pctPrevious = i === 0 || d.value === data[i - 1].value ? 100.0 : (d.value / data[i - 1].value) * 100.0;
+ });
+
+ return data.slice(0, options.itemsLimit);
+}
diff --git a/viz-lib/src/visualizations/funnel/getOptions.ts b/viz-lib/src/visualizations/funnel/getOptions.ts
new file mode 100644
index 000000000..4bfb19284
--- /dev/null
+++ b/viz-lib/src/visualizations/funnel/getOptions.ts
@@ -0,0 +1,42 @@
+import { isFinite, map, merge, includes } from "lodash";
+
+const DEFAULT_OPTIONS = {
+ stepCol: { colName: null, displayAs: "Steps" },
+ valueCol: { colName: null, displayAs: "Value" },
+ autoSort: true,
+ sortKeyCol: { colName: null, reverse: false },
+ itemsLimit: 100,
+ percentValuesRange: { min: 0.01, max: 1000.0 },
+ numberFormat: "0,0[.]00",
+ percentFormat: "0[.]00%",
+};
+
+export default function getOptions(options: any, { columns }: any) {
+ options = merge({}, DEFAULT_OPTIONS, options);
+
+ // Validate
+ const availableColumns = map(columns, c => c.name);
+ if (!includes(availableColumns, options.stepCol.colName)) {
+ options.stepCol.colName = null;
+ }
+ if (!includes(availableColumns, options.valueCol.colName)) {
+ options.valueCol.colName = null;
+ }
+ if (!includes(availableColumns, options.sortKeyCol.colName)) {
+ options.sortKeyCol.colName = null;
+ }
+
+ if (!isFinite(options.itemsLimit)) {
+ options.itemsLimit = DEFAULT_OPTIONS.itemsLimit;
+ }
+ if (options.itemsLimit < 2) {
+ options.itemsLimit = 2;
+ }
+
+ if (options.autoSort) {
+ options.sortKeyCol.colName = options.valueCol.colName;
+ options.sortKeyCol.reverse = true;
+ }
+
+ return options;
+}
diff --git a/viz-lib/src/visualizations/funnel/index.ts b/viz-lib/src/visualizations/funnel/index.ts
new file mode 100644
index 000000000..ccc5d69f4
--- /dev/null
+++ b/viz-lib/src/visualizations/funnel/index.ts
@@ -0,0 +1,13 @@
+import getOptions from "./getOptions";
+import Renderer from "./Renderer";
+import Editor from "./Editor";
+
+export default {
+ type: "FUNNEL",
+ name: "Funnel",
+ getOptions,
+ Renderer,
+ Editor,
+
+ defaultRows: 10,
+};
diff --git a/viz-lib/src/visualizations/index.ts b/viz-lib/src/visualizations/index.ts
new file mode 100644
index 000000000..b166d62be
--- /dev/null
+++ b/viz-lib/src/visualizations/index.ts
@@ -0,0 +1,4 @@
+import Renderer from "./Renderer";
+import Editor from "./Editor";
+
+export { Renderer, Editor };
diff --git a/viz-lib/src/visualizations/map/Editor/FormatSettings.tsx b/viz-lib/src/visualizations/map/Editor/FormatSettings.tsx
new file mode 100644
index 000000000..0e10ee7dd
--- /dev/null
+++ b/viz-lib/src/visualizations/map/Editor/FormatSettings.tsx
@@ -0,0 +1,74 @@
+import React from "react";
+import { useDebouncedCallback } from "use-debounce";
+import { Section, Input, Checkbox, TextArea, ContextHelp } from "@/components/visualizations/editor";
+import { EditorPropTypes } from "@/visualizations/prop-types";
+
+function TemplateFormatHint() {
+ // eslint-disable-line react/prop-types
+ return (
+ // @ts-expect-error ts-migrate(2746) FIXME: This JSX tag's 'children' prop expects a single ch... Remove this comment to see the full error message
+
+
+ All query result columns can be referenced using {"{{ column_name }}"}
syntax.
+
+ Leave this field empty to use default template.
+
+ );
+}
+
+export default function FormatSettings({ options, onOptionsChange }: any) {
+ const [onOptionsChangeDebounced] = useDebouncedCallback(onOptionsChange, 200);
+
+ const templateFormatHint = ;
+
+ return (
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ onOptionsChange({ tooltip: { enabled: event.target.checked } })}>
+ Show tooltip
+
+
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ onOptionsChange({ popup: { enabled: event.target.checked } })}>
+ Show popup
+
+
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+
+ );
+}
+
+FormatSettings.propTypes = EditorPropTypes;
diff --git a/viz-lib/src/visualizations/map/Editor/GeneralSettings.tsx b/viz-lib/src/visualizations/map/Editor/GeneralSettings.tsx
new file mode 100644
index 000000000..794560235
--- /dev/null
+++ b/viz-lib/src/visualizations/map/Editor/GeneralSettings.tsx
@@ -0,0 +1,78 @@
+import { isNil, map, filter, difference } from "lodash";
+import React, { useMemo } from "react";
+import { Section, Select } from "@/components/visualizations/editor";
+import { EditorPropTypes } from "@/visualizations/prop-types";
+
+function getColumns(column: any, unusedColumns: any) {
+ return filter([column, ...unusedColumns], v => !isNil(v));
+}
+
+export default function GeneralSettings({ options, data, onOptionsChange }: any) {
+ const unusedColumns = useMemo(
+ () =>
+ difference(
+ map(data.columns, c => c.name),
+ [options.latColName, options.lonColName, options.classify]
+ ),
+ [data, options.latColName, options.lonColName, options.classify]
+ );
+
+ return (
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ onOptionsChange({ latColName })}>
+ {map(getColumns(options.latColName, unusedColumns), col => (
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message
+
+ {col}
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ ))}
+
+
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ onOptionsChange({ lonColName })}>
+ {map(getColumns(options.lonColName, unusedColumns), col => (
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message
+
+ {col}
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ ))}
+
+
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ onOptionsChange({ classify: column || null })}>
+ {map(getColumns(options.classify, unusedColumns), col => (
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message
+
+ {col}
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ ))}
+
+
+
+ );
+}
+
+GeneralSettings.propTypes = EditorPropTypes;
diff --git a/viz-lib/src/visualizations/map/Editor/GroupsSettings.tsx b/viz-lib/src/visualizations/map/Editor/GroupsSettings.tsx
new file mode 100644
index 000000000..df2800df3
--- /dev/null
+++ b/viz-lib/src/visualizations/map/Editor/GroupsSettings.tsx
@@ -0,0 +1,70 @@
+import { map } from "lodash";
+import React, { useMemo, useCallback } from "react";
+import Table from "antd/lib/table";
+import ColorPicker from "@/components/ColorPicker";
+import { EditorPropTypes } from "@/visualizations/prop-types";
+import ColorPalette from "@/visualizations/ColorPalette";
+
+import prepareData from "../prepareData";
+
+export default function GroupsSettings({ options, data, onOptionsChange }: any) {
+ const groups = useMemo(
+ () => map(prepareData(data, options), ({ name }) => ({ name, color: (options.groups[name] || {}).color || null })),
+ [data, options]
+ );
+
+ const colors = useMemo(
+ () => ({
+ Automatic: null,
+ ...ColorPalette,
+ }),
+ []
+ );
+
+ const updateGroupOption = useCallback(
+ (name, prop, value) => {
+ onOptionsChange({
+ groups: {
+ [name]: {
+ [prop]: value,
+ },
+ },
+ });
+ },
+ [onOptionsChange]
+ );
+
+ const columns = [
+ {
+ title: "Group",
+ dataIndex: "name",
+ },
+ {
+ title: "Color",
+ dataIndex: "color",
+ width: "1%",
+ render: (unused: any, item: any) => (
+ void' is not assignable to t... Remove this comment to see the full error message
+ onChange={(value: any) => updateGroupOption(item.name, "color", value)}
+ // @ts-expect-error ts-migrate(2322) FIXME: Type 'Element' is not assignable to type 'never'.
+ addonAfter={ }
+ />
+ ),
+ },
+ ];
+
+ return ;
+}
+
+GroupsSettings.propTypes = EditorPropTypes;
diff --git a/viz-lib/src/visualizations/map/Editor/StyleSettings.tsx b/viz-lib/src/visualizations/map/Editor/StyleSettings.tsx
new file mode 100644
index 000000000..2fb2594f4
--- /dev/null
+++ b/viz-lib/src/visualizations/map/Editor/StyleSettings.tsx
@@ -0,0 +1,269 @@
+import { isNil, map } from "lodash";
+import React, { useMemo } from "react";
+import { useDebouncedCallback } from "use-debounce";
+import { Section, Select, Checkbox, Input, ColorPicker, ContextHelp } from "@/components/visualizations/editor";
+import { EditorPropTypes } from "@/visualizations/prop-types";
+import ColorPalette from "@/visualizations/ColorPalette";
+
+const mapTiles = [
+ {
+ name: "OpenStreetMap",
+ url: "//{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",
+ },
+ {
+ name: "OpenStreetMap BW",
+ url: "//{s}.tiles.wmflabs.org/bw-mapnik/{z}/{x}/{y}.png",
+ },
+ {
+ name: "OpenStreetMap DE",
+ url: "//{s}.tile.openstreetmap.de/tiles/osmde/{z}/{x}/{y}.png",
+ },
+ {
+ name: "OpenStreetMap FR",
+ url: "//{s}.tile.openstreetmap.fr/osmfr/{z}/{x}/{y}.png",
+ },
+ {
+ name: "OpenStreetMap Hot",
+ url: "//{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png",
+ },
+ {
+ name: "Thunderforest",
+ url: "//{s}.tile.thunderforest.com/cycle/{z}/{x}/{y}.png",
+ },
+ {
+ name: "Thunderforest Spinal",
+ url: "//{s}.tile.thunderforest.com/spinal-map/{z}/{x}/{y}.png",
+ },
+ {
+ name: "OpenMapSurfer",
+ url: "//korona.geog.uni-heidelberg.de/tiles/roads/x={x}&y={y}&z={z}",
+ },
+ {
+ name: "Stamen Toner",
+ url: "//stamen-tiles-{s}.a.ssl.fastly.net/toner/{z}/{x}/{y}.png",
+ },
+ {
+ name: "Stamen Toner Background",
+ url: "//stamen-tiles-{s}.a.ssl.fastly.net/toner-background/{z}/{x}/{y}.png",
+ },
+ {
+ name: "Stamen Toner Lite",
+ url: "//stamen-tiles-{s}.a.ssl.fastly.net/toner-lite/{z}/{x}/{y}.png",
+ },
+ {
+ name: "OpenTopoMap",
+ url: "//{s}.tile.opentopomap.org/{z}/{x}/{y}.png",
+ },
+];
+
+const CustomColorPalette = {
+ White: "#ffffff",
+ ...ColorPalette,
+};
+
+function getCustomIconOptionFields(iconShape: any) {
+ switch (iconShape) {
+ case "doughnut":
+ return { showIcon: false, showBackgroundColor: true, showBorderColor: true };
+ case "circle-dot":
+ case "rectangle-dot":
+ return { showIcon: false, showBackgroundColor: false, showBorderColor: true };
+ default:
+ return { showIcon: true, showBackgroundColor: true, showBorderColor: true };
+ }
+}
+
+export default function StyleSettings({ options, onOptionsChange }: any) {
+ const [debouncedOnOptionsChange] = useDebouncedCallback(onOptionsChange, 200);
+
+ const { showIcon, showBackgroundColor, showBorderColor } = useMemo(
+ () => getCustomIconOptionFields(options.iconShape),
+ [options.iconShape]
+ );
+
+ const isCustomMarkersStyleAllowed = isNil(options.classify);
+
+ return (
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ onOptionsChange({ mapTileUrl })}>
+ {map(mapTiles, ({ name, url }) => (
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message
+
+ {name}
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ ))}
+
+
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+ Markers
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ onOptionsChange({ clusterMarkers: event.target.checked })}>
+ Cluster Markers
+
+
+
+ {/* @ts-expect-error ts-migrate(2746) FIXME: This JSX tag's 'children' prop expects a single ch... Remove this comment to see the full error message */}
+
+ onOptionsChange({ customizeMarkers: event.target.checked })}>
+ Override default style
+
+ {!isCustomMarkersStyleAllowed && (
+ // @ts-expect-error ts-migrate(2746) FIXME: This JSX tag's 'children' prop expects a single ch... Remove this comment to see the full error message
+
+ Custom marker styles are not available
+
+ when Group By column selected.
+
+ )}
+
+
+ {isCustomMarkersStyleAllowed && options.customizeMarkers && (
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ onOptionsChange({ iconShape })}>
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ Marker + Icon
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ Circle
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ Circle Dot
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ Circle + Icon
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ Square Dot
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ Square + Icon
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+
+
+
+ {showIcon && (
+ // @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message
+
+ }
+ data-test="Map.Editor.MarkerIcon"
+ defaultValue={options.iconFont}
+ onChange={(event: any) => debouncedOnOptionsChange({ iconFont: event.target.value })}
+ />
+
+ )}
+
+ {showIcon && (
+ // @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message
+
+ onOptionsChange({ foregroundColor })}
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'Label' does not exist on type '({ classN... Remove this comment to see the full error message
+ addonAfter={ }
+ />
+
+ )}
+
+ {showBackgroundColor && (
+ // @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message
+
+ onOptionsChange({ backgroundColor })}
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'Label' does not exist on type '({ classN... Remove this comment to see the full error message
+ addonAfter={ }
+ />
+
+ )}
+
+ {showBorderColor && (
+ // @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message
+
+ onOptionsChange({ borderColor })}
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'Label' does not exist on type '({ classN... Remove this comment to see the full error message
+ addonAfter={ }
+ />
+
+ )}
+
+ )}
+
+ );
+}
+
+StyleSettings.propTypes = EditorPropTypes;
diff --git a/viz-lib/src/visualizations/map/Editor/index.ts b/viz-lib/src/visualizations/map/Editor/index.ts
new file mode 100644
index 000000000..5c61e2283
--- /dev/null
+++ b/viz-lib/src/visualizations/map/Editor/index.ts
@@ -0,0 +1,13 @@
+import createTabbedEditor from "@/components/visualizations/editor/createTabbedEditor";
+
+import GeneralSettings from "./GeneralSettings";
+import GroupsSettings from "./GroupsSettings";
+import FormatSettings from "./FormatSettings";
+import StyleSettings from "./StyleSettings";
+
+export default createTabbedEditor([
+ { key: "General", title: "General", component: GeneralSettings },
+ { key: "Groups", title: "Groups", component: GroupsSettings },
+ { key: "Format", title: "Format", component: FormatSettings },
+ { key: "Style", title: "Style", component: StyleSettings },
+]);
diff --git a/viz-lib/src/visualizations/map/Renderer.tsx b/viz-lib/src/visualizations/map/Renderer.tsx
new file mode 100644
index 000000000..3d7172a35
--- /dev/null
+++ b/viz-lib/src/visualizations/map/Renderer.tsx
@@ -0,0 +1,65 @@
+import { isEqual, omit, merge } from "lodash";
+import React, { useState, useEffect, useRef, useMemo } from "react";
+import { RendererPropTypes } from "@/visualizations/prop-types";
+
+import prepareData from "./prepareData";
+import initMap from "./initMap";
+
+function useMemoWithDeepCompare(create: any, inputs: any) {
+ const valueRef = useRef();
+ const value = useMemo(create, inputs);
+ if (!isEqual(value, valueRef.current)) {
+ // @ts-expect-error ts-migrate(2322) FIXME: Type 'unknown' is not assignable to type 'undefine... Remove this comment to see the full error message
+ valueRef.current = value;
+ }
+ return valueRef.current;
+}
+
+export default function Renderer({ data, options, onOptionsChange }: any) {
+ const [container, setContainer] = useState(null);
+
+ const optionsWithoutBounds = useMemoWithDeepCompare(() => omit(options, ["bounds"]), [options]);
+
+ const groups = useMemo(() => prepareData(data, optionsWithoutBounds), [data, optionsWithoutBounds]);
+
+ const [map, setMap] = useState(null);
+
+ useEffect(() => {
+ if (container) {
+ const _map = initMap(container);
+ // @ts-expect-error ts-migrate(2345) FIXME: Argument of type '{ onBoundsChange: () => void; up... Remove this comment to see the full error message
+ setMap(_map);
+ return () => {
+ _map.destroy();
+ };
+ }
+ }, [container]);
+
+ useEffect(() => {
+ if (map) {
+ // @ts-expect-error ts-migrate(2531) FIXME: Object is possibly 'null'.
+ map.updateLayers(groups, optionsWithoutBounds);
+ }
+ }, [map, groups, optionsWithoutBounds]);
+
+ useEffect(() => {
+ if (map) {
+ // @ts-expect-error ts-migrate(2531) FIXME: Object is possibly 'null'.
+ map.updateBounds(options.bounds);
+ }
+ }, [map, options.bounds]);
+
+ useEffect(() => {
+ if (map && onOptionsChange) {
+ // @ts-expect-error ts-migrate(2531) FIXME: Object is possibly 'null'.
+ map.onBoundsChange = (bounds: any) => {
+ onOptionsChange(merge({}, options, { bounds }));
+ };
+ }
+ }, [map, options, onOptionsChange]);
+
+ // @ts-expect-error ts-migrate(2322) FIXME: Type 'Dispatch>' is not assig... Remove this comment to see the full error message
+ return
;
+}
+
+Renderer.propTypes = RendererPropTypes;
diff --git a/viz-lib/src/visualizations/map/getOptions.ts b/viz-lib/src/visualizations/map/getOptions.ts
new file mode 100644
index 000000000..20a93324a
--- /dev/null
+++ b/viz-lib/src/visualizations/map/getOptions.ts
@@ -0,0 +1,62 @@
+import { merge } from "lodash";
+
+export type LeafletBaseIconType = "marker" | "rectangle" | "circle" | "rectangle-dot" | "circle-dot" | "doughnut";
+export interface MapOptionsType {
+ latColName: string;
+ lonColName: string;
+ classify: any;
+ groups: Record;
+ mapTileUrl: string;
+ clusterMarkers: boolean;
+ customizeMarkers: boolean;
+ iconShape: LeafletBaseIconType;
+ iconFont: LeafletBaseIconType;
+ foregroundColor: string;
+ backgroundColor: string;
+ borderColor: string;
+ bounds: any;
+ tooltip: {
+ enabled: boolean;
+ template: string;
+ };
+ popup: {
+ enabled: boolean;
+ template: string;
+ };
+}
+
+const DEFAULT_OPTIONS: MapOptionsType = {
+ latColName: "lat",
+ lonColName: "lon",
+ classify: null,
+ groups: {},
+ mapTileUrl: "//{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",
+ clusterMarkers: true,
+ customizeMarkers: false,
+ iconShape: "marker",
+ iconFont: "circle",
+ foregroundColor: "#ffffff",
+ backgroundColor: "#356AFF",
+ borderColor: "#356AFF",
+ bounds: null,
+ tooltip: {
+ enabled: false,
+ template: "",
+ },
+ popup: {
+ enabled: true,
+ template: "",
+ },
+};
+
+export default function getOptions(options: MapOptionsType) {
+ options = merge({}, DEFAULT_OPTIONS, options);
+ options.mapTileUrl = options.mapTileUrl || DEFAULT_OPTIONS.mapTileUrl;
+
+ // Backward compatibility
+ if (options.classify === "none") {
+ options.classify = null;
+ }
+
+ return options;
+}
diff --git a/viz-lib/src/visualizations/map/index.ts b/viz-lib/src/visualizations/map/index.ts
new file mode 100644
index 000000000..d122c561e
--- /dev/null
+++ b/viz-lib/src/visualizations/map/index.ts
@@ -0,0 +1,15 @@
+import getOptions from "./getOptions";
+import Renderer from "./Renderer";
+import Editor from "./Editor";
+
+export default {
+ type: "MAP",
+ name: "Map (Markers)",
+ getOptions,
+ Renderer,
+ Editor,
+
+ defaultColumns: 3,
+ defaultRows: 8,
+ minColumns: 2,
+};
diff --git a/viz-lib/src/visualizations/map/initMap.ts b/viz-lib/src/visualizations/map/initMap.ts
new file mode 100644
index 000000000..c845a68ac
--- /dev/null
+++ b/viz-lib/src/visualizations/map/initMap.ts
@@ -0,0 +1,241 @@
+import { isFunction, each, map, toString, clone } from "lodash";
+import chroma from "chroma-js";
+import L from "leaflet";
+import "leaflet.markercluster";
+import "leaflet/dist/leaflet.css";
+import "leaflet.markercluster/dist/MarkerCluster.css";
+import "leaflet.markercluster/dist/MarkerCluster.Default.css";
+import "beautifymarker";
+import "beautifymarker/leaflet-beautify-marker-icon.css";
+// @ts-expect-error ts-migrate(2307) FIXME: Cannot find module 'leaflet/dist/images/marker-ico... Remove this comment to see the full error message
+import markerIcon from "leaflet/dist/images/marker-icon.png";
+// @ts-expect-error ts-migrate(2307) FIXME: Cannot find module 'leaflet/dist/images/marker-ico... Remove this comment to see the full error message
+import markerIconRetina from "leaflet/dist/images/marker-icon-2x.png";
+// @ts-expect-error ts-migrate(2307) FIXME: Cannot find module 'leaflet/dist/images/marker-sha... Remove this comment to see the full error message
+import markerShadow from "leaflet/dist/images/marker-shadow.png";
+import "leaflet-fullscreen";
+import "leaflet-fullscreen/dist/leaflet.fullscreen.css";
+import { formatSimpleTemplate } from "@/lib/value-format";
+import sanitize from "@/services/sanitize";
+import resizeObserver from "@/services/resizeObserver";
+import chooseTextColorForBackground from "@/lib/chooseTextColorForBackground";
+
+// This is a workaround for an issue with giving Leaflet load the icon on its own.
+L.Icon.Default.mergeOptions({
+ iconUrl: markerIcon,
+ iconRetinaUrl: markerIconRetina,
+ shadowUrl: markerShadow,
+});
+
+// @ts-expect-error ts-migrate(2339) FIXME: Property '_getIconUrl' does not exist on type 'Def... Remove this comment to see the full error message
+delete L.Icon.Default.prototype._getIconUrl;
+
+const iconAnchors = {
+ marker: [14, 32],
+ circle: [10, 10],
+ rectangle: [11, 11],
+ "circle-dot": [1, 2],
+ "rectangle-dot": [1, 2],
+ doughnut: [8, 8],
+};
+
+const popupAnchors = {
+ rectangle: [0, -3],
+ circle: [1, -3],
+};
+
+const createHeatpointMarker = (lat: any, lon: any, color: any) =>
+ L.circleMarker([lat, lon], { fillColor: color, fillOpacity: 0.9, stroke: false });
+
+// @ts-expect-error ts-migrate(2339) FIXME: Property 'MarkerClusterIcon' does not exist on typ... Remove this comment to see the full error message
+L.MarkerClusterIcon = L.DivIcon.extend({
+ options: {
+ color: null,
+ className: "marker-cluster",
+ iconSize: new L.Point(40, 40),
+ },
+ // @ts-expect-error ts-migrate(7019) FIXME: Rest parameter 'args' implicitly has an 'any[]' ty... Remove this comment to see the full error message
+ createIcon(...args) {
+ const color = chroma(this.options.color);
+ const textColor = chooseTextColorForBackground(color);
+ const borderColor = color.alpha(0.4).css();
+ const backgroundColor = color.alpha(0.8).css();
+
+ const icon = L.DivIcon.prototype.createIcon.call(this, ...args);
+ icon.innerHTML = `
+
+ ${toString(this.options.html)}
+
+ `;
+ icon.style.background = borderColor;
+ return icon;
+ },
+});
+// @ts-expect-error ts-migrate(2339) FIXME: Property 'markerClusterIcon' does not exist on typ... Remove this comment to see the full error message
+L.markerClusterIcon = (...args) => new L.MarkerClusterIcon(...args);
+
+function createIconMarker(
+ lat: any,
+ lon: any,
+ { iconShape, iconFont, foregroundColor, backgroundColor, borderColor }: any
+) {
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'BeautifyIcon' does not exist on type 'ty... Remove this comment to see the full error message
+ const icon = L.BeautifyIcon.icon({
+ iconShape,
+ icon: iconFont,
+ iconSize: iconShape === "rectangle" ? [22, 22] : false,
+ // @ts-expect-error ts-migrate(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message
+ iconAnchor: iconAnchors[iconShape],
+ // @ts-expect-error ts-migrate(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message
+ popupAnchor: popupAnchors[iconShape],
+ prefix: "fa",
+ textColor: foregroundColor,
+ backgroundColor,
+ borderColor,
+ });
+
+ return L.marker([lat, lon], { icon });
+}
+
+function createMarkerClusterGroup(color: any) {
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'markerClusterGroup' does not exist on ty... Remove this comment to see the full error message
+ return L.markerClusterGroup({
+ iconCreateFunction(cluster: any) {
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'markerClusterIcon' does not exist on typ... Remove this comment to see the full error message
+ return L.markerClusterIcon({ color, html: cluster.getChildCount() });
+ },
+ });
+}
+
+function createMarkersLayer(options: any, { color, points }: any) {
+ const { classify, clusterMarkers, customizeMarkers } = options;
+
+ const result = clusterMarkers ? createMarkerClusterGroup(color) : L.featureGroup();
+
+ // create markers
+ each(points, ({ lat, lon, row }) => {
+ const rowCopy = clone(row);
+ rowCopy[options.latColName] = lat;
+ rowCopy[options.lonColName] = lon;
+
+ let marker;
+ if (classify) {
+ marker = createHeatpointMarker(lat, lon, color);
+ } else {
+ if (customizeMarkers) {
+ marker = createIconMarker(lat, lon, options);
+ } else {
+ marker = L.marker([lat, lon]);
+ }
+ }
+
+ if (options.tooltip.enabled) {
+ if (options.tooltip.template !== "") {
+ marker.bindTooltip(sanitize(formatSimpleTemplate(options.tooltip.template, rowCopy)));
+ } else {
+ marker.bindTooltip(`
+ ${lat}, ${lon}
+ `);
+ }
+ }
+
+ if (options.popup.enabled) {
+ if (options.popup.template !== "") {
+ marker.bindPopup(sanitize(formatSimpleTemplate(options.popup.template, rowCopy)));
+ } else {
+ marker.bindPopup(`
+
+ ${lat}, ${lon}
+ ${map(row, (v, k) => `${k}: ${v} `).join("")}
+
+ `);
+ }
+ }
+ result.addLayer(marker);
+ });
+
+ return result;
+}
+
+export default function initMap(container: any) {
+ const _map = L.map(container, {
+ center: [0.0, 0.0],
+ zoom: 1,
+ scrollWheelZoom: false,
+ // @ts-expect-error ts-migrate(2345) FIXME: Argument of type '{ center: [number, number]; zoom... Remove this comment to see the full error message
+ fullscreenControl: true,
+ });
+ const _tileLayer = L.tileLayer("//{s}.tile.openstreetmap.org/{z}/{x}/{y}.png", {
+ attribution: '© OpenStreetMap contributors',
+ }).addTo(_map);
+ const _markerLayers = L.featureGroup().addTo(_map);
+ const _layersControls = L.control.layers().addTo(_map);
+
+ let onBoundsChange = () => {};
+
+ let boundsChangedFromMap = false;
+ const onMapMoveEnd = () => {
+ // @ts-expect-error ts-migrate(2554) FIXME: Expected 0 arguments, but got 1.
+ onBoundsChange(_map.getBounds());
+ };
+ _map.on("focus", () => {
+ boundsChangedFromMap = true;
+ _map.on("moveend", onMapMoveEnd);
+ });
+ _map.on("blur", () => {
+ _map.off("moveend", onMapMoveEnd);
+ boundsChangedFromMap = false;
+ });
+
+ function updateLayers(groups: any, options: any) {
+ _tileLayer.setUrl(options.mapTileUrl);
+
+ _markerLayers.eachLayer(layer => {
+ _markerLayers.removeLayer(layer);
+ _layersControls.removeLayer(layer);
+ });
+
+ each(groups, group => {
+ const layer = createMarkersLayer(options, group);
+ _markerLayers.addLayer(layer);
+ _layersControls.addOverlay(layer, group.name);
+ });
+
+ // hide layers control if it is empty
+ if (groups.length > 0) {
+ _layersControls.addTo(_map);
+ } else {
+ _layersControls.remove();
+ }
+ }
+
+ function updateBounds(bounds: any) {
+ if (!boundsChangedFromMap) {
+ bounds = bounds
+ ? L.latLngBounds([bounds._southWest.lat, bounds._southWest.lng], [bounds._northEast.lat, bounds._northEast.lng])
+ : _markerLayers.getBounds();
+ if (bounds.isValid()) {
+ _map.fitBounds(bounds, { animate: false, duration: 0 });
+ }
+ }
+ }
+
+ const unwatchResize = resizeObserver(container, () => {
+ _map.invalidateSize(false);
+ });
+
+ return {
+ get onBoundsChange() {
+ return onBoundsChange;
+ },
+ set onBoundsChange(value) {
+ onBoundsChange = isFunction(value) ? value : () => {};
+ },
+ updateLayers,
+ updateBounds,
+ destroy() {
+ unwatchResize();
+ _map.remove();
+ },
+ };
+}
diff --git a/viz-lib/src/visualizations/map/prepareData.ts b/viz-lib/src/visualizations/map/prepareData.ts
new file mode 100644
index 000000000..50d797540
--- /dev/null
+++ b/viz-lib/src/visualizations/map/prepareData.ts
@@ -0,0 +1,36 @@
+import d3 from "d3";
+import { isNil, extend, map, filter, groupBy, omit } from "lodash";
+
+export default function prepareData(data: any, options: any) {
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'scale' does not exist on type 'typeof im... Remove this comment to see the full error message
+ const colorScale = d3.scale.category10();
+
+ const { classify, latColName, lonColName } = options;
+
+ const pointGroups = classify ? groupBy(data.rows, classify) : { All: data.rows };
+
+ return filter(
+ map(pointGroups, (rows, name) => {
+ const points = filter(
+ map(rows, row => {
+ const lat = row[latColName];
+ const lon = row[lonColName];
+ if (isNil(lat) || isNil(lon)) {
+ return null;
+ }
+ return { lat, lon, row: omit(row, [latColName, lonColName]) };
+ })
+ );
+ if (points.length === 0) {
+ return null;
+ }
+
+ const result = extend({}, options.groups[name], { name, points });
+ if (isNil(result.color)) {
+ result.color = colorScale(name);
+ }
+
+ return result;
+ })
+ );
+}
diff --git a/viz-lib/src/visualizations/pivot/Editor.tsx b/viz-lib/src/visualizations/pivot/Editor.tsx
new file mode 100644
index 000000000..7c4d3b4a2
--- /dev/null
+++ b/viz-lib/src/visualizations/pivot/Editor.tsx
@@ -0,0 +1,58 @@
+import { merge } from "lodash";
+import React from "react";
+import { Section, Switch } from "@/components/visualizations/editor";
+import { EditorPropTypes } from "@/visualizations/prop-types";
+
+export default function Editor({ options, onOptionsChange }: any) {
+ const updateOptions = (updates: any) => {
+ onOptionsChange(merge({}, options, updates));
+ };
+
+ return (
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+ void' is not assignable to... Remove this comment to see the full error message
+ onChange={(enabled: any) => updateOptions({ controls: { enabled: !enabled } })}>
+ Show Pivot Controls
+
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+ void' is not assignable ... Remove this comment to see the full error message
+ onChange={(rowTotals: any) => updateOptions({ rendererOptions: { table: { rowTotals } } })}>
+ Show Row Totals
+
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+ void' is not assignable ... Remove this comment to see the full error message
+ onChange={(colTotals: any) => updateOptions({ rendererOptions: { table: { colTotals } } })}>
+ Show Column Totals
+
+
+
+ );
+}
+
+Editor.propTypes = EditorPropTypes;
diff --git a/viz-lib/src/visualizations/pivot/Renderer.tsx b/viz-lib/src/visualizations/pivot/Renderer.tsx
new file mode 100644
index 000000000..ea3f2ac54
--- /dev/null
+++ b/viz-lib/src/visualizations/pivot/Renderer.tsx
@@ -0,0 +1,66 @@
+import React, { useState, useEffect, useMemo } from "react";
+import { get, find, pick, map, mapValues } from "lodash";
+// @ts-expect-error ts-migrate(7016) FIXME: Could not find a declaration file for module 'reac... Remove this comment to see the full error message
+import PivotTableUI from "react-pivottable/PivotTableUI";
+import { RendererPropTypes } from "@/visualizations/prop-types";
+import { formatColumnValue } from "@/lib/utils";
+
+import "react-pivottable/pivottable.css";
+import "./renderer.less";
+
+const VALID_OPTIONS = [
+ "rows",
+ "cols",
+ "vals",
+ "aggregatorName",
+ "valueFilter",
+ "sorters",
+ "rowOrder",
+ "colOrder",
+ "derivedAttributes",
+ "rendererName",
+ "hiddenAttributes",
+ "hiddenFromAggregators",
+ "hiddenFromDragDrop",
+ "menuLimit",
+ "unusedOrientationCutoff",
+ "controls",
+ "rendererOptions",
+];
+
+function formatRows({ rows, columns }: any) {
+ return map(rows, row => mapValues(row, (value, key) => formatColumnValue(value, find(columns, { name: key }).type)));
+}
+
+export default function Renderer({ data, options, onOptionsChange }: any) {
+ const [config, setConfig] = useState({ ...options });
+ const dataRows = useMemo(() => formatRows(data), [data]);
+
+ useEffect(() => {
+ setConfig({ ...options });
+ }, [options]);
+
+ const onChange = (updatedOptions: any) => {
+ const validOptions = pick(updatedOptions, VALID_OPTIONS);
+ setConfig({ ...validOptions });
+ onOptionsChange(validOptions);
+ };
+
+ // Legacy behavior: hideControls when controls.enabled is true
+ const hideControls = get(options, "controls.enabled");
+ const hideRowTotals = !get(options, "rendererOptions.table.rowTotals");
+ const hideColumnTotals = !get(options, "rendererOptions.table.colTotals");
+ return (
+
+ );
+}
+
+Renderer.propTypes = RendererPropTypes;
+Renderer.defaultProps = { onOptionsChange: () => {} };
diff --git a/viz-lib/src/visualizations/pivot/index.ts b/viz-lib/src/visualizations/pivot/index.ts
new file mode 100644
index 000000000..afba7151f
--- /dev/null
+++ b/viz-lib/src/visualizations/pivot/index.ts
@@ -0,0 +1,28 @@
+import { merge } from "lodash";
+
+import Renderer from "./Renderer";
+import Editor from "./Editor";
+
+const DEFAULT_OPTIONS = {
+ controls: {
+ enabled: false, // `false` means "show controls" o_O
+ },
+ rendererOptions: {
+ table: {
+ colTotals: true,
+ rowTotals: true,
+ },
+ },
+};
+
+export default {
+ type: "PIVOT",
+ name: "Pivot Table",
+ getOptions: (options: any) => merge({}, DEFAULT_OPTIONS, options),
+ Renderer,
+ Editor,
+
+ defaultRows: 10,
+ defaultColumns: 3,
+ minColumns: 2,
+};
diff --git a/viz-lib/src/visualizations/pivot/renderer.less b/viz-lib/src/visualizations/pivot/renderer.less
new file mode 100644
index 000000000..1cd47f4b7
--- /dev/null
+++ b/viz-lib/src/visualizations/pivot/renderer.less
@@ -0,0 +1,97 @@
+@import "../variables.less";
+
+.pivot-table-visualization-container {
+ &[data-hide-controls] {
+ .pvtAxisContainer,
+ .pvtRenderers,
+ .pvtVals {
+ display: none;
+ }
+ }
+
+ &[data-hide-row-totals] {
+ td:last-child,
+ th:last-child {
+ &.pvtTotalLabel:not(:empty),
+ &.pvtTotal,
+ &.pvtGrandTotal {
+ display: none;
+ }
+ }
+ }
+
+ &[data-hide-column-totals] {
+ tbody > tr:last-child {
+ & > .pvtTotalLabel,
+ & > .pvtTotal,
+ & > .pvtGrandTotal {
+ display: none;
+ }
+ }
+ }
+}
+
+.pvtAxisContainer,
+.pvtVals {
+ border: 1px solid fade(@visualizations-gray, 15%);
+ background: #fff;
+}
+
+.pvtAxisContainer li span.pvtAttr {
+ background: fade(@visualizations-gray, 10%);
+ border: 1px solid fade(@visualizations-gray, 15%);
+ border-radius: 3px;
+}
+
+.pvtCheckContainer {
+ border-top: 1px solid fade(@visualizations-gray, 15%);
+ border-bottom: 1px solid fade(@visualizations-gray, 15%);
+}
+
+.pvtCheckContainer p {
+ margin: 2px;
+ line-height: 1;
+}
+
+.pvtTriangle {
+ color: fade(@visualizations-gray, 90%);
+}
+
+table.pvtTable thead tr th,
+table.pvtTable tbody tr th {
+ background-color: fade(@visualizations-gray, 10%);
+ border: 1px solid #ced8dc;
+}
+
+table.pvtTable tbody tr td {
+ border: 1px solid #ced8dc;
+}
+
+.pvtFilterBox {
+ border: 1px solid fade(@visualizations-gray, 15%);
+ border-radius: 3px;
+ box-shadow: fade(@visualizations-gray, 15%) 0px 4px 9px -3px;
+
+ button {
+ background-color: rgba(102, 136, 153, 0.15);
+ margin-right: 5px;
+ border: 1px solid transparent;
+ padding: 3px 6px;
+ font-size: 13px;
+ line-height: 1.42857143;
+ border-radius: 3px;
+
+ &:hover {
+ background-color: rgba(102, 136, 153, 0.25);
+ }
+ }
+
+ input[type="text"] {
+ width: 90%;
+ margin: 0 auto 10px;
+ height: 35px;
+ padding: 6px 12px;
+ border: 1px solid #e8e8e8;
+ border-radius: 3px;
+ }
+}
diff --git a/viz-lib/src/visualizations/prop-types.ts b/viz-lib/src/visualizations/prop-types.ts
new file mode 100644
index 000000000..edf7bceac
--- /dev/null
+++ b/viz-lib/src/visualizations/prop-types.ts
@@ -0,0 +1,46 @@
+import PropTypes from "prop-types";
+
+const VisualizationOptions = PropTypes.object;
+type VisualizationOptions = any;
+
+type Data = {
+ columns: any[];
+ rows: any[];
+}; // eslint-disable-line react/forbid-prop-types
+
+const Data: PropTypes.Requireable = PropTypes.shape({
+ columns: PropTypes.arrayOf(PropTypes.object).isRequired,
+ rows: PropTypes.arrayOf(PropTypes.object).isRequired,
+});
+
+type VisualizationType = {
+ id?: number;
+ type: string;
+ name: string;
+ options: VisualizationOptions;
+};
+
+// @ts-expect-error ts-migrate(2322) FIXME: Type 'Requireable = PropTypes.shape({
+ id: PropTypes.number,
+ type: PropTypes.string.isRequired,
+ name: PropTypes.string.isRequired,
+ options: VisualizationOptions.isRequired,
+});
+export { VisualizationType };
+
+// For each visualization's renderer
+export const RendererPropTypes = {
+ visualizationName: PropTypes.string,
+ data: Data.isRequired,
+ options: VisualizationOptions.isRequired,
+ onOptionsChange: PropTypes.func, // (newOptions) => void
+};
+
+// For each visualization's editor
+export const EditorPropTypes = {
+ visualizationName: PropTypes.string,
+ data: Data.isRequired,
+ options: VisualizationOptions.isRequired,
+ onOptionsChange: PropTypes.func.isRequired, // (newOptions) => void
+};
diff --git a/viz-lib/src/visualizations/registeredVisualizations.ts b/viz-lib/src/visualizations/registeredVisualizations.ts
new file mode 100644
index 000000000..2e6fb7df7
--- /dev/null
+++ b/viz-lib/src/visualizations/registeredVisualizations.ts
@@ -0,0 +1,119 @@
+import { find, flatten, each } from "lodash";
+import PropTypes from "prop-types";
+
+import boxPlotVisualization from "./box-plot";
+import chartVisualization from "./chart";
+import choroplethVisualization from "./choropleth";
+import cohortVisualization from "./cohort";
+import counterVisualization from "./counter";
+import detailsVisualization from "./details";
+import funnelVisualization from "./funnel";
+import mapVisualization from "./map";
+import pivotVisualization from "./pivot";
+import sankeyVisualization from "./sankey";
+import sunburstVisualization from "./sunburst";
+import tableVisualization from "./table";
+import wordCloudVisualization from "./word-cloud";
+
+type VisualizationConfig = {
+ type: string;
+ name: string;
+ getOptions: (...args: any[]) => any;
+ isDefault?: boolean;
+ isDeprecated?: boolean;
+ Renderer: (...args: any[]) => any;
+ Editor?: (...args: any[]) => any;
+ autoHeight?: boolean;
+ defaultRows?: number;
+ defaultColumns?: number;
+ minRows?: number;
+ maxRows?: number;
+ minColumns?: number;
+ maxColumns?: number;
+};
+
+// @ts-expect-error ts-migrate(2322) FIXME: Type 'Requireable = PropTypes.shape({
+ type: PropTypes.string.isRequired,
+ name: PropTypes.string.isRequired,
+ getOptions: PropTypes.func.isRequired,
+ isDefault: PropTypes.bool,
+ isDeprecated: PropTypes.bool,
+ Renderer: PropTypes.func.isRequired,
+ Editor: PropTypes.func,
+ // other config options
+ autoHeight: PropTypes.bool,
+ defaultRows: PropTypes.number,
+ defaultColumns: PropTypes.number,
+ minRows: PropTypes.number,
+ maxRows: PropTypes.number,
+ minColumns: PropTypes.number,
+ maxColumns: PropTypes.number,
+});
+
+const registeredVisualizations = {};
+
+function validateVisualizationConfig(config: any) {
+ const typeSpecs = { config: VisualizationConfig };
+ const values = { config };
+ PropTypes.checkPropTypes(typeSpecs, values, "prop", "registerVisualization");
+}
+
+function registerVisualization(config: any) {
+ validateVisualizationConfig(config);
+ config = {
+ Editor: () => null,
+ ...config,
+ isDefault: config.isDefault && !config.isDeprecated,
+ };
+
+ // @ts-expect-error ts-migrate(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message
+ if (registeredVisualizations[config.type]) {
+ throw new Error(`Visualization ${config.type} already registered.`);
+ }
+
+ // @ts-expect-error ts-migrate(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message
+ registeredVisualizations[config.type] = config;
+}
+
+each(
+ flatten([
+ boxPlotVisualization,
+ chartVisualization,
+ choroplethVisualization,
+ cohortVisualization,
+ counterVisualization,
+ detailsVisualization,
+ funnelVisualization,
+ mapVisualization,
+ pivotVisualization,
+ sankeyVisualization,
+ sunburstVisualization,
+ tableVisualization,
+ wordCloudVisualization,
+ ]),
+ registerVisualization
+);
+
+export default registeredVisualizations;
+
+export function getDefaultVisualization() {
+ // return any visualization explicitly marked as default, or any non-deprecated otherwise
+ return (
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'isDefault' does not exist on type 'never... Remove this comment to see the full error message
+ find(registeredVisualizations, visualization => visualization.isDefault) ||
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'isDeprecated' does not exist on type 'ne... Remove this comment to see the full error message
+ find(registeredVisualizations, visualization => !visualization.isDeprecated)
+ );
+}
+
+export function newVisualization(type = null, options = {}) {
+ // @ts-expect-error ts-migrate(2538) FIXME: Type 'null' cannot be used as an index type.
+ const visualization = type ? registeredVisualizations[type] : getDefaultVisualization();
+ return {
+ type: visualization.type,
+ name: visualization.name,
+ description: "",
+ options,
+ };
+}
diff --git a/viz-lib/src/visualizations/sankey/Editor.tsx b/viz-lib/src/visualizations/sankey/Editor.tsx
new file mode 100644
index 000000000..23b219296
--- /dev/null
+++ b/viz-lib/src/visualizations/sankey/Editor.tsx
@@ -0,0 +1,29 @@
+import React from "react";
+
+export default function Editor() {
+ return (
+
+ This visualization expects the query result to have rows in the following format:
+
+
+ stage1 - stage 1 value
+
+
+ stage2 - stage 2 value (or null)
+
+
+ stage3 - stage 3 value (or null)
+
+
+ stage4 - stage 4 value (or null)
+
+
+ stage5 - stage 5 value (or null)
+
+
+ value - number of times this sequence occurred
+
+
+
+ );
+}
diff --git a/viz-lib/src/visualizations/sankey/Renderer.tsx b/viz-lib/src/visualizations/sankey/Renderer.tsx
new file mode 100644
index 000000000..235fec159
--- /dev/null
+++ b/viz-lib/src/visualizations/sankey/Renderer.tsx
@@ -0,0 +1,27 @@
+import React, { useState, useEffect, useMemo } from "react";
+import resizeObserver from "@/services/resizeObserver";
+import { RendererPropTypes } from "@/visualizations/prop-types";
+
+import { SankeyDataType } from "./index";
+import initSankey, { ExtendedSankeyDataType } from "./initSankey";
+import "./renderer.less";
+
+export default function Renderer({ data }: { data: SankeyDataType }) {
+ const [container, setContainer] = useState(null);
+
+ const render = useMemo(() => initSankey(data as ExtendedSankeyDataType), [data]);
+
+ useEffect(() => {
+ if (container) {
+ render(container);
+ const unwatch = resizeObserver(container, () => {
+ render(container);
+ });
+ return unwatch;
+ }
+ }, [container, render]);
+
+ return
;
+}
+
+Renderer.propTypes = RendererPropTypes;
diff --git a/viz-lib/src/visualizations/sankey/d3sankey.ts b/viz-lib/src/visualizations/sankey/d3sankey.ts
new file mode 100644
index 000000000..d3d544d90
--- /dev/null
+++ b/viz-lib/src/visualizations/sankey/d3sankey.ts
@@ -0,0 +1,339 @@
+/* eslint-disable */
+
+import d3 from "d3";
+
+export interface LinkType {
+ id: number;
+ name: string;
+ color: string;
+ x: number;
+ y: number;
+ dx: number;
+ dy: number;
+ source: SourceTargetType;
+ target: SourceTargetType;
+}
+
+export type SourceTargetType = {
+ sourceLinks: Array;
+ targetLinks: Array;
+};
+
+export type NodeType = LinkType & SourceTargetType;
+export interface D3SankeyType {
+ nodeWidth: (...args: any[]) => any;
+ nodeHeight: (...args: any[]) => any;
+ nodePadding: (...args: any[]) => any;
+ nodes: (...args: any[]) => any[];
+ link: (...args: any[]) => any;
+ links: (...args: any[]) => any[];
+ size: (...args: any[]) => any;
+ layout: (...args: any[]) => any;
+ relayout: (...args: any[]) => any;
+}
+
+export type DType = { sy: number; ty: number; value: number; source: LinkType; target: LinkType } & LinkType;
+
+function center(node: any) {
+ return node.y + node.dy / 2;
+}
+
+function value(link: any) {
+ return link.value;
+}
+
+function Sankey(): D3SankeyType {
+ const sankey = {};
+ let nodeWidth = 24;
+ let nodePadding = 8;
+ let size = [1, 1];
+ let nodes: any[] = [];
+ let links: any[] = [];
+
+ // Populate the sourceLinks and targetLinks for each node.
+ // Also, if the source and target are not objects, assume they are indices.
+ function computeNodeLinks() {
+ nodes.forEach(node => {
+ node.sourceLinks = [];
+ node.targetLinks = [];
+ });
+ links.forEach(link => {
+ let source = link.source;
+ let target = link.target;
+ if (typeof source === "number") source = link.source = nodes[link.source];
+ if (typeof target === "number") target = link.target = nodes[link.target];
+ source.sourceLinks.push(link);
+ target.targetLinks.push(link);
+ });
+ }
+
+ // Compute the value (size) of each node by summing the associated links.
+ function computeNodeValues() {
+ nodes.forEach(node => {
+ node.value = Math.max(d3.sum(node.sourceLinks, value), d3.sum(node.targetLinks, value));
+ });
+ }
+
+ function moveSinksRight(x: any) {
+ nodes.forEach(node => {
+ if (!node.sourceLinks.length) {
+ node.x = x - 1;
+ }
+ });
+ }
+
+ function scaleNodeBreadths(kx: any) {
+ nodes.forEach(node => {
+ node.x *= kx;
+ });
+ }
+
+ // Iteratively assign the breadth (x-position) for each node.
+ // Nodes are assigned the maximum breadth of incoming neighbors plus one;
+ // nodes with no incoming links are assigned breadth zero, while
+ // nodes with no outgoing links are assigned the maximum breadth.
+ function computeNodeBreadths() {
+ let remainingNodes = nodes;
+ let nextNodes: any;
+ let x = 0;
+
+ function assignBreadth(node: any) {
+ node.x = x;
+ node.dx = nodeWidth;
+ node.sourceLinks.forEach((link: any) => {
+ if (nextNodes.indexOf(link.target) < 0) {
+ nextNodes.push(link.target);
+ }
+ });
+ }
+
+ while (remainingNodes.length) {
+ nextNodes = [];
+ remainingNodes.forEach(assignBreadth);
+ remainingNodes = nextNodes;
+ x += 1;
+ }
+
+ moveSinksRight(x);
+ x = Math.max(
+ d3.max(nodes, n => n.x),
+ 2
+ ); // get new maximum x value (min 2)
+ scaleNodeBreadths((size[0] - nodeWidth) / (x - 1));
+ }
+
+ function computeNodeDepths(iterations: any) {
+ const nodesByBreadth = d3
+ // @ts-expect-error
+ .nest()
+ .key((d: any) => d.x)
+ .sortKeys(d3.ascending)
+ .entries(nodes)
+ .map((d: any) => d.values);
+
+ function initializeNodeDepth() {
+ // @ts-expect-error ts-migrate(2571) FIXME: Object is of type 'unknown'.
+ const ky = d3.min(nodesByBreadth, n => (size[1] - (n.length - 1) * nodePadding) / d3.sum(n, value));
+
+ nodesByBreadth.forEach((n: any) => {
+ n.forEach((node: any, i: any) => {
+ node.y = i;
+ // @ts-expect-error ts-migrate(2532) FIXME: Object is possibly 'undefined'.
+ node.dy = node.value * ky;
+ });
+ });
+
+ links.forEach(link => {
+ // @ts-expect-error ts-migrate(2532) FIXME: Object is possibly 'undefined'.
+ link.dy = link.value * ky;
+ });
+ }
+
+ function relaxLeftToRight(alpha: any) {
+ function weightedSource(link: any) {
+ return center(link.source) * link.value;
+ }
+
+ nodesByBreadth.forEach((n: any) => {
+ n.forEach((node: any) => {
+ if (node.targetLinks.length) {
+ const y = d3.sum(node.targetLinks, weightedSource) / d3.sum(node.targetLinks, value);
+ node.y += (y - center(node)) * alpha;
+ }
+ });
+ });
+ }
+
+ function resolveCollisions() {
+ nodesByBreadth.forEach((nodes: any) => {
+ const n = nodes.length;
+ let node;
+ let dy;
+ let y0 = 0;
+ let i;
+
+ // Push any overlapping nodes down.
+ nodes.sort(ascendingDepth);
+ for (i = 0; i < n; ++i) {
+ node = nodes[i];
+ dy = y0 - node.y;
+ if (dy > 0) node.y += dy;
+ y0 = node.y + node.dy + nodePadding;
+ }
+
+ // If the bottommost node goes outside the bounds, push it back up.
+ dy = y0 - nodePadding - size[1];
+ if (dy > 0) {
+ y0 = node.y -= dy;
+
+ // Push any overlapping nodes back up.
+ for (i = n - 2; i >= 0; --i) {
+ node = nodes[i];
+ dy = node.y + node.dy + nodePadding - y0;
+ if (dy > 0) node.y -= dy;
+ y0 = node.y;
+ }
+ }
+ });
+ }
+
+ initializeNodeDepth();
+ resolveCollisions();
+
+ for (let alpha = 1; iterations > 0; iterations -= 1) {
+ relaxRightToLeft((alpha *= 0.99));
+ resolveCollisions();
+ relaxLeftToRight(alpha);
+ resolveCollisions();
+ }
+
+ function relaxRightToLeft(alpha: any) {
+ nodesByBreadth
+ .slice()
+ .reverse()
+ .forEach((nodes: any) => {
+ nodes.forEach((node: any) => {
+ if (node.sourceLinks.length) {
+ const y = d3.sum(node.sourceLinks, weightedTarget) / d3.sum(node.sourceLinks, value);
+ node.y += (y - center(node)) * alpha;
+ }
+ });
+ });
+
+ function weightedTarget(link: any) {
+ return center(link.target) * link.value;
+ }
+ }
+
+ function ascendingDepth(a: any, b: any) {
+ return a.y - b.y;
+ }
+ }
+
+ function computeLinkDepths() {
+ nodes.forEach(node => {
+ node.sourceLinks.sort(ascendingTargetDepth);
+ node.targetLinks.sort(ascendingSourceDepth);
+ });
+ nodes.forEach(node => {
+ let sy = 0,
+ ty = 0;
+ node.sourceLinks.forEach((link: any) => {
+ link.sy = sy;
+ sy += link.dy;
+ });
+ node.targetLinks.forEach((link: any) => {
+ link.ty = ty;
+ ty += link.dy;
+ });
+ });
+
+ function ascendingSourceDepth(a: any, b: any) {
+ return a.source.y - b.source.y;
+ }
+
+ function ascendingTargetDepth(a: any, b: any) {
+ return a.target.y - b.target.y;
+ }
+ }
+
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'nodeWidth' does not exist on type '{}'.
+ sankey.nodeWidth = function(_: any) {
+ if (!arguments.length) return nodeWidth;
+ nodeWidth = +_;
+ return sankey;
+ };
+
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'nodePadding' does not exist on type '{}'... Remove this comment to see the full error message
+ sankey.nodePadding = function(_: any) {
+ if (!arguments.length) return nodePadding;
+ nodePadding = +_;
+ return sankey;
+ };
+
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'nodes' does not exist on type '{}'.
+ sankey.nodes = function(_: any) {
+ if (!arguments.length) return nodes;
+ nodes = _;
+ return sankey;
+ };
+
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'links' does not exist on type '{}'.
+ sankey.links = function(_: any) {
+ if (!arguments.length) return links;
+ links = _;
+ return sankey;
+ };
+
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'size' does not exist on type '{}'.
+ sankey.size = function(_: any) {
+ if (!arguments.length) return size;
+ size = _;
+ return sankey;
+ };
+
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'layout' does not exist on type '{}'.
+ sankey.layout = function(iterations: any) {
+ computeNodeLinks();
+ computeNodeValues();
+ computeNodeBreadths();
+ computeNodeDepths(iterations);
+ computeLinkDepths();
+ return sankey;
+ };
+
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'relayout' does not exist on type '{}'.
+ sankey.relayout = function() {
+ computeLinkDepths();
+ return sankey;
+ };
+
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'link' does not exist on type '{}'.
+ sankey.link = function() {
+ let curvature = 0.5;
+
+ function link(d: DType) {
+ const x0 = d.source.x + d.source.dx;
+ const x1 = d.target.x;
+ const xi = d3.interpolateNumber(x0, x1);
+ const x2 = xi(curvature);
+ const x3 = xi(1 - curvature);
+ const y0 = d.source.y + d.sy + d.dy / 2;
+ const y1 = d.target.y + d.ty + d.dy / 2;
+
+ return `M${x0},${y0}C${x2},${y0} ${x3},${y1} ${x1},${y1}`;
+ }
+
+ link.curvature = (_: any) => {
+ if (!arguments.length) return curvature;
+ curvature = +_;
+ return link;
+ };
+
+ return link;
+ };
+
+ return sankey as D3SankeyType;
+}
+
+export default Sankey;
diff --git a/viz-lib/src/visualizations/sankey/index.ts b/viz-lib/src/visualizations/sankey/index.ts
new file mode 100644
index 000000000..965861d87
--- /dev/null
+++ b/viz-lib/src/visualizations/sankey/index.ts
@@ -0,0 +1,26 @@
+import Renderer from "./Renderer";
+import Editor from "./Editor";
+export interface SankeyDataType {
+ columns: {
+ name: string;
+ friendly_name: string;
+ type: "integer";
+ }[];
+
+ rows: {
+ value: number;
+ [name: string]: number | string | null;
+ }[];
+}
+
+export default {
+ type: "SANKEY",
+ name: "Sankey",
+ getOptions: (options: {}) => ({
+ ...options,
+ }),
+ Renderer,
+ Editor,
+
+ defaultRows: 7,
+};
diff --git a/viz-lib/src/visualizations/sankey/initSankey.ts b/viz-lib/src/visualizations/sankey/initSankey.ts
new file mode 100644
index 000000000..b0d47b880
--- /dev/null
+++ b/viz-lib/src/visualizations/sankey/initSankey.ts
@@ -0,0 +1,303 @@
+import {
+ isNil,
+ map,
+ extend,
+ sortBy,
+ includes,
+ filter,
+ reduce,
+ find,
+ keys,
+ values,
+ identity,
+ mapValues,
+ every,
+ isNaN,
+ isNumber,
+ isString,
+} from "lodash";
+import d3 from "d3";
+import d3sankey, { NodeType, LinkType, SourceTargetType, DType } from "./d3sankey";
+import { SankeyDataType } from ".";
+
+export type ExtendedSankeyDataType = Partial & { nodes: any[]; links: any[] };
+
+function getConnectedNodes(node: NodeType) {
+ console.log(node);
+ // source link = this node is the source, I need the targets
+ const nodes: any = [];
+ node.sourceLinks.forEach((link: LinkType) => {
+ nodes.push(link.target);
+ });
+ node.targetLinks.forEach((link: LinkType) => {
+ nodes.push(link.source);
+ });
+
+ return nodes;
+}
+
+function graph(data: ExtendedSankeyDataType["rows"]) {
+ const nodesDict = {};
+ const links = {};
+ const nodes: any[] = [];
+
+ const validKey = (key: any) => key !== "value";
+ // @ts-expect-error
+ const dataKeys = sortBy(filter(keys(data[0]), validKey), identity);
+
+ function normalizeName(name: any) {
+ if (!isNil(name)) {
+ return "" + name;
+ }
+
+ return "Exit";
+ }
+
+ function getNode(name: string, level: any) {
+ name = normalizeName(name);
+ const key = `${name}:${String(level)}`;
+ // @ts-expect-error ts-migrate(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message
+ let node = nodesDict[key];
+ if (!node) {
+ node = { name };
+ node.id = nodes.push(node) - 1;
+ // @ts-expect-error ts-migrate(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message
+ nodesDict[key] = node;
+ }
+ return node;
+ }
+
+ function getLink(source: SourceTargetType, target: SourceTargetType) {
+ // @ts-expect-error ts-migrate(2538) FIXME: Type 'any[]' cannot be used as an index type.
+ let link = links[[source, target]];
+ if (!link) {
+ link = { target, source, value: 0 };
+ // @ts-expect-error ts-migrate(2538) FIXME: Type 'any[]' cannot be used as an index type.
+ links[[source, target]] = link;
+ }
+
+ return link;
+ }
+
+ function addLink(sourceName: any, targetName: any, value: any, depth: any) {
+ if ((sourceName === "" || !sourceName) && depth > 1) {
+ return;
+ }
+
+ const source = getNode(sourceName, depth);
+ const target = getNode(targetName, depth + 1);
+ const link = getLink(source.id, target.id);
+ link.value += parseInt(value, 10);
+ }
+
+ // @ts-expect-error
+ data.forEach((row: any) => {
+ addLink(row[dataKeys[0]], row[dataKeys[1]], row.value || 0, 1);
+ addLink(row[dataKeys[1]], row[dataKeys[2]], row.value || 0, 2);
+ addLink(row[dataKeys[2]], row[dataKeys[3]], row.value || 0, 3);
+ addLink(row[dataKeys[3]], row[dataKeys[4]], row.value || 0, 4);
+ addLink(row[dataKeys[4]], null, row.value || 0, 5); // this line ensures that the last stage has a corresponding exit node
+ });
+
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'scale' does not exist on type 'typeof im... Remove this comment to see the full error message
+ const color = d3.scale.category20();
+
+ return {
+ nodes: map(nodes, d => extend(d, { color: color(d.name.replace(/ .*/, "")) })),
+ links: values(links),
+ };
+}
+
+function spreadNodes(height: any, data: ExtendedSankeyDataType) {
+ const nodesByBreadth = d3
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'nest' does not exist on type 'typeof imp... Remove this comment to see the full error message
+ .nest()
+ .key((d: DType) => d.x)
+ .entries(data.nodes)
+ // @ts-expect-error
+ .map((d: DType) => d.values);
+
+ nodesByBreadth.forEach((nodes: any) => {
+ nodes = filter(
+ sortBy(nodes, node => -node.value),
+ node => node.name !== "Exit"
+ );
+
+ // @ts-expect-error ts-migrate(2571) FIXME: Object is of type 'unknown'.
+ const sum = d3.sum(nodes, o => o.dy);
+ const padding = (height - sum) / nodes.length;
+
+ reduce(
+ nodes,
+ (y0, node) => {
+ node.y = y0;
+ return y0 + node.dy + padding;
+ },
+ 0
+ );
+ });
+}
+
+function isDataValid(data: ExtendedSankeyDataType) {
+ // data should contain column named 'value', otherwise no reason to render anything at all
+ if (!data || !find(data.columns, c => c.name === "value")) {
+ return false;
+ }
+ // prepareData will have coerced any invalid data rows into NaN, which is verified below
+ return every(data.rows, row =>
+ every(row, v => {
+ if (!v || isString(v)) {
+ return true;
+ }
+ return isFinite(v);
+ })
+ );
+}
+
+// will coerce number strings into valid numbers
+function prepareDataRows(rows: ExtendedSankeyDataType["rows"]) {
+ return map(rows, row =>
+ mapValues(row, v => {
+ if (!v || isNumber(v)) {
+ return v;
+ }
+ return isNaN(parseFloat(v)) ? v : parseFloat(v);
+ })
+ );
+}
+
+export default function initSankey(data: ExtendedSankeyDataType) {
+ data.rows = prepareDataRows(data.rows) as ExtendedSankeyDataType["rows"];
+
+ if (!isDataValid(data)) {
+ return (element: HTMLDivElement) => {
+ d3.select(element)
+ .selectAll("*")
+ .remove();
+ };
+ }
+
+ data = graph(data.rows);
+ // @ts-expect-error
+ const format = (d: DType) => d3.format(",.0f")(d); // TODO: editor option ?
+
+ return (element: HTMLDivElement) => {
+ d3.select(element)
+ .selectAll("*")
+ .remove();
+
+ const margin = {
+ top: 10,
+ right: 10,
+ bottom: 10,
+ left: 10,
+ };
+ const width = element.offsetWidth - margin.left - margin.right;
+ const height = element.offsetHeight - margin.top - margin.bottom;
+
+ if (width <= 0 || height <= 0) {
+ return;
+ }
+
+ // append the svg canvas to the page
+ const svg: d3.Selection = d3
+ .select(element)
+ .append("svg")
+ .attr("class", "sankey")
+ .attr("width", width + margin.left + margin.right)
+ .attr("height", height + margin.top + margin.bottom)
+ .append("g")
+ .attr("transform", `translate(${margin.left},${margin.top})`);
+
+ // Set the sankey diagram properties
+ const sankey = d3sankey()
+ .nodeWidth(15)
+ .nodePadding(10)
+ .size([width, height]);
+
+ const path = sankey.link();
+
+ sankey
+ .nodes(data.nodes)
+ .links(data.links)
+ .layout(0);
+
+ spreadNodes(height, data);
+ sankey.relayout();
+
+ // add in the links
+ const link = svg
+ .append("g")
+ .selectAll(".link")
+ .data(data.links)
+ .enter()
+ .append("path")
+ .filter(l => l.target.name !== "Exit")
+ .attr("class", "link")
+ .attr("d", path)
+ .style("stroke-width", d => Math.max(1, d.dy))
+ .sort((a, b) => b.dy - a.dy);
+
+ // add the link titles
+ link.append("title").text(d => `${d.source.name} → ${d.target.name}\n${format(d.value)}`);
+
+ const node = svg
+ .append("g")
+ .selectAll(".node")
+ .data(data.nodes)
+ .enter()
+ .append("g")
+ .filter(n => n.name !== "Exit")
+ .attr("class", "node")
+ .attr("transform", (d: DType) => `translate(${d.x},${d.y})`);
+
+ function nodeMouseOver(currentNode: NodeType) {
+ let nodes = getConnectedNodes(currentNode);
+ nodes = map(nodes, i => i.id);
+ node
+ .filter(d => {
+ if (d === currentNode) {
+ return false;
+ }
+ return !includes(nodes, d.id);
+ })
+ .style("opacity", 0.2);
+ link
+ .filter(l => !(includes(currentNode.sourceLinks, l) || includes(currentNode.targetLinks, l)))
+ .style("opacity", 0.2);
+ }
+
+ function nodeMouseOut() {
+ node.style("opacity", 1);
+ link.style("opacity", 1);
+ }
+
+ // add in the nodes
+ node.on("mouseover", nodeMouseOver).on("mouseout", nodeMouseOut);
+
+ // add the rectangles for the nodes
+ // FIXME: d is DType, but d3 will not accept a nonstandard function
+ node
+ .append("rect")
+ .attr("height", (d: any) => d.dy)
+ .attr("width", sankey.nodeWidth())
+ .style("fill", (d: any) => d.color)
+ // @ts-expect-error
+ .style("stroke", (d: any) => d3.rgb(d.color).darker(2))
+ .append("title")
+ .text((d: any) => `${d.name}\n${format(d.value)}`);
+
+ // add in the title for the nodes
+ node
+ .append("text")
+ .attr("x", -6)
+ .attr("y", (d: any) => d.dy / 2)
+ .attr("dy", ".35em")
+ .attr("text-anchor", "end")
+ .attr("transform", null)
+ .text((d: any) => d.name)
+ .filter((d: any) => d.x < width / 2)
+ .attr("x", 6 + sankey.nodeWidth())
+ .attr("text-anchor", "start");
+ };
+}
diff --git a/viz-lib/src/visualizations/sankey/renderer.less b/viz-lib/src/visualizations/sankey/renderer.less
new file mode 100644
index 000000000..ea11ad1b2
--- /dev/null
+++ b/viz-lib/src/visualizations/sankey/renderer.less
@@ -0,0 +1,19 @@
+/* Sankey Visualization */
+.sankey .node rect {
+ fill-opacity: .9;
+ shape-rendering: crispEdges;
+ stroke-width: 0;
+}
+.sankey .node text {
+ text-shadow: 0 1px 0 #fff;
+}
+.sankey .link {
+ fill: none;
+ stroke: #000;
+ stroke-opacity: .2;
+}
+
+.sankey-visualization-container {
+ height: 500px;
+ overflow: hidden;
+}
diff --git a/viz-lib/src/visualizations/sunburst/Editor.tsx b/viz-lib/src/visualizations/sunburst/Editor.tsx
new file mode 100644
index 000000000..1babae09e
--- /dev/null
+++ b/viz-lib/src/visualizations/sunburst/Editor.tsx
@@ -0,0 +1,56 @@
+import React from "react";
+import { Section } from "@/components/visualizations/editor";
+
+export default function Editor() {
+ return (
+
+ This visualization expects the query result to have rows in one of the following formats:
+ {/* @ts-expect-error ts-migrate(2746) FIXME: This JSX tag's 'children' prop expects a single ch... Remove this comment to see the full error message */}
+
+
+ Option 1:
+
+
+
+ sequence - sequence id
+
+
+ stage - what stage in sequence this is (1, 2, ...)
+
+
+ node - stage name
+
+
+ value - number of times this sequence occurred
+
+
+
+ {/* @ts-expect-error ts-migrate(2746) FIXME: This JSX tag's 'children' prop expects a single ch... Remove this comment to see the full error message */}
+
+
+ Option 2:
+
+
+
+ stage1 - stage 1 value
+
+
+ stage2 - stage 2 value (or null)
+
+
+ stage3 - stage 3 value (or null)
+
+
+ stage4 - stage 4 value (or null)
+
+
+ stage5 - stage 5 value (or null)
+
+
+ value - number of times this sequence occurred
+
+
+
+
+ );
+}
diff --git a/viz-lib/src/visualizations/sunburst/Renderer.tsx b/viz-lib/src/visualizations/sunburst/Renderer.tsx
new file mode 100644
index 000000000..bbb260b23
--- /dev/null
+++ b/viz-lib/src/visualizations/sunburst/Renderer.tsx
@@ -0,0 +1,27 @@
+import React, { useState, useEffect, useMemo } from "react";
+import resizeObserver from "@/services/resizeObserver";
+import { RendererPropTypes } from "@/visualizations/prop-types";
+
+import initSunburst from "./initSunburst";
+import "./renderer.less";
+
+export default function Renderer({ data }: any) {
+ const [container, setContainer] = useState(null);
+
+ const render = useMemo(() => initSunburst(data), [data]);
+
+ useEffect(() => {
+ if (container) {
+ render(container);
+ const unwatch = resizeObserver(container, () => {
+ render(container);
+ });
+ return unwatch;
+ }
+ }, [container, render]);
+
+ // @ts-expect-error ts-migrate(2322) FIXME: Type 'Dispatch>' is not assig... Remove this comment to see the full error message
+ return
;
+}
+
+Renderer.propTypes = RendererPropTypes;
diff --git a/viz-lib/src/visualizations/sunburst/index.ts b/viz-lib/src/visualizations/sunburst/index.ts
new file mode 100644
index 000000000..a6a86141a
--- /dev/null
+++ b/viz-lib/src/visualizations/sunburst/index.ts
@@ -0,0 +1,14 @@
+import Renderer from "./Renderer";
+import Editor from "./Editor";
+
+export default {
+ type: "SUNBURST_SEQUENCE",
+ name: "Sunburst Sequence",
+ getOptions: (options: any) => ({
+ ...options,
+ }),
+ Renderer,
+ Editor,
+
+ defaultRows: 7,
+};
diff --git a/viz-lib/src/visualizations/sunburst/initSunburst.ts b/viz-lib/src/visualizations/sunburst/initSunburst.ts
new file mode 100644
index 000000000..b44c59de0
--- /dev/null
+++ b/viz-lib/src/visualizations/sunburst/initSunburst.ts
@@ -0,0 +1,377 @@
+/**
+ * The following is based on @chrisrzhou's example from: http://bl.ocks.org/chrisrzhou/d5bdd8546f64ca0e4366.
+ */
+
+import * as d3 from "d3";
+import { has, map, keys, groupBy, sortBy, filter, find, compact, first, every, identity } from "lodash";
+
+const exitNode = "<<>>";
+// @ts-expect-error ts-migrate(2339) FIXME: Property 'scale' does not exist on type 'typeof im... Remove this comment to see the full error message
+const colors = d3.scale.category10();
+
+// helper function colorMap - color gray if "end" is detected
+function colorMap(d: any) {
+ return colors(d.name);
+}
+
+// Return array of ancestors of nodes, highest first, but excluding the root.
+function getAncestors(node: any) {
+ const path = [];
+ let current = node;
+
+ while (current.parent) {
+ path.unshift(current);
+ current = current.parent;
+ }
+ return path;
+}
+
+function buildNodesFromHierarchyData(data: any) {
+ const grouped = groupBy(data, "sequence");
+
+ return map(grouped, value => {
+ const sorted = sortBy(value, "stage");
+ return {
+ size: value[0].value || 0,
+ sequence: value[0].sequence,
+ nodes: map(sorted, i => i.node),
+ };
+ });
+}
+
+function buildNodesFromTableData(data: any) {
+ const validKey = (key: any) => key !== "value";
+ const dataKeys = sortBy(filter(keys(data[0]), validKey), identity);
+
+ return map(data, (row, sequence) => ({
+ size: row.value || 0,
+ sequence,
+ nodes: compact(map(dataKeys, key => row[key])),
+ }));
+}
+
+function isDataInHierarchyFormat(data: any) {
+ const firstRow = first(data);
+ return every(["sequence", "stage", "node", "value"], field => has(firstRow, field));
+}
+
+function buildHierarchy(data: any) {
+ data = isDataInHierarchyFormat(data) ? buildNodesFromHierarchyData(data) : buildNodesFromTableData(data);
+
+ // build tree
+ const root = {
+ name: "root",
+ children: [],
+ };
+
+ data.forEach((d: any) => {
+ const nodes = d.nodes;
+ const size = parseInt(d.size, 10);
+
+ // build graph, nodes, and child nodes
+ let currentNode = root;
+ for (let j = 0; j < nodes.length; j += 1) {
+ let children = currentNode.children;
+ const nodeName = nodes[j];
+ const isLeaf = j + 1 === nodes.length;
+
+ if (!children) {
+ currentNode.children = children = [];
+ children.push({
+ // @ts-expect-error ts-migrate(2322) FIXME: Type 'string' is not assignable to type 'never'.
+ name: exitNode,
+ // @ts-expect-error ts-migrate(2322) FIXME: Type 'any' is not assignable to type 'never'.
+ size: currentNode.size,
+ });
+ }
+
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'name' does not exist on type 'never'.
+ let childNode = find(children, child => child.name === nodeName);
+
+ if (isLeaf && childNode) {
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'children' does not exist on type 'never'... Remove this comment to see the full error message
+ childNode.children = childNode.children || [];
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'children' does not exist on type 'never'... Remove this comment to see the full error message
+ childNode.children.push({
+ name: exitNode,
+ size,
+ });
+ } else if (isLeaf) {
+ children.push({
+ // @ts-expect-error ts-migrate(2322) FIXME: Type 'any' is not assignable to type 'never'.
+ name: nodeName,
+ // @ts-expect-error ts-migrate(2322) FIXME: Type 'number' is not assignable to type 'never'.
+ size,
+ });
+ } else {
+ if (!childNode) {
+ // @ts-expect-error ts-migrate(2322) FIXME: Type '{ name: any; children: never[]; }' is not as... Remove this comment to see the full error message
+ childNode = {
+ name: nodeName,
+ children: [],
+ };
+ // @ts-expect-error ts-migrate(2345) FIXME: Argument of type 'undefined' is not assignable to ... Remove this comment to see the full error message
+ children.push(childNode);
+ }
+
+ // @ts-expect-error ts-migrate(2322) FIXME: Type 'undefined' is not assignable to type '{ name... Remove this comment to see the full error message
+ currentNode = childNode;
+ }
+ }
+ });
+
+ return root;
+}
+
+function isDataValid(data: any) {
+ return data && data.rows.length > 0;
+}
+
+export default function initSunburst(data: any) {
+ if (!isDataValid(data)) {
+ return (element: any) => {
+ d3.select(element)
+ .selectAll("*")
+ .remove();
+ };
+ }
+
+ data = buildHierarchy(data.rows);
+
+ return (element: any) => {
+ d3.select(element)
+ .selectAll("*")
+ .remove();
+
+ // svg dimensions
+ const width = element.clientWidth;
+ const height = element.offsetHeight;
+
+ // Breadcrumb dimensions: width, height, spacing, width of tip/tail.
+ const b = {
+ w: width / 6,
+ h: 30,
+ s: 3,
+ t: 10,
+ };
+
+ const radius = Math.min(width - b.h, height - b.h) / 2 - 5;
+ if (radius <= 0) {
+ return;
+ }
+
+ // margins
+ const margin = {
+ top: radius,
+ bottom: 50,
+ left: radius,
+ right: 0,
+ };
+
+ // Drawing variables: e.g. colors, totalSize, partitions, arcs
+
+ // Total size of all nodes, to be used later when data is loaded
+ let totalSize = 0;
+
+ // create d3.layout.partition
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'layout' does not exist on type 'typeof i... Remove this comment to see the full error message
+ const partition = d3.layout
+ .partition()
+ .size([2 * Math.PI, radius * radius])
+ .value((d: any) => d.size);
+
+ // create arcs for drawing D3 paths
+ const arc = d3.svg
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'arc' does not exist on type '(url: strin... Remove this comment to see the full error message
+ .arc()
+ .startAngle((d: any) => d.x)
+ .endAngle((d: any) => d.x + d.dx)
+ .innerRadius((d: any) => Math.sqrt(d.y))
+ .outerRadius((d: any) => Math.sqrt(d.y + d.dy));
+
+ /**
+ * Define and initialize D3 select references and div-containers
+ *
+ * e.g. vis, breadcrumbs, lastCrumb, summary, sunburst, legend
+ */
+ const vis = d3.select(element);
+
+ // create and position breadcrumbs container and svg
+ const breadcrumbs = vis
+ .append("div")
+ .classed("breadcrumbs-container", true)
+ .append("svg")
+ .attr("width", width)
+ .attr("height", b.h)
+ .attr("fill", "white")
+ .attr("font-weight", 600);
+
+ // create and position SVG
+ const container = vis.append("div");
+
+ // create and position summary container
+ const summary = container.append("div").classed("summary-container", true);
+
+ const sunburst = container
+ .append("div")
+ .classed("sunburst-container", true)
+ .append("svg")
+ .attr("width", radius * 2)
+ .attr("height", radius * 2)
+ .append("g")
+ .attr("transform", `translate(${margin.left},${margin.top})`);
+
+ // create last breadcrumb element
+ const lastCrumb = breadcrumbs.append("text").classed("lastCrumb", true);
+
+ // Generate a string representation for drawing a breadcrumb polygon.
+ function breadcrumbPoints(d: any, i: any) {
+ const points = [];
+ points.push("0,0");
+ points.push(`${b.w},0`);
+ points.push(`${b.w + b.t},${b.h / 2}`);
+ points.push(`${b.w},${b.h}`);
+ points.push(`0,${b.h}`);
+
+ if (i > 0) {
+ // Leftmost breadcrumb; don't include 6th vertex.
+ points.push(`${b.t},${b.h / 2}`);
+ }
+ return points.join(" ");
+ }
+
+ // Update the breadcrumb breadcrumbs to show the current sequence and percentage.
+ function updateBreadcrumbs(ancestors: any, percentageString: any) {
+ // Data join, where primary key = name + depth.
+ // @ts-expect-error ts-migrate(2571) FIXME: Object is of type 'unknown'.
+ const g = breadcrumbs.selectAll("g").data(ancestors, d => d.name + d.depth);
+
+ // Add breadcrumb and label for entering nodes.
+ const breadcrumb = g.enter().append("g");
+
+ breadcrumb
+ .append("polygon")
+ .classed("breadcrumbs-shape", true)
+ .attr("points", breadcrumbPoints)
+ .attr("fill", colorMap);
+
+ breadcrumb
+ .append("text")
+ .classed("breadcrumbs-text", true)
+ .attr("x", (b.w + b.t) / 2)
+ .attr("y", b.h / 2)
+ .attr("dy", "0.35em")
+ .attr("font-size", "10px")
+ .attr("text-anchor", "middle")
+ // @ts-expect-error ts-migrate(2571) FIXME: Object is of type 'unknown'.
+ .text(d => d.name);
+
+ // Set position for entering and updating nodes.
+ g.attr("transform", (d, i) => `translate(${i * (b.w + b.s)}, 0)`);
+
+ // Remove exiting nodes.
+ g.exit().remove();
+
+ // Update percentage at the lastCrumb.
+ lastCrumb
+ .attr("x", (ancestors.length + 0.5) * (b.w + b.s))
+ .attr("y", b.h / 2)
+ .attr("dy", "0.35em")
+ .attr("text-anchor", "middle")
+ .attr("fill", "black")
+ .attr("font-weight", 600)
+ .text(percentageString);
+ }
+
+ // helper function mouseover to handle mouseover events/animations and calculation
+ // of ancestor nodes etc
+ function mouseover(d: any) {
+ // build percentage string
+ const percentage = ((100 * d.value) / totalSize).toPrecision(3);
+ let percentageString = `${percentage}%`;
+ // @ts-expect-error ts-migrate(2365) FIXME: Operator '<' cannot be applied to types 'string' a... Remove this comment to see the full error message
+ if (percentage < 1) {
+ percentageString = "< 1.0%";
+ }
+
+ // update breadcrumbs (get all ancestors)
+ const ancestors = getAncestors(d);
+ updateBreadcrumbs(ancestors, percentageString);
+
+ // update sunburst (Fade all the segments and highlight only ancestors of current segment)
+ sunburst.selectAll("path").attr("opacity", 0.3);
+ sunburst
+ .selectAll("path")
+ .filter(node => ancestors.indexOf(node) >= 0)
+ .attr("opacity", 1);
+
+ // update summary
+ summary.html(`
+ Stage: ${d.depth}
+ ${percentageString}
+ ${d.value} of ${totalSize}
+ `);
+
+ // display summary and breadcrumbs if hidden
+ summary.style("visibility", "");
+ breadcrumbs.style("visibility", "");
+ }
+
+ // helper function click to handle mouseleave events/animations
+ function click() {
+ // Deactivate all segments then retransition each segment to full opacity.
+ sunburst.selectAll("path").on("mouseover", null);
+ sunburst
+ .selectAll("path")
+ .transition()
+ .duration(1000)
+ .attr("opacity", 1)
+ // @ts-expect-error ts-migrate(2554) FIXME: Expected 1 arguments, but got 2.
+ .each("end", function endClick() {
+ // @ts-expect-error ts-migrate(2683) FIXME: 'this' implicitly has type 'any' because it does n... Remove this comment to see the full error message
+ d3.select(this).on("mouseover", mouseover);
+ });
+
+ // hide summary and breadcrumbs if visible
+ breadcrumbs.style("visibility", "hidden");
+ summary.style("visibility", "hidden");
+ }
+
+ // Build only nodes of a threshold "visible" sizes to improve efficiency
+ // 0.005 radians = 0.29 degrees
+ const nodes = partition.nodes(data).filter((d: any) => d.dx > 0.005 && d.name !== exitNode);
+
+ // this section is required to update the colors.domain() every time the data updates
+ const uniqueNames = (function uniqueNames(a) {
+ const output: any = [];
+ a.forEach((d: any) => {
+ if (output.indexOf(d.name) === -1) output.push(d.name);
+ });
+ return output;
+ })(nodes);
+ colors.domain(uniqueNames); // update domain colors
+
+ // create path based on nodes
+ const path = sunburst
+ .data([data])
+ .selectAll("path")
+ .data(nodes)
+ .enter()
+ .append("path")
+ .classed("nodePath", true)
+ // @ts-expect-error ts-migrate(2571) FIXME: Object is of type 'unknown'.
+ .attr("display", d => (d.depth ? null : "none"))
+ .attr("d", arc)
+ .attr("fill", colorMap)
+ .attr("opacity", 1)
+ .attr("stroke", "white")
+ .on("mouseover", mouseover);
+
+ // // trigger mouse click over sunburst to reset visualization summary
+ vis.on("click", click);
+
+ // Update totalSize of the tree = value of root node from partition.
+ // @ts-expect-error ts-migrate(2531) FIXME: Object is possibly 'null'.
+ totalSize = path.node().__data__.value;
+ };
+}
diff --git a/viz-lib/src/visualizations/sunburst/renderer.less b/viz-lib/src/visualizations/sunburst/renderer.less
new file mode 100644
index 000000000..91ffa85f9
--- /dev/null
+++ b/viz-lib/src/visualizations/sunburst/renderer.less
@@ -0,0 +1,36 @@
+.sunburst-visualization-container {
+ height: 400px;
+ display: flex;
+ flex-direction: column;
+
+ > div {
+ position: relative;
+
+ &:first-child {
+ flex-grow: 0;
+ }
+ &:last-child {
+ flex-grow: 1;
+ }
+ }
+
+ .sunburst-container,
+ .summary-container {
+ position: absolute;
+ left: 0;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ width: auto;
+ height: auto;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ }
+
+ .summary-container {
+ font-size: 11px;
+ color: #666;
+ }
+}
diff --git a/viz-lib/src/visualizations/table/Editor/ColumnEditor.tsx b/viz-lib/src/visualizations/table/Editor/ColumnEditor.tsx
new file mode 100644
index 000000000..af56802c0
--- /dev/null
+++ b/viz-lib/src/visualizations/table/Editor/ColumnEditor.tsx
@@ -0,0 +1,100 @@
+import { map, keys } from "lodash";
+import React from "react";
+import { useDebouncedCallback } from "use-debounce";
+import * as Grid from "antd/lib/grid";
+import { Section, Select, Input, Checkbox, TextAlignmentSelect } from "@/components/visualizations/editor";
+
+import ColumnTypes from "../columns";
+
+type OwnProps = {
+ column: {
+ name: string;
+ title?: string;
+ visible?: boolean;
+ alignContent?: "left" | "center" | "right";
+ displayAs?: any; // TODO: PropTypes.oneOf(keys(ColumnTypes))
+ };
+ onChange?: (...args: any[]) => any;
+};
+
+type Props = OwnProps & typeof ColumnEditor.defaultProps;
+
+export default function ColumnEditor({ column, onChange }: Props) {
+ function handleChange(changes: any) {
+ onChange({ ...column, ...changes });
+ }
+
+ const [handleChangeDebounced] = useDebouncedCallback(handleChange, 200);
+
+ // @ts-expect-error ts-migrate(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message
+ const AdditionalOptions = ColumnTypes[column.displayAs].Editor || null;
+
+ return (
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ handleChange({ allowSearch: event.target.checked })}>
+ Use for search
+
+
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ handleChange({ displayAs })}>
+ {map(ColumnTypes, ({ friendlyName }, key) => (
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message
+
+ {friendlyName}
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ ))}
+
+
+
+ {AdditionalOptions &&
}
+
+ );
+}
+
+ColumnEditor.defaultProps = {
+ onChange: () => {},
+};
diff --git a/viz-lib/src/visualizations/table/Editor/ColumnsSettings.test.tsx b/viz-lib/src/visualizations/table/Editor/ColumnsSettings.test.tsx
new file mode 100644
index 000000000..741f8a1c4
--- /dev/null
+++ b/viz-lib/src/visualizations/table/Editor/ColumnsSettings.test.tsx
@@ -0,0 +1,87 @@
+import React from "react";
+import enzyme from "enzyme";
+
+import getOptions from "../getOptions";
+import ColumnsSettings from "./ColumnsSettings";
+
+function findByTestID(wrapper: any, testId: any) {
+ return wrapper.find(`[data-test="${testId}"]`);
+}
+
+function mount(options: any, done: any) {
+ const data = {
+ columns: [{ name: "a", type: "string" }],
+ rows: [{ a: "test" }],
+ };
+ options = getOptions(options, data);
+ return enzyme.mount(
+ {
+ expect(changedOptions).toMatchSnapshot();
+ done();
+ }}
+ />
+ );
+}
+
+describe("Visualizations -> Table -> Editor -> Columns Settings", () => {
+ test("Toggles column visibility", done => {
+ const el = mount({}, done);
+
+ findByTestID(el, "Table.Column.a.Visibility")
+ .last()
+ .simulate("click");
+ });
+
+ test("Changes column title", done => {
+ const el = mount({}, done);
+ findByTestID(el, "Table.Column.a.Name")
+ .last()
+ .simulate("click"); // expand settings
+
+ findByTestID(el, "Table.Column.a.Title")
+ .last()
+ .simulate("change", { target: { value: "test" } });
+ });
+
+ test("Changes column alignment", done => {
+ const el = mount({}, done);
+ findByTestID(el, "Table.Column.a.Name")
+ .last()
+ .simulate("click"); // expand settings
+
+ findByTestID(el, "Table.Column.a.TextAlignment")
+ .last()
+ .find('[data-test="TextAlignmentSelect.Right"] input')
+ .simulate("change", { target: { checked: true } });
+ });
+
+ test("Enables search by column data", done => {
+ const el = mount({}, done);
+ findByTestID(el, "Table.Column.a.Name")
+ .last()
+ .simulate("click"); // expand settings
+
+ findByTestID(el, "Table.Column.a.UseForSearch")
+ .last()
+ .find("input")
+ .simulate("change", { target: { checked: true } });
+ });
+
+ test("Changes column display type", done => {
+ const el = mount({}, done);
+ findByTestID(el, "Table.Column.a.Name")
+ .last()
+ .simulate("click"); // expand settings
+
+ findByTestID(el, "Table.Column.a.DisplayAs")
+ .last()
+ .simulate("mouseDown");
+ findByTestID(el, "Table.Column.a.DisplayAs.number")
+ .last()
+ .simulate("click");
+ });
+});
diff --git a/viz-lib/src/visualizations/table/Editor/ColumnsSettings.tsx b/viz-lib/src/visualizations/table/Editor/ColumnsSettings.tsx
new file mode 100644
index 000000000..1a7521829
--- /dev/null
+++ b/viz-lib/src/visualizations/table/Editor/ColumnsSettings.tsx
@@ -0,0 +1,89 @@
+import { map } from "lodash";
+import React from "react";
+import Collapse from "antd/lib/collapse";
+import Tooltip from "antd/lib/tooltip";
+import Typography from "antd/lib/typography";
+// @ts-expect-error ts-migrate(2724) FIXME: Module '"../../../../node_modules/react-sortable-h... Remove this comment to see the full error message
+import { sortableElement } from "react-sortable-hoc";
+import { SortableContainer, DragHandle } from "@/components/sortable";
+import { EditorPropTypes } from "@/visualizations/prop-types";
+
+import EyeOutlinedIcon from "@ant-design/icons/EyeOutlined";
+import EyeInvisibleOutlinedIcon from "@ant-design/icons/EyeInvisibleOutlined";
+
+import ColumnEditor from "./ColumnEditor";
+
+const { Text } = Typography;
+
+const SortableItem = sortableElement(Collapse.Panel);
+
+export default function ColumnsSettings({ options, onOptionsChange }: any) {
+ function handleColumnChange(newColumn: any, event: any) {
+ if (event) {
+ event.stopPropagation();
+ }
+ const columns = map(options.columns, c => (c.name === newColumn.name ? newColumn : c));
+ onOptionsChange({ columns });
+ }
+
+ function handleColumnsReorder({ oldIndex, newIndex }: any) {
+ const columns = [...options.columns];
+ columns.splice(newIndex, 0, ...columns.splice(oldIndex, 1));
+ onOptionsChange({ columns });
+ }
+
+ return (
+ container.firstChild}
+ onSortEnd={handleColumnsReorder}
+ containerProps={{
+ className: "table-visualization-editor-columns",
+ }}>
+ {/* @ts-expect-error ts-migrate(2322) FIXME: Type 'Element' is not assignable to type 'null | u... Remove this comment to see the full error message */}
+
+ {map(options.columns, (column, index) => (
+
+
+
+ {column.name}
+ {column.title !== "" && column.title !== column.name && (
+
+ ({column.title})
+
+ )}
+
+
+ }
+ extra={
+
+ {column.visible ? (
+ handleColumnChange({ ...column, visible: !column.visible }, event)}
+ />
+ ) : (
+ handleColumnChange({ ...column, visible: !column.visible }, event)}
+ />
+ )}
+
+ }>
+ {/* @ts-expect-error ts-migrate(2322) FIXME: Type '(newColumn: any, event: any) => void' is not... Remove this comment to see the full error message */}
+
+
+ ))}
+
+
+ );
+}
+
+ColumnsSettings.propTypes = EditorPropTypes;
diff --git a/viz-lib/src/visualizations/table/Editor/GridSettings.test.tsx b/viz-lib/src/visualizations/table/Editor/GridSettings.test.tsx
new file mode 100644
index 000000000..70ad9e3f5
--- /dev/null
+++ b/viz-lib/src/visualizations/table/Editor/GridSettings.test.tsx
@@ -0,0 +1,43 @@
+import React from "react";
+import enzyme from "enzyme";
+
+import getOptions from "../getOptions";
+import GridSettings from "./GridSettings";
+
+function findByTestID(wrapper: any, testId: any) {
+ return wrapper.find(`[data-test="${testId}"]`);
+}
+
+function mount(options: any, done: any) {
+ const data = { columns: [], rows: [] };
+ options = getOptions(options, data);
+ return enzyme.mount(
+ {
+ expect(changedOptions).toMatchSnapshot();
+ done();
+ }}
+ />
+ );
+}
+
+describe("Visualizations -> Table -> Editor -> Grid Settings", () => {
+ test("Changes items per page", done => {
+ const el = mount(
+ {
+ itemsPerPage: 25,
+ },
+ done
+ );
+
+ findByTestID(el, "Table.ItemsPerPage")
+ .last()
+ .simulate("mouseDown");
+ findByTestID(el, "Table.ItemsPerPage.100")
+ .last()
+ .simulate("click");
+ });
+});
diff --git a/viz-lib/src/visualizations/table/Editor/GridSettings.tsx b/viz-lib/src/visualizations/table/Editor/GridSettings.tsx
new file mode 100644
index 000000000..73aa57ac2
--- /dev/null
+++ b/viz-lib/src/visualizations/table/Editor/GridSettings.tsx
@@ -0,0 +1,29 @@
+import { map } from "lodash";
+import React from "react";
+import { Section, Select } from "@/components/visualizations/editor";
+import { EditorPropTypes } from "@/visualizations/prop-types";
+
+const ALLOWED_ITEM_PER_PAGE = [5, 10, 15, 20, 25, 50, 100, 150, 200, 250, 500];
+
+export default function GridSettings({ options, onOptionsChange }: any) {
+ return (
+ // @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message
+
+ onOptionsChange({ itemsPerPage })}>
+ {map(ALLOWED_ITEM_PER_PAGE, value => (
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message
+
+ {value}
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ ))}
+
+
+ );
+}
+
+GridSettings.propTypes = EditorPropTypes;
diff --git a/viz-lib/src/visualizations/table/Editor/__snapshots__/ColumnsSettings.test.tsx.snap b/viz-lib/src/visualizations/table/Editor/__snapshots__/ColumnsSettings.test.tsx.snap
new file mode 100644
index 000000000..669b2e57e
--- /dev/null
+++ b/viz-lib/src/visualizations/table/Editor/__snapshots__/ColumnsSettings.test.tsx.snap
@@ -0,0 +1,166 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`Visualizations -> Table -> Editor -> Columns Settings Changes column alignment 1`] = `
+Object {
+ "columns": Array [
+ Object {
+ "alignContent": "right",
+ "allowHTML": true,
+ "allowSearch": false,
+ "booleanValues": Array [
+ "false",
+ "true",
+ ],
+ "dateTimeFormat": undefined,
+ "displayAs": "string",
+ "highlightLinks": false,
+ "imageHeight": "",
+ "imageTitleTemplate": "{{ @ }}",
+ "imageUrlTemplate": "{{ @ }}",
+ "imageWidth": "",
+ "linkOpenInNewTab": true,
+ "linkTextTemplate": "{{ @ }}",
+ "linkTitleTemplate": "{{ @ }}",
+ "linkUrlTemplate": "{{ @ }}",
+ "name": "a",
+ "numberFormat": undefined,
+ "order": 100000,
+ "title": "a",
+ "type": "string",
+ "visible": true,
+ },
+ ],
+}
+`;
+
+exports[`Visualizations -> Table -> Editor -> Columns Settings Changes column display type 1`] = `
+Object {
+ "columns": Array [
+ Object {
+ "alignContent": "left",
+ "allowHTML": true,
+ "allowSearch": false,
+ "booleanValues": Array [
+ "false",
+ "true",
+ ],
+ "dateTimeFormat": undefined,
+ "displayAs": "number",
+ "highlightLinks": false,
+ "imageHeight": "",
+ "imageTitleTemplate": "{{ @ }}",
+ "imageUrlTemplate": "{{ @ }}",
+ "imageWidth": "",
+ "linkOpenInNewTab": true,
+ "linkTextTemplate": "{{ @ }}",
+ "linkTitleTemplate": "{{ @ }}",
+ "linkUrlTemplate": "{{ @ }}",
+ "name": "a",
+ "numberFormat": undefined,
+ "order": 100000,
+ "title": "a",
+ "type": "string",
+ "visible": true,
+ },
+ ],
+}
+`;
+
+exports[`Visualizations -> Table -> Editor -> Columns Settings Changes column title 1`] = `
+Object {
+ "columns": Array [
+ Object {
+ "alignContent": "left",
+ "allowHTML": true,
+ "allowSearch": false,
+ "booleanValues": Array [
+ "false",
+ "true",
+ ],
+ "dateTimeFormat": undefined,
+ "displayAs": "string",
+ "highlightLinks": false,
+ "imageHeight": "",
+ "imageTitleTemplate": "{{ @ }}",
+ "imageUrlTemplate": "{{ @ }}",
+ "imageWidth": "",
+ "linkOpenInNewTab": true,
+ "linkTextTemplate": "{{ @ }}",
+ "linkTitleTemplate": "{{ @ }}",
+ "linkUrlTemplate": "{{ @ }}",
+ "name": "a",
+ "numberFormat": undefined,
+ "order": 100000,
+ "title": "test",
+ "type": "string",
+ "visible": true,
+ },
+ ],
+}
+`;
+
+exports[`Visualizations -> Table -> Editor -> Columns Settings Enables search by column data 1`] = `
+Object {
+ "columns": Array [
+ Object {
+ "alignContent": "left",
+ "allowHTML": true,
+ "allowSearch": true,
+ "booleanValues": Array [
+ "false",
+ "true",
+ ],
+ "dateTimeFormat": undefined,
+ "displayAs": "string",
+ "highlightLinks": false,
+ "imageHeight": "",
+ "imageTitleTemplate": "{{ @ }}",
+ "imageUrlTemplate": "{{ @ }}",
+ "imageWidth": "",
+ "linkOpenInNewTab": true,
+ "linkTextTemplate": "{{ @ }}",
+ "linkTitleTemplate": "{{ @ }}",
+ "linkUrlTemplate": "{{ @ }}",
+ "name": "a",
+ "numberFormat": undefined,
+ "order": 100000,
+ "title": "a",
+ "type": "string",
+ "visible": true,
+ },
+ ],
+}
+`;
+
+exports[`Visualizations -> Table -> Editor -> Columns Settings Toggles column visibility 1`] = `
+Object {
+ "columns": Array [
+ Object {
+ "alignContent": "left",
+ "allowHTML": true,
+ "allowSearch": false,
+ "booleanValues": Array [
+ "false",
+ "true",
+ ],
+ "dateTimeFormat": undefined,
+ "displayAs": "string",
+ "highlightLinks": false,
+ "imageHeight": "",
+ "imageTitleTemplate": "{{ @ }}",
+ "imageUrlTemplate": "{{ @ }}",
+ "imageWidth": "",
+ "linkOpenInNewTab": true,
+ "linkTextTemplate": "{{ @ }}",
+ "linkTitleTemplate": "{{ @ }}",
+ "linkUrlTemplate": "{{ @ }}",
+ "name": "a",
+ "numberFormat": undefined,
+ "order": 100000,
+ "title": "a",
+ "type": "string",
+ "visible": false,
+ },
+ ],
+}
+`;
diff --git a/viz-lib/src/visualizations/table/Editor/__snapshots__/GridSettings.test.tsx.snap b/viz-lib/src/visualizations/table/Editor/__snapshots__/GridSettings.test.tsx.snap
new file mode 100644
index 000000000..ce088a680
--- /dev/null
+++ b/viz-lib/src/visualizations/table/Editor/__snapshots__/GridSettings.test.tsx.snap
@@ -0,0 +1,7 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`Visualizations -> Table -> Editor -> Grid Settings Changes items per page 1`] = `
+Object {
+ "itemsPerPage": 100,
+}
+`;
diff --git a/viz-lib/src/visualizations/table/Editor/editor.less b/viz-lib/src/visualizations/table/Editor/editor.less
new file mode 100644
index 000000000..ed616cdd7
--- /dev/null
+++ b/viz-lib/src/visualizations/table/Editor/editor.less
@@ -0,0 +1,33 @@
+.table-visualization-editor-columns {
+ .ant-collapse {
+ background: transparent;
+ }
+
+ .ant-collapse-item {
+ background: #ffffff;
+
+ .drag-handle {
+ height: 20px;
+ margin-left: -16px;
+ padding: 0 16px;
+ }
+ }
+
+ .table-editor-columns-dragged-item {
+ z-index: 1;
+ }
+}
+
+.table-visualization-editor-column {
+ padding-left: 6px;
+
+ .image-dimension-selector {
+ display: flex;
+ align-items: center;
+
+ .image-dimension-selector-spacer {
+ padding-left: 5px;
+ padding-right: 5px;
+ }
+ }
+}
diff --git a/viz-lib/src/visualizations/table/Editor/index.tsx b/viz-lib/src/visualizations/table/Editor/index.tsx
new file mode 100644
index 000000000..83ab48324
--- /dev/null
+++ b/viz-lib/src/visualizations/table/Editor/index.tsx
@@ -0,0 +1,11 @@
+import createTabbedEditor from "@/components/visualizations/editor/createTabbedEditor";
+
+import ColumnsSettings from "./ColumnsSettings";
+import GridSettings from "./GridSettings";
+
+import "./editor.less";
+
+export default createTabbedEditor([
+ { key: "Columns", title: "Columns", component: ColumnsSettings },
+ { key: "Grid", title: "Grid", component: GridSettings },
+]);
diff --git a/viz-lib/src/visualizations/table/Renderer.tsx b/viz-lib/src/visualizations/table/Renderer.tsx
new file mode 100644
index 000000000..3812e82b8
--- /dev/null
+++ b/viz-lib/src/visualizations/table/Renderer.tsx
@@ -0,0 +1,142 @@
+import { filter, map, get, initial, last, reduce } from "lodash";
+import React, { useMemo, useState, useEffect } from "react";
+import Table from "antd/lib/table";
+import Input from "antd/lib/input";
+import InfoCircleFilledIcon from "@ant-design/icons/InfoCircleFilled";
+import Popover from "antd/lib/popover";
+import { RendererPropTypes } from "@/visualizations/prop-types";
+
+import { prepareColumns, initRows, filterRows, sortRows } from "./utils";
+
+import "./renderer.less";
+
+function joinColumns(array: any, separator = ", ") {
+ return reduce(
+ array,
+ (result, item, index) => {
+ // @ts-expect-error ts-migrate(2365) FIXME: Operator '>' cannot be applied to types 'string' a... Remove this comment to see the full error message
+ if (index > 0) {
+ // @ts-expect-error ts-migrate(2345) FIXME: Argument of type 'string' is not assignable to par... Remove this comment to see the full error message
+ result.push(separator);
+ }
+ // @ts-expect-error ts-migrate(2345) FIXME: Argument of type 'any' is not assignable to parame... Remove this comment to see the full error message
+ result.push(item);
+ return result;
+ },
+ []
+ );
+}
+
+function getSearchColumns(columns: any, { limit = Infinity, renderColumn = (col: any) => col.title } = {}) {
+ const firstColumns = map(columns.slice(0, limit), col => renderColumn(col));
+ const restColumns = map(columns.slice(limit), col => col.title);
+ if (restColumns.length > 0) {
+ return [...joinColumns(firstColumns), ` and ${restColumns.length} others`];
+ }
+ if (firstColumns.length > 1) {
+ return [...joinColumns(initial(firstColumns)), ` and `, last(firstColumns)];
+ }
+ return firstColumns;
+}
+
+function SearchInputInfoIcon({ searchColumns }: any) {
+ return (
+
+ Search {getSearchColumns(searchColumns, { renderColumn: col => {col.title}
})}
+
+ }>
+
+
+ );
+}
+
+type OwnSearchInputProps = {
+ onChange?: (...args: any[]) => any;
+};
+
+type SearchInputProps = OwnSearchInputProps & typeof SearchInput.defaultProps;
+
+// @ts-expect-error ts-migrate(2339) FIXME: Property 'searchColumns' does not exist on type 'S... Remove this comment to see the full error message
+function SearchInput({ searchColumns, ...props }: SearchInputProps) {
+ if (searchColumns.length <= 0) {
+ return null;
+ }
+
+ const searchColumnsLimit = 3;
+ return (
+ searchColumnsLimit ? : null}
+ />
+ );
+}
+
+SearchInput.defaultProps = {
+ onChange: () => {},
+};
+
+export default function Renderer({ options, data }: any) {
+ const [searchTerm, setSearchTerm] = useState("");
+ const [orderBy, setOrderBy] = useState([]);
+
+ const searchColumns = useMemo(() => filter(options.columns, "allowSearch"), [options.columns]);
+
+ const tableColumns = useMemo(() => {
+ const searchInput =
+ searchColumns.length > 0 ? (
+ // @ts-expect-error ts-migrate(2322) FIXME: Type '(event: any) => void' is not assignable to t... Remove this comment to see the full error message
+ setSearchTerm(event.target.value)} />
+ ) : null;
+ return prepareColumns(options.columns, searchInput, orderBy, (newOrderBy: any) => {
+ setOrderBy(newOrderBy);
+ // Remove text selection - may occur accidentally
+ // @ts-expect-error ts-migrate(2531) FIXME: Object is possibly 'null'.
+ document.getSelection().removeAllRanges();
+ });
+ }, [options.columns, searchColumns, orderBy]);
+
+ const preparedRows = useMemo(() => sortRows(filterRows(initRows(data.rows), searchTerm, searchColumns), orderBy), [
+ data.rows,
+ searchTerm,
+ searchColumns,
+ orderBy,
+ ]);
+
+ // If data or config columns change - reset sorting
+ useEffect(() => {
+ setOrderBy([]);
+ }, [options.columns, data.columns]);
+
+ if (data.rows.length === 0) {
+ return null;
+ }
+
+ return (
+
+ );
+}
+
+Renderer.propTypes = RendererPropTypes;
diff --git a/viz-lib/src/visualizations/table/columns/__snapshots__/boolean.test.tsx.snap b/viz-lib/src/visualizations/table/columns/__snapshots__/boolean.test.tsx.snap
new file mode 100644
index 000000000..69ea30bc8
--- /dev/null
+++ b/viz-lib/src/visualizations/table/columns/__snapshots__/boolean.test.tsx.snap
@@ -0,0 +1,19 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`Visualizations -> Table -> Columns -> Boolean Editor Changes value for FALSE 1`] = `
+Object {
+ "booleanValues": Array [
+ "no",
+ "true",
+ ],
+}
+`;
+
+exports[`Visualizations -> Table -> Columns -> Boolean Editor Changes value for TRUE 1`] = `
+Object {
+ "booleanValues": Array [
+ "false",
+ "yes",
+ ],
+}
+`;
diff --git a/viz-lib/src/visualizations/table/columns/__snapshots__/datetime.test.tsx.snap b/viz-lib/src/visualizations/table/columns/__snapshots__/datetime.test.tsx.snap
new file mode 100644
index 000000000..49a009797
--- /dev/null
+++ b/viz-lib/src/visualizations/table/columns/__snapshots__/datetime.test.tsx.snap
@@ -0,0 +1,7 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`Visualizations -> Table -> Columns -> Date/Time Editor Changes format 1`] = `
+Object {
+ "dateTimeFormat": "YYYY/MM/DD HH:ss",
+}
+`;
diff --git a/viz-lib/src/visualizations/table/columns/__snapshots__/image.test.tsx.snap b/viz-lib/src/visualizations/table/columns/__snapshots__/image.test.tsx.snap
new file mode 100644
index 000000000..8fa4e90d3
--- /dev/null
+++ b/viz-lib/src/visualizations/table/columns/__snapshots__/image.test.tsx.snap
@@ -0,0 +1,25 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`Visualizations -> Table -> Columns -> Image Editor Changes URL template 1`] = `
+Object {
+ "imageUrlTemplate": "http://{{ @ }}.jpeg",
+}
+`;
+
+exports[`Visualizations -> Table -> Columns -> Image Editor Changes height 1`] = `
+Object {
+ "imageHeight": "300",
+}
+`;
+
+exports[`Visualizations -> Table -> Columns -> Image Editor Changes title template 1`] = `
+Object {
+ "imageTitleTemplate": "Image {{ @ }}",
+}
+`;
+
+exports[`Visualizations -> Table -> Columns -> Image Editor Changes width 1`] = `
+Object {
+ "imageWidth": "400",
+}
+`;
diff --git a/viz-lib/src/visualizations/table/columns/__snapshots__/link.test.tsx.snap b/viz-lib/src/visualizations/table/columns/__snapshots__/link.test.tsx.snap
new file mode 100644
index 000000000..9c335b26c
--- /dev/null
+++ b/viz-lib/src/visualizations/table/columns/__snapshots__/link.test.tsx.snap
@@ -0,0 +1,25 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`Visualizations -> Table -> Columns -> Link Editor Changes URL template 1`] = `
+Object {
+ "linkUrlTemplate": "http://{{ @ }}/index.html",
+}
+`;
+
+exports[`Visualizations -> Table -> Columns -> Link Editor Changes text template 1`] = `
+Object {
+ "linkTextTemplate": "Text of {{ @ }}",
+}
+`;
+
+exports[`Visualizations -> Table -> Columns -> Link Editor Changes title template 1`] = `
+Object {
+ "linkTitleTemplate": "Title of {{ @ }}",
+}
+`;
+
+exports[`Visualizations -> Table -> Columns -> Link Editor Makes link open in new tab 1`] = `
+Object {
+ "linkOpenInNewTab": true,
+}
+`;
diff --git a/viz-lib/src/visualizations/table/columns/__snapshots__/number.test.tsx.snap b/viz-lib/src/visualizations/table/columns/__snapshots__/number.test.tsx.snap
new file mode 100644
index 000000000..1553913e9
--- /dev/null
+++ b/viz-lib/src/visualizations/table/columns/__snapshots__/number.test.tsx.snap
@@ -0,0 +1,7 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`Visualizations -> Table -> Columns -> Number Editor Changes format 1`] = `
+Object {
+ "numberFormat": "0.00%",
+}
+`;
diff --git a/viz-lib/src/visualizations/table/columns/__snapshots__/text.test.tsx.snap b/viz-lib/src/visualizations/table/columns/__snapshots__/text.test.tsx.snap
new file mode 100644
index 000000000..f306cff81
--- /dev/null
+++ b/viz-lib/src/visualizations/table/columns/__snapshots__/text.test.tsx.snap
@@ -0,0 +1,13 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`Visualizations -> Table -> Columns -> Text Editor Enables HTML content 1`] = `
+Object {
+ "allowHTML": true,
+}
+`;
+
+exports[`Visualizations -> Table -> Columns -> Text Editor Enables highlight links option 1`] = `
+Object {
+ "highlightLinks": true,
+}
+`;
diff --git a/viz-lib/src/visualizations/table/columns/boolean.test.tsx b/viz-lib/src/visualizations/table/columns/boolean.test.tsx
new file mode 100644
index 000000000..28c0bcedd
--- /dev/null
+++ b/viz-lib/src/visualizations/table/columns/boolean.test.tsx
@@ -0,0 +1,56 @@
+import React from "react";
+import enzyme from "enzyme";
+
+import Column from "./boolean";
+
+function findByTestID(wrapper: any, testId: any) {
+ return wrapper.find(`[data-test="${testId}"]`);
+}
+
+function mount(column: any, done: any) {
+ return enzyme.mount(
+ {
+ expect(changedColumn).toMatchSnapshot();
+ done();
+ }}
+ />
+ );
+}
+
+describe("Visualizations -> Table -> Columns -> Boolean", () => {
+ describe("Editor", () => {
+ test("Changes value for FALSE", done => {
+ const el = mount(
+ {
+ name: "a",
+ booleanValues: ["false", "true"],
+ },
+ done
+ );
+
+ findByTestID(el, "Table.ColumnEditor.Boolean.False")
+ .last()
+ .find("input")
+ .simulate("change", { target: { value: "no" } });
+ });
+
+ test("Changes value for TRUE", done => {
+ const el = mount(
+ {
+ name: "a",
+ booleanValues: ["false", "true"],
+ },
+ done
+ );
+
+ findByTestID(el, "Table.ColumnEditor.Boolean.True")
+ .last()
+ .find("input")
+ .simulate("change", { target: { value: "yes" } });
+ });
+ });
+});
diff --git a/viz-lib/src/visualizations/table/columns/boolean.tsx b/viz-lib/src/visualizations/table/columns/boolean.tsx
new file mode 100644
index 000000000..b4c474ad7
--- /dev/null
+++ b/viz-lib/src/visualizations/table/columns/boolean.tsx
@@ -0,0 +1,80 @@
+import React from "react";
+import { useDebouncedCallback } from "use-debounce";
+import { Section, Input } from "@/components/visualizations/editor";
+import { createBooleanFormatter } from "@/lib/value-format";
+
+type Props = {
+ column: {
+ name: string;
+ booleanValues?: string[];
+ };
+ onChange: (...args: any[]) => any;
+};
+
+function Editor({ column, onChange }: Props) {
+ function handleChange(index: any, value: any) {
+ // @ts-expect-error ts-migrate(2488) FIXME: Type 'string[] | undefined' must have a '[Symbol.i... Remove this comment to see the full error message
+ const booleanValues = [...column.booleanValues];
+ booleanValues.splice(index, 1, value);
+ onChange({ booleanValues });
+ }
+
+ const [handleChangeDebounced] = useDebouncedCallback(handleChange, 200);
+
+ return (
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ }
+ data-test="Table.ColumnEditor.Boolean.False"
+ // @ts-expect-error ts-migrate(2532) FIXME: Object is possibly 'undefined'.
+ defaultValue={column.booleanValues[0]}
+ onChange={(event: any) => handleChangeDebounced(0, event.target.value)}
+ />
+
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+
+ );
+}
+
+export default function initBooleanColumn(column: any) {
+ const format = createBooleanFormatter(column.booleanValues);
+
+ function prepareData(row: any) {
+ return {
+ text: format(row[column.name]),
+ };
+ }
+
+ function BooleanColumn({ row }: any) {
+ // eslint-disable-line react/prop-types
+ const { text } = prepareData(row);
+ return text;
+ }
+
+ BooleanColumn.prepareData = prepareData;
+
+ return BooleanColumn;
+}
+
+initBooleanColumn.friendlyName = "Boolean";
+initBooleanColumn.Editor = Editor;
diff --git a/viz-lib/src/visualizations/table/columns/datetime.test.tsx b/viz-lib/src/visualizations/table/columns/datetime.test.tsx
new file mode 100644
index 000000000..0741da737
--- /dev/null
+++ b/viz-lib/src/visualizations/table/columns/datetime.test.tsx
@@ -0,0 +1,41 @@
+import React from "react";
+import enzyme from "enzyme";
+
+import Column from "./datetime";
+
+function findByTestID(wrapper: any, testId: any) {
+ return wrapper.find(`[data-test="${testId}"]`);
+}
+
+function mount(column: any, done: any) {
+ return enzyme.mount(
+ {
+ expect(changedColumn).toMatchSnapshot();
+ done();
+ }}
+ />
+ );
+}
+
+describe("Visualizations -> Table -> Columns -> Date/Time", () => {
+ describe("Editor", () => {
+ test("Changes format", done => {
+ const el = mount(
+ {
+ name: "a",
+ dateTimeFormat: "YYYY-MM-DD HH:mm:ss",
+ },
+ done
+ );
+
+ findByTestID(el, "Table.ColumnEditor.DateTime.Format")
+ .last()
+ .find("input")
+ .simulate("change", { target: { value: "YYYY/MM/DD HH:ss" } });
+ });
+ });
+});
diff --git a/viz-lib/src/visualizations/table/columns/datetime.tsx b/viz-lib/src/visualizations/table/columns/datetime.tsx
new file mode 100644
index 000000000..cd0e57737
--- /dev/null
+++ b/viz-lib/src/visualizations/table/columns/datetime.tsx
@@ -0,0 +1,56 @@
+import React from "react";
+import { useDebouncedCallback } from "use-debounce";
+import { Section, Input, ContextHelp } from "@/components/visualizations/editor";
+import { createDateTimeFormatter } from "@/lib/value-format";
+
+type Props = {
+ column: {
+ name: string;
+ dateTimeFormat?: string;
+ };
+ onChange: (...args: any[]) => any;
+};
+
+function Editor({ column, onChange }: Props) {
+ const [onChangeDebounced] = useDebouncedCallback(onChange, 200);
+
+ return (
+ // @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message
+
+ );
+}
+
+export default function initDateTimeColumn(column: any) {
+ const format = createDateTimeFormatter(column.dateTimeFormat);
+
+ function prepareData(row: any) {
+ return {
+ text: format(row[column.name]),
+ };
+ }
+
+ function DateTimeColumn({ row }: any) {
+ // eslint-disable-line react/prop-types
+ const { text } = prepareData(row);
+ return text;
+ }
+
+ DateTimeColumn.prepareData = prepareData;
+
+ return DateTimeColumn;
+}
+
+initDateTimeColumn.friendlyName = "Date/Time";
+initDateTimeColumn.Editor = Editor;
diff --git a/viz-lib/src/visualizations/table/columns/image.test.tsx b/viz-lib/src/visualizations/table/columns/image.test.tsx
new file mode 100644
index 000000000..82b96041f
--- /dev/null
+++ b/viz-lib/src/visualizations/table/columns/image.test.tsx
@@ -0,0 +1,86 @@
+import React from "react";
+import enzyme from "enzyme";
+
+import Column from "./image";
+
+function findByTestID(wrapper: any, testId: any) {
+ return wrapper.find(`[data-test="${testId}"]`);
+}
+
+function mount(column: any, done: any) {
+ return enzyme.mount(
+ {
+ expect(changedColumn).toMatchSnapshot();
+ done();
+ }}
+ />
+ );
+}
+
+describe("Visualizations -> Table -> Columns -> Image", () => {
+ describe("Editor", () => {
+ test("Changes URL template", done => {
+ const el = mount(
+ {
+ name: "a",
+ imageUrlTemplate: "{{ @ }}",
+ },
+ done
+ );
+
+ findByTestID(el, "Table.ColumnEditor.Image.UrlTemplate")
+ .last()
+ .find("input")
+ .simulate("change", { target: { value: "http://{{ @ }}.jpeg" } });
+ });
+
+ test("Changes width", done => {
+ const el = mount(
+ {
+ name: "a",
+ imageWidth: null,
+ },
+ done
+ );
+
+ findByTestID(el, "Table.ColumnEditor.Image.Width")
+ .last()
+ .find("input")
+ .simulate("change", { target: { value: "400" } });
+ });
+
+ test("Changes height", done => {
+ const el = mount(
+ {
+ name: "a",
+ imageHeight: null,
+ },
+ done
+ );
+
+ findByTestID(el, "Table.ColumnEditor.Image.Height")
+ .last()
+ .find("input")
+ .simulate("change", { target: { value: "300" } });
+ });
+
+ test("Changes title template", done => {
+ const el = mount(
+ {
+ name: "a",
+ imageUrlTemplate: "{{ @ }}",
+ },
+ done
+ );
+
+ findByTestID(el, "Table.ColumnEditor.Image.TitleTemplate")
+ .last()
+ .find("input")
+ .simulate("change", { target: { value: "Image {{ @ }}" } });
+ });
+ });
+});
diff --git a/viz-lib/src/visualizations/table/columns/image.tsx b/viz-lib/src/visualizations/table/columns/image.tsx
new file mode 100644
index 000000000..0c1f1d057
--- /dev/null
+++ b/viz-lib/src/visualizations/table/columns/image.tsx
@@ -0,0 +1,145 @@
+import { extend, trim } from "lodash";
+import React from "react";
+import { useDebouncedCallback } from "use-debounce";
+import { Section, Input, ControlLabel, ContextHelp } from "@/components/visualizations/editor";
+import { formatSimpleTemplate } from "@/lib/value-format";
+
+type Props = {
+ column: {
+ name: string;
+ imageUrlTemplate?: string;
+ imageWidth?: string;
+ imageHeight?: string;
+ imageTitleTemplate?: string;
+ };
+ onChange: (...args: any[]) => any;
+};
+
+function Editor({ column, onChange }: Props) {
+ const [onChangeDebounced] = useDebouncedCallback(onChange, 200);
+
+ return (
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+
+ Size
+ {/* @ts-expect-error ts-migrate(2746) FIXME: This JSX tag's 'children' prop expects a single ch... Remove this comment to see the full error message */}
+
+ Any positive integer value that specifies size in pixels.
+ Leave empty to use default value.
+
+
+ }>
+ {/* @ts-expect-error ts-migrate(2322) FIXME: Type 'Element' is not assignable to type 'null | u... Remove this comment to see the full error message */}
+
+ onChangeDebounced({ imageWidth: event.target.value })}
+ />
+ ×
+ onChangeDebounced({ imageHeight: event.target.value })}
+ />
+
+
+
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ {/* @ts-expect-error ts-migrate(2746) FIXME: This JSX tag's 'children' prop expects a single ch... Remove this comment to see the full error message */}
+ Format specs {ContextHelp.defaultIcon}}>
+
+ All columns can be referenced using {"{{ column_name }}"}
syntax.
+
+
+ Use {"{{ @ }}"}
to reference current (this) column.
+
+ This syntax is applicable to URL, Title and Size options.
+
+
+
+ );
+}
+
+export default function initImageColumn(column: any) {
+ function prepareData(row: any) {
+ row = extend({ "@": row[column.name] }, row);
+
+ const src = trim(formatSimpleTemplate(column.imageUrlTemplate, row));
+ if (src === "") {
+ return {};
+ }
+
+ const width = parseInt(formatSimpleTemplate(column.imageWidth, row), 10);
+ const height = parseInt(formatSimpleTemplate(column.imageHeight, row), 10);
+ const title = trim(formatSimpleTemplate(column.imageTitleTemplate, row));
+
+ const result = { src };
+
+ if (Number.isFinite(width) && width > 0) {
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'width' does not exist on type '{ src: st... Remove this comment to see the full error message
+ result.width = width;
+ }
+ if (Number.isFinite(height) && height > 0) {
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'height' does not exist on type '{ src: s... Remove this comment to see the full error message
+ result.height = height;
+ }
+ if (title !== "") {
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'text' does not exist on type '{ src: str... Remove this comment to see the full error message
+ result.text = title; // `text` is used for search
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'title' does not exist on type '{ src: st... Remove this comment to see the full error message
+ result.title = title;
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'alt' does not exist on type '{ src: stri... Remove this comment to see the full error message
+ result.alt = title;
+ }
+
+ return result;
+ }
+
+ function ImageColumn({ row }: any) {
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'text' does not exist on type '{}'.
+ // eslint-disable-line react/prop-types
+ const { text, ...props } = prepareData(row);
+ return ;
+ }
+
+ ImageColumn.prepareData = prepareData;
+
+ return ImageColumn;
+}
+
+initImageColumn.friendlyName = "Image";
+initImageColumn.Editor = Editor;
diff --git a/viz-lib/src/visualizations/table/columns/index.ts b/viz-lib/src/visualizations/table/columns/index.ts
new file mode 100644
index 000000000..537efd8fc
--- /dev/null
+++ b/viz-lib/src/visualizations/table/columns/index.ts
@@ -0,0 +1,18 @@
+import initTextColumn from "./text";
+import initNumberColumn from "./number";
+import initDateTimeColumn from "./datetime";
+import initBooleanColumn from "./boolean";
+import initLinkColumn from "./link";
+import initImageColumn from "./image";
+import initJsonColumn from "./json";
+
+// this map should contain all possible values for `column.displayAs` property
+export default {
+ string: initTextColumn,
+ number: initNumberColumn,
+ datetime: initDateTimeColumn,
+ boolean: initBooleanColumn,
+ link: initLinkColumn,
+ image: initImageColumn,
+ json: initJsonColumn,
+};
diff --git a/viz-lib/src/visualizations/table/columns/json.tsx b/viz-lib/src/visualizations/table/columns/json.tsx
new file mode 100644
index 000000000..8f3ac79e7
--- /dev/null
+++ b/viz-lib/src/visualizations/table/columns/json.tsx
@@ -0,0 +1,38 @@
+import { isString, isUndefined } from "lodash";
+import React from "react";
+import JsonViewInteractive from "@/components/json-view-interactive/JsonViewInteractive";
+import { visualizationsSettings } from "@/visualizations/visualizationsSettings";
+
+export default function initJsonColumn(column: any) {
+ function prepareData(row: any) {
+ const text = row[column.name];
+ if (isString(text) && text.length <= visualizationsSettings.tableCellMaxJSONSize) {
+ try {
+ return { text, value: JSON.parse(text) };
+ } catch (e) {
+ // ignore `JSON.parse` error and return default value
+ }
+ }
+ return { text, value: undefined };
+ }
+
+ function JsonColumn({ row }: any) {
+ // eslint-disable-line react/prop-types
+ const { text, value } = prepareData(row);
+ if (isUndefined(value)) {
+ return {"" + text}
;
+ }
+
+ return (
+
+
+
+ );
+ }
+
+ JsonColumn.prepareData = prepareData;
+
+ return JsonColumn;
+}
+
+initJsonColumn.friendlyName = "JSON";
diff --git a/viz-lib/src/visualizations/table/columns/link.test.tsx b/viz-lib/src/visualizations/table/columns/link.test.tsx
new file mode 100644
index 000000000..81bb3345d
--- /dev/null
+++ b/viz-lib/src/visualizations/table/columns/link.test.tsx
@@ -0,0 +1,86 @@
+import React from "react";
+import enzyme from "enzyme";
+
+import Column from "./link";
+
+function findByTestID(wrapper: any, testId: any) {
+ return wrapper.find(`[data-test="${testId}"]`);
+}
+
+function mount(column: any, done: any) {
+ return enzyme.mount(
+ {
+ expect(changedColumn).toMatchSnapshot();
+ done();
+ }}
+ />
+ );
+}
+
+describe("Visualizations -> Table -> Columns -> Link", () => {
+ describe("Editor", () => {
+ test("Changes URL template", done => {
+ const el = mount(
+ {
+ name: "a",
+ linkUrlTemplate: "{{ @ }}",
+ },
+ done
+ );
+
+ findByTestID(el, "Table.ColumnEditor.Link.UrlTemplate")
+ .last()
+ .find("input")
+ .simulate("change", { target: { value: "http://{{ @ }}/index.html" } });
+ });
+
+ test("Changes text template", done => {
+ const el = mount(
+ {
+ name: "a",
+ linkTextTemplate: "{{ @ }}",
+ },
+ done
+ );
+
+ findByTestID(el, "Table.ColumnEditor.Link.TextTemplate")
+ .last()
+ .find("input")
+ .simulate("change", { target: { value: "Text of {{ @ }}" } });
+ });
+
+ test("Changes title template", done => {
+ const el = mount(
+ {
+ name: "a",
+ linkTitleTemplate: "{{ @ }}",
+ },
+ done
+ );
+
+ findByTestID(el, "Table.ColumnEditor.Link.TitleTemplate")
+ .last()
+ .find("input")
+ .simulate("change", { target: { value: "Title of {{ @ }}" } });
+ });
+
+ test("Makes link open in new tab ", done => {
+ const el = mount(
+ {
+ name: "a",
+ linkOpenInNewTab: false,
+ },
+ done
+ );
+
+ findByTestID(el, "Table.ColumnEditor.Link.OpenInNewTab")
+ .last()
+ .find("input")
+ .simulate("change", { target: { checked: true } });
+ });
+ });
+});
diff --git a/viz-lib/src/visualizations/table/columns/link.tsx b/viz-lib/src/visualizations/table/columns/link.tsx
new file mode 100644
index 000000000..209fd9770
--- /dev/null
+++ b/viz-lib/src/visualizations/table/columns/link.tsx
@@ -0,0 +1,126 @@
+import { extend, trim } from "lodash";
+import React from "react";
+import { useDebouncedCallback } from "use-debounce";
+import { Section, Input, Checkbox, ContextHelp } from "@/components/visualizations/editor";
+import { formatSimpleTemplate } from "@/lib/value-format";
+
+type Props = {
+ column: {
+ name: string;
+ linkUrlTemplate?: string;
+ linkTextTemplate?: string;
+ linkTitleTemplate?: string;
+ linkOpenInNewTab?: boolean;
+ };
+ onChange: (...args: any[]) => any;
+};
+
+function Editor({ column, onChange }: Props) {
+ const [onChangeDebounced] = useDebouncedCallback(onChange, 200);
+
+ return (
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ onChange({ linkOpenInNewTab: event.target.checked })}>
+ Open in new tab
+
+
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ {/* @ts-expect-error ts-migrate(2746) FIXME: This JSX tag's 'children' prop expects a single ch... Remove this comment to see the full error message */}
+ Format specs {ContextHelp.defaultIcon}}>
+
+ All columns can be referenced using {"{{ column_name }}"}
syntax.
+
+
+ Use {"{{ @ }}"}
to reference current (this) column.
+
+ This syntax is applicable to URL, Text and Title options.
+
+
+
+ );
+}
+
+export default function initLinkColumn(column: any) {
+ function prepareData(row: any) {
+ row = extend({ "@": row[column.name] }, row);
+
+ const href = trim(formatSimpleTemplate(column.linkUrlTemplate, row));
+ if (href === "") {
+ return {};
+ }
+
+ const title = trim(formatSimpleTemplate(column.linkTitleTemplate, row));
+ const text = trim(formatSimpleTemplate(column.linkTextTemplate, row));
+
+ const result = {
+ href,
+ text: text !== "" ? text : href,
+ };
+
+ if (title !== "") {
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'title' does not exist on type '{ href: s... Remove this comment to see the full error message
+ result.title = title;
+ }
+ if (column.linkOpenInNewTab) {
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'target' does not exist on type '{ href: ... Remove this comment to see the full error message
+ result.target = "_blank";
+ }
+
+ return result;
+ }
+
+ function LinkColumn({ row }: any) {
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'text' does not exist on type '{}'.
+ // eslint-disable-line react/prop-types
+ const { text, ...props } = prepareData(row);
+ return {text} ;
+ }
+
+ LinkColumn.prepareData = prepareData;
+
+ return LinkColumn;
+}
+
+initLinkColumn.friendlyName = "Link";
+initLinkColumn.Editor = Editor;
diff --git a/viz-lib/src/visualizations/table/columns/number.test.tsx b/viz-lib/src/visualizations/table/columns/number.test.tsx
new file mode 100644
index 000000000..6b11db106
--- /dev/null
+++ b/viz-lib/src/visualizations/table/columns/number.test.tsx
@@ -0,0 +1,41 @@
+import React from "react";
+import enzyme from "enzyme";
+
+import Column from "./number";
+
+function findByTestID(wrapper: any, testId: any) {
+ return wrapper.find(`[data-test="${testId}"]`);
+}
+
+function mount(column: any, done: any) {
+ return enzyme.mount(
+ {
+ expect(changedColumn).toMatchSnapshot();
+ done();
+ }}
+ />
+ );
+}
+
+describe("Visualizations -> Table -> Columns -> Number", () => {
+ describe("Editor", () => {
+ test("Changes format", done => {
+ const el = mount(
+ {
+ name: "a",
+ numberFormat: "0[.]0000",
+ },
+ done
+ );
+
+ findByTestID(el, "Table.ColumnEditor.Number.Format")
+ .last()
+ .find("input")
+ .simulate("change", { target: { value: "0.00%" } });
+ });
+ });
+});
diff --git a/viz-lib/src/visualizations/table/columns/number.tsx b/viz-lib/src/visualizations/table/columns/number.tsx
new file mode 100644
index 000000000..78a8e8f41
--- /dev/null
+++ b/viz-lib/src/visualizations/table/columns/number.tsx
@@ -0,0 +1,56 @@
+import React from "react";
+import { useDebouncedCallback } from "use-debounce";
+import { Section, Input, ContextHelp } from "@/components/visualizations/editor";
+import { createNumberFormatter } from "@/lib/value-format";
+
+type Props = {
+ column: {
+ name: string;
+ numberFormat?: string;
+ };
+ onChange: (...args: any[]) => any;
+};
+
+function Editor({ column, onChange }: Props) {
+ const [onChangeDebounced] = useDebouncedCallback(onChange, 200);
+
+ return (
+ // @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message
+
+ );
+}
+
+export default function initNumberColumn(column: any) {
+ const format = createNumberFormatter(column.numberFormat);
+
+ function prepareData(row: any) {
+ return {
+ text: format(row[column.name]),
+ };
+ }
+
+ function NumberColumn({ row }: any) {
+ // eslint-disable-line react/prop-types
+ const { text } = prepareData(row);
+ return text;
+ }
+
+ NumberColumn.prepareData = prepareData;
+
+ return NumberColumn;
+}
+
+initNumberColumn.friendlyName = "Number";
+initNumberColumn.Editor = Editor;
diff --git a/viz-lib/src/visualizations/table/columns/text.test.tsx b/viz-lib/src/visualizations/table/columns/text.test.tsx
new file mode 100644
index 000000000..8eaa367bc
--- /dev/null
+++ b/viz-lib/src/visualizations/table/columns/text.test.tsx
@@ -0,0 +1,58 @@
+import React from "react";
+import enzyme from "enzyme";
+
+import Column from "./text";
+
+function findByTestID(wrapper: any, testId: any) {
+ return wrapper.find(`[data-test="${testId}"]`);
+}
+
+function mount(column: any, done: any) {
+ return enzyme.mount(
+ {
+ expect(changedColumn).toMatchSnapshot();
+ done();
+ }}
+ />
+ );
+}
+
+describe("Visualizations -> Table -> Columns -> Text", () => {
+ describe("Editor", () => {
+ test("Enables HTML content", done => {
+ const el = mount(
+ {
+ name: "a",
+ allowHTML: false,
+ highlightLinks: false,
+ },
+ done
+ );
+
+ findByTestID(el, "Table.ColumnEditor.Text.AllowHTML")
+ .last()
+ .find("input")
+ .simulate("change", { target: { checked: true } });
+ });
+
+ test("Enables highlight links option", done => {
+ const el = mount(
+ {
+ name: "a",
+ allowHTML: true,
+ highlightLinks: false,
+ },
+ done
+ );
+
+ findByTestID(el, "Table.ColumnEditor.Text.HighlightLinks")
+ .last()
+ .find("input")
+ .simulate("change", { target: { checked: true } });
+ });
+ });
+});
diff --git a/viz-lib/src/visualizations/table/columns/text.tsx b/viz-lib/src/visualizations/table/columns/text.tsx
new file mode 100644
index 000000000..d5007a256
--- /dev/null
+++ b/viz-lib/src/visualizations/table/columns/text.tsx
@@ -0,0 +1,64 @@
+import React from "react";
+import HtmlContent from "@/components/HtmlContent";
+import { Section, Checkbox } from "@/components/visualizations/editor";
+import { createTextFormatter } from "@/lib/value-format";
+
+type Props = {
+ column: {
+ name: string;
+ allowHTML?: boolean;
+ highlightLinks?: boolean;
+ };
+ onChange: (...args: any[]) => any;
+};
+
+function Editor({ column, onChange }: Props) {
+ return (
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ onChange({ allowHTML: event.target.checked })}>
+ Allow HTML content
+
+
+
+ {column.allowHTML && (
+ // @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message
+
+ onChange({ highlightLinks: event.target.checked })}>
+ Highlight links
+
+
+ )}
+
+ );
+}
+
+export default function initTextColumn(column: any) {
+ const format = createTextFormatter(column.allowHTML && column.highlightLinks);
+
+ function prepareData(row: any) {
+ return {
+ text: format(row[column.name]),
+ };
+ }
+
+ function TextColumn({ row }: any) {
+ // eslint-disable-line react/prop-types
+ const { text } = prepareData(row);
+ return column.allowHTML ? {text} : text;
+ }
+
+ TextColumn.prepareData = prepareData;
+
+ return TextColumn;
+}
+
+initTextColumn.friendlyName = "Text";
+initTextColumn.Editor = Editor;
diff --git a/viz-lib/src/visualizations/table/getOptions.ts b/viz-lib/src/visualizations/table/getOptions.ts
new file mode 100644
index 000000000..bcde21bbd
--- /dev/null
+++ b/viz-lib/src/visualizations/table/getOptions.ts
@@ -0,0 +1,134 @@
+import _ from "lodash";
+import { visualizationsSettings } from "@/visualizations/visualizationsSettings";
+
+const DEFAULT_OPTIONS = {
+ itemsPerPage: 25,
+ paginationSize: "default", // not editable through Editor
+};
+
+const filterTypes = ["filter", "multi-filter", "multiFilter"];
+
+function getColumnNameWithoutType(column: any) {
+ let typeSplit;
+ if (column.indexOf("::") !== -1) {
+ typeSplit = "::";
+ } else if (column.indexOf("__") !== -1) {
+ typeSplit = "__";
+ } else {
+ return column;
+ }
+
+ const parts = column.split(typeSplit);
+ if (parts[0] === "" && parts.length === 2) {
+ return parts[1];
+ }
+
+ if (!_.includes(filterTypes, parts[1])) {
+ return column;
+ }
+
+ return parts[0];
+}
+
+function getColumnContentAlignment(type: any) {
+ return ["integer", "float", "boolean", "date", "datetime"].indexOf(type) >= 0 ? "right" : "left";
+}
+
+function getDefaultColumnsOptions(columns: any) {
+ const displayAs = {
+ integer: "number",
+ float: "number",
+ boolean: "boolean",
+ date: "datetime",
+ datetime: "datetime",
+ };
+
+ return _.map(columns, (col, index) => ({
+ name: col.name,
+ type: col.type,
+ // @ts-expect-error ts-migrate(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message
+ displayAs: displayAs[col.type] || "string",
+ visible: true,
+ order: 100000 + index,
+ title: getColumnNameWithoutType(col.name),
+ allowSearch: false,
+ alignContent: getColumnContentAlignment(col.type),
+ // `string` cell options
+ allowHTML: true,
+ highlightLinks: false,
+ }));
+}
+
+function getDefaultFormatOptions(column: any) {
+ const dateTimeFormat = {
+ date: visualizationsSettings.dateFormat || "DD/MM/YYYY",
+ datetime: visualizationsSettings.dateTimeFormat || "DD/MM/YYYY HH:mm",
+ };
+ const numberFormat = {
+ integer: visualizationsSettings.integerFormat || "0,0",
+ float: visualizationsSettings.floatFormat || "0,0.00",
+ };
+ return {
+ // @ts-expect-error ts-migrate(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message
+ dateTimeFormat: dateTimeFormat[column.type],
+ // @ts-expect-error ts-migrate(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message
+ numberFormat: numberFormat[column.type],
+ booleanValues: visualizationsSettings.booleanValues || ["false", "true"],
+ // `image` cell options
+ imageUrlTemplate: "{{ @ }}",
+ imageTitleTemplate: "{{ @ }}",
+ imageWidth: "",
+ imageHeight: "",
+ // `link` cell options
+ linkUrlTemplate: "{{ @ }}",
+ linkTextTemplate: "{{ @ }}",
+ linkTitleTemplate: "{{ @ }}",
+ linkOpenInNewTab: true,
+ };
+}
+
+function wereColumnsReordered(queryColumns: any, visualizationColumns: any) {
+ queryColumns = _.map(queryColumns, col => col.name);
+ visualizationColumns = _.map(visualizationColumns, col => col.name);
+
+ // Some columns may be removed - so skip them (but keep original order)
+ visualizationColumns = _.filter(visualizationColumns, col => _.includes(queryColumns, col));
+ // Pick query columns that were previously saved with viz (but keep order too)
+ queryColumns = _.filter(queryColumns, col => _.includes(visualizationColumns, col));
+
+ // Both array now have the same size as they both contains only common columns
+ // (in fact, it was an intersection, that kept order of items on both arrays).
+ // Now check for equality item-by-item; if common columns are in the same order -
+ // they were not reordered in editor
+ for (let i = 0; i < queryColumns.length; i += 1) {
+ if (visualizationColumns[i] !== queryColumns[i]) {
+ return true;
+ }
+ }
+ return false;
+}
+
+function getColumnsOptions(columns: any, visualizationColumns: any) {
+ const options = getDefaultColumnsOptions(columns);
+
+ if (wereColumnsReordered(columns, visualizationColumns)) {
+ visualizationColumns = _.fromPairs(
+ _.map(visualizationColumns, (col, index) => [col.name, _.extend({}, col, { order: index })])
+ );
+ } else {
+ visualizationColumns = _.fromPairs(_.map(visualizationColumns, col => [col.name, _.omit(col, "order")]));
+ }
+
+ _.each(options, col => _.extend(col, visualizationColumns[col.name]));
+
+ return _.sortBy(options, "order");
+}
+
+export default function getOptions(options: any, { columns }: any) {
+ options = { ...DEFAULT_OPTIONS, ...options };
+ options.columns = _.map(getColumnsOptions(columns, options.columns), col => ({
+ ...getDefaultFormatOptions(col),
+ ...col,
+ }));
+ return options;
+}
diff --git a/viz-lib/src/visualizations/table/index.ts b/viz-lib/src/visualizations/table/index.ts
new file mode 100644
index 000000000..6eadac9a6
--- /dev/null
+++ b/viz-lib/src/visualizations/table/index.ts
@@ -0,0 +1,16 @@
+import getOptions from "./getOptions";
+import Renderer from "./Renderer";
+import Editor from "./Editor";
+
+export default {
+ type: "TABLE",
+ name: "Table",
+ getOptions,
+ Renderer,
+ Editor,
+
+ autoHeight: true,
+ defaultRows: 14,
+ defaultColumns: 3,
+ minColumns: 2,
+};
diff --git a/viz-lib/src/visualizations/table/renderer.less b/viz-lib/src/visualizations/table/renderer.less
new file mode 100644
index 000000000..1c538037a
--- /dev/null
+++ b/viz-lib/src/visualizations/table/renderer.less
@@ -0,0 +1,159 @@
+@import "../variables";
+
+.table-visualization-container {
+ .ant-pagination.ant-table-pagination {
+ float: none;
+ display: block;
+ text-align: center;
+ margin-bottom: 0;
+ }
+
+ .ant-table {
+ overflow-x: auto;
+ }
+
+ .table-fixed-header {
+ table {
+ border-top: 0;
+
+ th:not(.table-visualization-search) {
+ position: sticky !important;
+ left: 0;
+ top: 0;
+ border-top: 0;
+ z-index: 1;
+ background: #fafafa !important;
+ }
+ }
+ }
+
+ table {
+ border-top: @border-width-base @border-style-base @border-color-split;
+ border-bottom: 0;
+
+ .display-as-number,
+ .display-as-boolean,
+ .display-as-datetime,
+ .display-as-image {
+ width: 1%;
+ white-space: nowrap;
+ }
+
+ .table-visualization-spacer {
+ padding-left: 0;
+ padding-right: 0;
+
+ & > div:before {
+ content: none !important;
+ }
+ }
+
+ tbody tr:last-child td {
+ border-bottom: 0;
+ }
+
+ thead {
+ .ant-table-column-sorter-up,
+ .ant-table-column-sorter-down {
+ opacity: 0;
+ transition: opacity 0.3s;
+ }
+
+ &:hover,
+ .table-visualization-column-is-sorted {
+ .ant-table-column-sorter-up,
+ .ant-table-column-sorter-down {
+ opacity: 1;
+ }
+ }
+
+ th {
+ white-space: nowrap;
+
+ &.table-visualization-search {
+ padding-bottom: 0;
+
+ .ant-table-header-column {
+ display: block;
+ }
+ }
+
+ .ant-input-search {
+ font-weight: normal;
+
+ .ant-input-suffix .anticon {
+ cursor: auto;
+ }
+ }
+
+ // optimize room for th content
+ &.ant-table-column-has-actions.ant-table-column-has-sorters {
+ padding-right: 3px;
+ }
+
+ .table-visualization-heading {
+ display: inline-block;
+ max-width: 200px;
+ vertical-align: middle;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+
+ &[data-sort-column-index]:before {
+ @size: 12px;
+
+ content: attr(data-sort-column-index);
+ display: inline-block;
+ vertical-align: middle;
+ min-width: @size;
+ height: @size;
+ font-size: @size * 3/4;
+ border-radius: @size / 2;
+ background: #c0c0c0;
+ text-align: center;
+ line-height: @size;
+ color: #fff;
+ padding: 0 @size * 1/4;
+ margin: 0 5px 0 0;
+ }
+ }
+ }
+ }
+ }
+
+ /* START table x scroll */
+ .dashboard-widget-wrapper:not(.widget-auto-height-enabled) &,
+ .query-fixed-layout & {
+ position: absolute;
+ left: 0;
+ top: 0;
+ width: 100%;
+ height: 100%;
+
+ & div {
+ height: inherit;
+ }
+
+ .ant-spin-container {
+ display: flex;
+ flex-direction: column;
+
+ .ant-table {
+ flex-grow: 1;
+ }
+ }
+ }
+ /* END */
+}
+
+.table-visualization-search-info-content {
+ max-width: 400px;
+}
+
+.table-visualization-search-info-icon {
+ margin: 0 5px 0 0;
+
+ &:not(:hover):not(:active) {
+ color: @text-color-secondary;
+ }
+}
diff --git a/viz-lib/src/visualizations/table/utils.tsx b/viz-lib/src/visualizations/table/utils.tsx
new file mode 100644
index 000000000..298cdb7f9
--- /dev/null
+++ b/viz-lib/src/visualizations/table/utils.tsx
@@ -0,0 +1,194 @@
+import { isNil, map, get, filter, each, sortBy, some, findIndex, toString } from "lodash";
+import React from "react";
+import cx from "classnames";
+import Tooltip from "antd/lib/tooltip";
+import ColumnTypes from "./columns";
+
+function nextOrderByDirection(direction: any) {
+ switch (direction) {
+ case "ascend":
+ return "descend";
+ case "descend":
+ return null;
+ default:
+ return "ascend";
+ }
+}
+
+function toggleOrderBy(columnName: any, orderBy = [], multiColumnSort = false) {
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'name' does not exist on type 'never'.
+ const index = findIndex(orderBy, i => i.name === columnName);
+ const item = { name: columnName, direction: "ascend" };
+ if (index >= 0) {
+ // @ts-expect-error ts-migrate(2322) FIXME: Type 'string | null' is not assignable to type 'st... Remove this comment to see the full error message
+ item.direction = nextOrderByDirection(orderBy[index].direction);
+ }
+
+ if (multiColumnSort) {
+ if (!item.direction) {
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'name' does not exist on type 'never'.
+ return filter(orderBy, i => i.name !== columnName);
+ }
+ if (index >= 0) {
+ // @ts-expect-error ts-migrate(2322) FIXME: Type '{ name: any; direction: string; }' is not as... Remove this comment to see the full error message
+ orderBy[index] = item;
+ } else {
+ // @ts-expect-error ts-migrate(2345) FIXME: Argument of type '{ name: any; direction: string; ... Remove this comment to see the full error message
+ orderBy.push(item);
+ }
+ return [...orderBy];
+ }
+ return item.direction ? [item] : [];
+}
+
+function getOrderByInfo(orderBy: any) {
+ const result = {};
+ each(orderBy, ({ name, direction }, index) => {
+ // @ts-expect-error ts-migrate(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message
+ result[name] = { direction, index: index + 1 };
+ });
+ return result;
+}
+
+export function prepareColumns(columns: any, searchInput: any, orderBy: any, onOrderByChange: any) {
+ columns = filter(columns, "visible");
+ columns = sortBy(columns, "order");
+
+ const isMultiColumnSort = orderBy.length > 1;
+ const orderByInfo = getOrderByInfo(orderBy);
+
+ let tableColumns = map(columns, column => {
+ // @ts-expect-error ts-migrate(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message
+ const isAscend = orderByInfo[column.name] && orderByInfo[column.name].direction === "ascend";
+ // @ts-expect-error ts-migrate(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message
+ const isDescend = orderByInfo[column.name] && orderByInfo[column.name].direction === "descend";
+
+ // @ts-expect-error ts-migrate(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message
+ const sortColumnIndex = isMultiColumnSort && orderByInfo[column.name] ? orderByInfo[column.name].index : null;
+
+ const result = {
+ key: column.name,
+ dataIndex: `record[${JSON.stringify(column.name)}]`,
+ align: column.alignContent,
+ sorter: { multiple: 1 }, // using { multiple: 1 } to allow built-in multi-column sort arrows
+ sortOrder: get(orderByInfo, [column.name, "direction"], null),
+ title: (
+
+ {column.description && (
+
+
+
+
+
+
+
+ )}
+
+
+ {column.title}
+
+
+
+ ),
+ onHeaderCell: () => ({
+ className: cx({
+ "table-visualization-column-is-sorted": isAscend || isDescend,
+ }),
+ onClick: (event: any) => onOrderByChange(toggleOrderBy(column.name, orderBy, event.shiftKey)),
+ }),
+ };
+
+ // @ts-expect-error ts-migrate(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message
+ const initColumn = ColumnTypes[column.displayAs];
+ const Component = initColumn(column);
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'render' does not exist on type '{ key: a... Remove this comment to see the full error message
+ result.render = (unused: any, row: any) => ({
+ children: ,
+ props: { className: `display-as-${column.displayAs}` },
+ });
+
+ return result;
+ });
+
+ tableColumns.push({
+ key: "###Redash::Visualizations::Table::Spacer###",
+ // @ts-expect-error ts-migrate(2322) FIXME: Type 'null' is not assignable to type 'string'.
+ dataIndex: null,
+ // @ts-expect-error ts-migrate(2322) FIXME: Type 'string' is not assignable to type 'Element'.
+ title: "",
+ className: "table-visualization-spacer",
+ render: () => "",
+ // @ts-expect-error ts-migrate(2741) FIXME: Property 'onClick' is missing in type '{ className... Remove this comment to see the full error message
+ onHeaderCell: () => ({ className: "table-visualization-spacer" }),
+ });
+
+ if (searchInput) {
+ // Add searchInput as the ColumnGroup for all table columns
+ tableColumns = [
+ {
+ key: "table-search",
+ title: searchInput,
+ // @ts-expect-error ts-migrate(2741) FIXME: Property 'onClick' is missing in type '{ className... Remove this comment to see the full error message
+ onHeaderCell: () => ({ className: "table-visualization-search" }),
+ children: tableColumns,
+ },
+ ];
+ }
+
+ return tableColumns;
+}
+
+export function initRows(rows: any) {
+ return map(rows, (record, index) => ({ key: `record${index}`, record }));
+}
+
+export function filterRows(rows: any, searchTerm: any, searchColumns: any) {
+ if (searchTerm !== "" && searchColumns.length > 0) {
+ searchTerm = searchTerm.toUpperCase();
+ const matchFields = map(searchColumns, column => {
+ // @ts-expect-error ts-migrate(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message
+ const initColumn = ColumnTypes[column.displayAs];
+ const { prepareData } = initColumn(column);
+ return (row: any) => {
+ const { text } = prepareData(row);
+ return (
+ toString(text)
+ .toUpperCase()
+ .indexOf(searchTerm) >= 0
+ );
+ };
+ });
+
+ return filter(rows, row => some(matchFields, match => match(row.record)));
+ }
+ return rows;
+}
+
+export function sortRows(rows: any, orderBy: any) {
+ if (orderBy.length === 0 || rows.length === 0) {
+ return rows;
+ }
+
+ const directions = { ascend: 1, descend: -1 };
+
+ // Create a copy of array before sorting, because .sort() will modify original array
+ return [...rows].sort((a, b) => {
+ let va;
+ let vb;
+ for (let i = 0; i < orderBy.length; i += 1) {
+ va = a.record[orderBy[i].name];
+ vb = b.record[orderBy[i].name];
+ if (isNil(va) || va < vb) {
+ // if a < b - we should return -1, but take in account direction
+ // @ts-expect-error ts-migrate(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message
+ return -1 * directions[orderBy[i].direction];
+ }
+ if (va > vb || isNil(vb)) {
+ // if a > b - we should return 1, but take in account direction
+ // @ts-expect-error ts-migrate(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message
+ return 1 * directions[orderBy[i].direction];
+ }
+ }
+ return 0;
+ });
+}
diff --git a/viz-lib/src/visualizations/variables.less b/viz-lib/src/visualizations/variables.less
new file mode 100644
index 000000000..f34ba53f1
--- /dev/null
+++ b/viz-lib/src/visualizations/variables.less
@@ -0,0 +1,35 @@
+/* --------------------------------------------------------
+ Colors
+-----------------------------------------------------------*/
+@black: #000;
+@blue: #2196f3;
+@green: #4caf50;
+@orange: #ff9800;
+@visualizations-gray: rgba(102, 136, 153, 1);
+
+/* --------------------------------------------------------
+ Font
+-----------------------------------------------------------*/
+@font-family-monospace: Menlo, Monaco, Consolas, "Courier New", monospace;
+@visualizations-font: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell,
+ "Helvetica Neue", sans-serif;
+
+/* --------------------------------------------------------
+ Borders
+-----------------------------------------------------------*/
+@border-width-base: 1px;
+@border-style-base: solid;
+@border-color-split: hsv(0, 0, 91%);
+
+/* --------------------------------------------------------
+ Typography
+-----------------------------------------------------------*/
+@text-color: #595959;
+@text-muted: #828282;
+@text-color-secondary: fade(@black, 45%);
+
+/* --------------------------------------------------------
+ Table
+-----------------------------------------------------------*/
+@table-border-color: #f0f0f0;
+@table-header-color: #333;
diff --git a/viz-lib/src/visualizations/visualizationsSettings.tsx b/viz-lib/src/visualizations/visualizationsSettings.tsx
new file mode 100644
index 000000000..c3ded5b40
--- /dev/null
+++ b/viz-lib/src/visualizations/visualizationsSettings.tsx
@@ -0,0 +1,54 @@
+import React from "react";
+import { extend } from "lodash";
+import Tooltip from "antd/lib/tooltip";
+
+type HelpTriggerProps = {
+ title?: React.ReactNode;
+ href: string;
+ className?: string;
+ children?: React.ReactNode;
+};
+
+function HelpTrigger({ title, href, className, children }: HelpTriggerProps) {
+ return (
+
+ {title}
+
+
+ }>
+
+ {children}
+
+
+ );
+}
+
+HelpTrigger.defaultValues = {
+ title: null,
+ className: null,
+ children: null,
+};
+
+function Link(props: any) {
+ return ;
+}
+
+export const visualizationsSettings = {
+ HelpTriggerComponent: HelpTrigger,
+ LinkComponent: Link,
+ dateFormat: "DD/MM/YYYY",
+ dateTimeFormat: "DD/MM/YYYY HH:mm",
+ integerFormat: "0,0",
+ floatFormat: "0,0.00",
+ booleanValues: ["false", "true"],
+ tableCellMaxJSONSize: 50000,
+ allowCustomJSVisualizations: false,
+ hidePlotlyModeBar: false,
+ choroplethAvailableMaps: {},
+};
+
+export function updateVisualizationsSettings(options: any) {
+ extend(visualizationsSettings, options);
+}
diff --git a/viz-lib/src/visualizations/word-cloud/Editor.tsx b/viz-lib/src/visualizations/word-cloud/Editor.tsx
new file mode 100644
index 000000000..1c3e22994
--- /dev/null
+++ b/viz-lib/src/visualizations/word-cloud/Editor.tsx
@@ -0,0 +1,109 @@
+import { map, merge } from "lodash";
+import React from "react";
+import * as Grid from "antd/lib/grid";
+import { Section, Select, InputNumber, ControlLabel } from "@/components/visualizations/editor";
+import { EditorPropTypes } from "@/visualizations/prop-types";
+
+export default function Editor({ options, data, onOptionsChange }: any) {
+ const optionsChanged = (newOptions: any) => {
+ onOptionsChange(merge({}, options, newOptions));
+ };
+
+ return (
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ optionsChanged({ column })}>
+ {map(data.columns, ({ name }) => (
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message
+
+ {name}
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ ))}
+
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ optionsChanged({ frequenciesColumn })}>
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ (count word frequencies automatically)
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ {map(data.columns, ({ name }) => (
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message
+
+ {name}
+ {/* @ts-expect-error ts-migrate(2339) FIXME: Property 'Option' does not exist on type '({ class... Remove this comment to see the full error message */}
+
+ ))}
+
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ {/* @ts-expect-error ts-migrate(2322) FIXME: Type 'string' is not assignable to type 'null | un... Remove this comment to see the full error message */}
+
+ {/* @ts-expect-error ts-migrate(2322) FIXME: Type 'Element' is not assignable to type 'null | u... Remove this comment to see the full error message */}
+
+
+ optionsChanged({ wordLengthLimit: { min: value > 0 ? value : null } })}
+ />
+
+
+ optionsChanged({ wordLengthLimit: { max: value > 0 ? value : null } })}
+ />
+
+
+
+
+ {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */}
+
+ {/* @ts-expect-error ts-migrate(2322) FIXME: Type 'string' is not assignable to type 'null | un... Remove this comment to see the full error message */}
+
+ {/* @ts-expect-error ts-migrate(2322) FIXME: Type 'Element' is not assignable to type 'null | u... Remove this comment to see the full error message */}
+
+
+ optionsChanged({ wordCountLimit: { min: value > 0 ? value : null } })}
+ />
+
+
+ optionsChanged({ wordCountLimit: { max: value > 0 ? value : null } })}
+ />
+
+
+
+
+
+ );
+}
+
+Editor.propTypes = EditorPropTypes;
diff --git a/viz-lib/src/visualizations/word-cloud/Renderer.tsx b/viz-lib/src/visualizations/word-cloud/Renderer.tsx
new file mode 100644
index 000000000..5b35a7934
--- /dev/null
+++ b/viz-lib/src/visualizations/word-cloud/Renderer.tsx
@@ -0,0 +1,186 @@
+import d3 from "d3";
+import cloud from "d3-cloud";
+import { each, filter, map, min, max, sortBy, toString } from "lodash";
+import React, { useMemo, useState, useEffect } from "react";
+import resizeObserver from "@/services/resizeObserver";
+import { RendererPropTypes } from "@/visualizations/prop-types";
+
+import "./renderer.less";
+
+function computeWordFrequencies(rows: any, column: any) {
+ const result = {};
+
+ each(rows, row => {
+ const wordsList = toString(row[column]).split(/\s/g);
+ each(wordsList, d => {
+ // @ts-expect-error ts-migrate(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message
+ result[d] = (result[d] || 0) + 1;
+ });
+ });
+
+ return result;
+}
+
+function getWordsWithFrequencies(rows: any, wordColumn: any, frequencyColumn: any) {
+ const result = {};
+
+ each(rows, row => {
+ const count = parseFloat(row[frequencyColumn]);
+ if (Number.isFinite(count) && count > 0) {
+ const word = toString(row[wordColumn]);
+ // @ts-expect-error ts-migrate(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message
+ result[word] = count;
+ }
+ });
+
+ return result;
+}
+
+function applyLimitsToWords(words: any, { wordLength, wordCount }: any) {
+ wordLength.min = Number.isFinite(wordLength.min) ? wordLength.min : null;
+ wordLength.max = Number.isFinite(wordLength.max) ? wordLength.max : null;
+
+ wordCount.min = Number.isFinite(wordCount.min) ? wordCount.min : null;
+ wordCount.max = Number.isFinite(wordCount.max) ? wordCount.max : null;
+
+ return filter(words, ({ text, count }) => {
+ const wordLengthFits =
+ (!wordLength.min || text.length >= wordLength.min) && (!wordLength.max || text.length <= wordLength.max);
+ const wordCountFits = (!wordCount.min || count >= wordCount.min) && (!wordCount.max || count <= wordCount.max);
+ return wordLengthFits && wordCountFits;
+ });
+}
+
+function prepareWords(rows: any, options: any) {
+ let result: any = [];
+
+ if (options.column) {
+ if (options.frequenciesColumn) {
+ result = getWordsWithFrequencies(rows, options.column, options.frequenciesColumn);
+ } else {
+ result = computeWordFrequencies(rows, options.column);
+ }
+ result = sortBy(
+ map(result, (count, text) => ({ text, count })),
+ [({ count }) => -count, ({ text }) => -text.length] // "count" desc, length("text") desc
+ );
+ }
+
+ // Add additional attributes
+ const counts = map(result, item => item.count);
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'scale' does not exist on type 'typeof im... Remove this comment to see the full error message
+ const wordSize = d3.scale
+ .linear()
+ .domain([min(counts), max(counts)])
+ .range([10, 100]); // min/max word size
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'scale' does not exist on type 'typeof im... Remove this comment to see the full error message
+ const color = d3.scale.category20();
+
+ each(result, (item, index) => {
+ item.size = wordSize(item.count);
+ item.color = color(index);
+ // @ts-expect-error ts-migrate(2362) FIXME: The left-hand side of an arithmetic operation must... Remove this comment to see the full error message
+ item.angle = (index % 2) * 90; // make it stable between renderings
+ });
+
+ return applyLimitsToWords(result, {
+ wordLength: options.wordLengthLimit,
+ wordCount: options.wordCountLimit,
+ });
+}
+
+function scaleElement(node: any, container: any) {
+ node.style.transform = null;
+ const { width: nodeWidth, height: nodeHeight } = node.getBoundingClientRect();
+ const { width: containerWidth, height: containerHeight } = container.getBoundingClientRect();
+
+ const scaleX = containerWidth / nodeWidth;
+ const scaleY = containerHeight / nodeHeight;
+
+ node.style.transform = `scale(${Math.min(scaleX, scaleY)})`;
+}
+
+function createLayout() {
+ const fontFamily = window.getComputedStyle(document.body).fontFamily;
+
+ return (
+ // @ts-expect-error ts-migrate(2769) FIXME: No overload matches this call.
+ cloud()
+ // make the area large enough to contain even very long words; word cloud will be placed in the center of the area
+ // TODO: dimensions probably should be larger, but `d3-cloud` has some performance issues related to these values
+ .size([5000, 5000])
+ .padding(3)
+ .font(fontFamily)
+ // @ts-expect-error ts-migrate(2339) FIXME: Property 'angle' does not exist on type 'Word'.
+ .rotate(d => d.angle)
+ .fontSize(d => d.size)
+ .random(() => 0.5)
+ ); // do not place words randomly - use compact layout
+}
+
+function render(container: any, words: any) {
+ container = d3.select(container);
+ container.selectAll("*").remove();
+
+ const svg = container.append("svg");
+ const g = svg.append("g");
+ g.selectAll("text")
+ .data(words)
+ .enter()
+ .append("text")
+ .style("font-size", (d: any) => `${d.size}px`)
+ .style("font-family", (d: any) => d.font)
+ .style("fill", (d: any) => d.color)
+ .attr("text-anchor", "middle")
+ .attr("transform", (d: any) => `translate(${[d.x, d.y]}) rotate(${d.rotate})`)
+ .text((d: any) => d.text);
+
+ const svgBounds = svg.node().getBoundingClientRect();
+ const gBounds = g.node().getBoundingClientRect();
+
+ svg.attr("width", Math.ceil(gBounds.width)).attr("height", Math.ceil(gBounds.height));
+ g.attr("transform", `translate(${svgBounds.left - gBounds.left},${svgBounds.top - gBounds.top})`);
+
+ scaleElement(svg.node(), container.node());
+}
+
+export default function Renderer({ data, options }: any) {
+ const [container, setContainer] = useState(null);
+ const [words, setWords] = useState([]);
+ const layout = useMemo(createLayout, []);
+
+ // @ts-expect-error ts-migrate(2345) FIXME: Argument of type '() => () => layout.Cloud {
+ layout
+ .words(prepareWords(data.rows, options))
+ // @ts-expect-error ts-migrate(2345) FIXME: Argument of type 'Word[]' is not assignable to par... Remove this comment to see the full error message
+ .on("end", w => setWords(w))
+ .start();
+ // @ts-expect-error ts-migrate(2769) FIXME: No overload matches this call.
+ return () => layout.on("end", null).stop();
+ }, [layout, data, options, setWords]);
+
+ useEffect(() => {
+ if (container) {
+ render(container, words);
+ }
+ }, [container, words]);
+
+ useEffect(() => {
+ if (container) {
+ const unwatch = resizeObserver(container, () => {
+ // @ts-expect-error ts-migrate(2531) FIXME: Object is possibly 'null'.
+ const svg = container.querySelector("svg");
+ if (svg) {
+ scaleElement(svg, container);
+ }
+ });
+ return unwatch;
+ }
+ }, [container]);
+
+ // @ts-expect-error ts-migrate(2322) FIXME: Type 'Dispatch>' is not assig... Remove this comment to see the full error message
+ return
;
+}
+
+Renderer.propTypes = RendererPropTypes;
diff --git a/viz-lib/src/visualizations/word-cloud/index.ts b/viz-lib/src/visualizations/word-cloud/index.ts
new file mode 100644
index 000000000..933096155
--- /dev/null
+++ b/viz-lib/src/visualizations/word-cloud/index.ts
@@ -0,0 +1,21 @@
+import { merge } from "lodash";
+
+import Renderer from "./Renderer";
+import Editor from "./Editor";
+
+const DEFAULT_OPTIONS = {
+ column: "",
+ frequenciesColumn: "",
+ wordLengthLimit: { min: null, max: null },
+ wordCountLimit: { min: null, max: null },
+};
+
+export default {
+ type: "WORD_CLOUD",
+ name: "Word Cloud",
+ getOptions: (options: any) => merge({}, DEFAULT_OPTIONS, options),
+ Renderer,
+ Editor,
+
+ defaultRows: 8,
+};
diff --git a/viz-lib/src/visualizations/word-cloud/renderer.less b/viz-lib/src/visualizations/word-cloud/renderer.less
new file mode 100644
index 000000000..aee6afcce
--- /dev/null
+++ b/viz-lib/src/visualizations/word-cloud/renderer.less
@@ -0,0 +1,12 @@
+.word-cloud-visualization-container {
+ overflow: hidden;
+ height: 400px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+
+ svg {
+ transform-origin: center center;
+ flex: 0 0 auto;
+ }
+}
diff --git a/viz-lib/tsconfig.json b/viz-lib/tsconfig.json
new file mode 100644
index 000000000..a465ac7aa
--- /dev/null
+++ b/viz-lib/tsconfig.json
@@ -0,0 +1,22 @@
+{
+ "compilerOptions": {
+ "target": "es2019",
+ "module": "commonjs",
+ "moduleResolution": "node",
+ "lib": ["dom", "dom.iterable", "esnext"],
+ "jsx": "react",
+ "types": ["node", "jest"],
+ "outDir": "lib",
+ "declaration": true,
+ "strict": true,
+ "esModuleInterop": true,
+ "allowSyntheticDefaultImports": true,
+ "skipLibCheck": true,
+ "forceConsistentCasingInFileNames": true,
+ "baseUrl": "./",
+ "paths": {
+ "@/*": ["./src/*"]
+ }
+ },
+ "include": ["src/**/*"]
+}
diff --git a/viz-lib/webpack.config.js b/viz-lib/webpack.config.js
new file mode 100644
index 000000000..283036343
--- /dev/null
+++ b/viz-lib/webpack.config.js
@@ -0,0 +1,65 @@
+const LessPluginAutoPrefix = require("less-plugin-autoprefix");
+const path = require("path");
+
+const isProduction = process.env.NODE_ENV === "production";
+
+module.exports = {
+ mode: isProduction ? "production" : "development",
+ entry: "./src/index.ts",
+ output: {
+ path: path.resolve(__dirname, "dist"),
+ filename: "redash-visualizations.js",
+ libraryTarget: "umd",
+ },
+ resolve: {
+ symlinks: false,
+ extensions: [".js", ".jsx", ".ts", ".tsx"],
+ },
+ module: {
+ rules: [
+ {
+ test: /\.[jt]sx?$/,
+ exclude: /node_modules/,
+ use: ["babel-loader"],
+ },
+ {
+ test: /\.css$/,
+ use: ["style-loader", "css-loader"],
+ },
+ {
+ test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
+ use: [
+ {
+ loader: "file-loader",
+ options: {
+ outputPath: "images/",
+ name: "[name].[ext]",
+ },
+ },
+ ],
+ },
+ {
+ test: /\.less$/,
+ use: [
+ "style-loader",
+ "css-loader",
+ {
+ loader: "less-loader",
+ options: {
+ plugins: [new LessPluginAutoPrefix({ browsers: ["last 3 versions"] })],
+ javascriptEnabled: true,
+ },
+ },
+ ],
+ },
+ ],
+ },
+ externals: [
+ {
+ lodash: "lodash",
+ react: "react",
+ "react-dom": "react-dom",
+ },
+ /^antd/i,
+ ],
+};
diff --git a/viz-lib/yarn.lock b/viz-lib/yarn.lock
new file mode 100644
index 000000000..549e7273b
--- /dev/null
+++ b/viz-lib/yarn.lock
@@ -0,0 +1,11383 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"3d-view@^2.0.0":
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/3d-view/-/3d-view-2.0.0.tgz#831ae942d7508c50801e3e06fafe1e8c574e17be"
+ integrity sha1-gxrpQtdQjFCAHj4G+v4ejFdOF74=
+ dependencies:
+ matrix-camera-controller "^2.1.1"
+ orbit-camera-controller "^4.0.0"
+ turntable-camera-controller "^3.0.0"
+
+"@babel/cli@^7.8.4":
+ version "7.8.4"
+ resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.8.4.tgz#505fb053721a98777b2b175323ea4f090b7d3c1c"
+ integrity sha512-XXLgAm6LBbaNxaGhMAznXXaxtCWfuv6PIDJ9Alsy9JYTOh+j2jJz+L/162kkfU1j/pTSxK1xGmlwI4pdIMkoag==
+ dependencies:
+ commander "^4.0.1"
+ convert-source-map "^1.1.0"
+ fs-readdir-recursive "^1.1.0"
+ glob "^7.0.0"
+ lodash "^4.17.13"
+ make-dir "^2.1.0"
+ slash "^2.0.0"
+ source-map "^0.5.0"
+ optionalDependencies:
+ chokidar "^2.1.8"
+
+"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e"
+ integrity sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==
+ dependencies:
+ "@babel/highlight" "^7.8.3"
+
+"@babel/code-frame@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a"
+ integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==
+ dependencies:
+ "@babel/highlight" "^7.10.4"
+
+"@babel/compat-data@^7.8.6", "@babel/compat-data@^7.9.0":
+ version "7.9.0"
+ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.9.0.tgz#04815556fc90b0c174abd2c0c1bb966faa036a6c"
+ integrity sha512-zeFQrr+284Ekvd9e7KAX954LkapWiOmQtsfHirhxqfdlX6MEC32iRE+pqUGlYIBchdevaCwvzxWGSy/YBNI85g==
+ dependencies:
+ browserslist "^4.9.1"
+ invariant "^2.2.4"
+ semver "^5.5.0"
+
+"@babel/core@^7.1.0", "@babel/core@^7.1.6", "@babel/core@^7.7.5", "@babel/core@^7.9.0":
+ version "7.9.0"
+ resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.9.0.tgz#ac977b538b77e132ff706f3b8a4dbad09c03c56e"
+ integrity sha512-kWc7L0fw1xwvI0zi8OKVBuxRVefwGOrKSQMvrQ3dW+bIIavBY3/NpXmpjMy7bQnLgwgzWQZ8TlM57YHpHNHz4w==
+ dependencies:
+ "@babel/code-frame" "^7.8.3"
+ "@babel/generator" "^7.9.0"
+ "@babel/helper-module-transforms" "^7.9.0"
+ "@babel/helpers" "^7.9.0"
+ "@babel/parser" "^7.9.0"
+ "@babel/template" "^7.8.6"
+ "@babel/traverse" "^7.9.0"
+ "@babel/types" "^7.9.0"
+ convert-source-map "^1.7.0"
+ debug "^4.1.0"
+ gensync "^1.0.0-beta.1"
+ json5 "^2.1.2"
+ lodash "^4.17.13"
+ resolve "^1.3.2"
+ semver "^5.4.1"
+ source-map "^0.5.0"
+
+"@babel/generator@^7.12.5":
+ version "7.12.5"
+ resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.12.5.tgz#a2c50de5c8b6d708ab95be5e6053936c1884a4de"
+ integrity sha512-m16TQQJ8hPt7E+OS/XVQg/7U184MLXtvuGbCdA7na61vha+ImkyyNM/9DDA0unYCVZn3ZOhng+qz48/KBOT96A==
+ dependencies:
+ "@babel/types" "^7.12.5"
+ jsesc "^2.5.1"
+ source-map "^0.5.0"
+
+"@babel/generator@^7.4.0", "@babel/generator@^7.9.0":
+ version "7.9.4"
+ resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.9.4.tgz#12441e90c3b3c4159cdecf312075bf1a8ce2dbce"
+ integrity sha512-rjP8ahaDy/ouhrvCoU1E5mqaitWrxwuNGU+dy1EpaoK48jZay4MdkskKGIMHLZNewg8sAsqpGSREJwP0zH3YQA==
+ dependencies:
+ "@babel/types" "^7.9.0"
+ jsesc "^2.5.1"
+ lodash "^4.17.13"
+ source-map "^0.5.0"
+
+"@babel/helper-annotate-as-pure@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.8.3.tgz#60bc0bc657f63a0924ff9a4b4a0b24a13cf4deee"
+ integrity sha512-6o+mJrZBxOoEX77Ezv9zwW7WV8DdluouRKNY/IR5u/YTMuKHgugHOzYWlYvYLpLA9nPsQCAAASpCIbjI9Mv+Uw==
+ dependencies:
+ "@babel/types" "^7.8.3"
+
+"@babel/helper-builder-binary-assignment-operator-visitor@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.8.3.tgz#c84097a427a061ac56a1c30ebf54b7b22d241503"
+ integrity sha512-5eFOm2SyFPK4Rh3XMMRDjN7lBH0orh3ss0g3rTYZnBQ+r6YPj7lgDyCvPphynHvUrobJmeMignBr6Acw9mAPlw==
+ dependencies:
+ "@babel/helper-explode-assignable-expression" "^7.8.3"
+ "@babel/types" "^7.8.3"
+
+"@babel/helper-builder-react-jsx-experimental@^7.9.0":
+ version "7.9.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.9.0.tgz#066d80262ade488f9c1b1823ce5db88a4cedaa43"
+ integrity sha512-3xJEiyuYU4Q/Ar9BsHisgdxZsRlsShMe90URZ0e6przL26CCs8NJbDoxH94kKT17PcxlMhsCAwZd90evCo26VQ==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.8.3"
+ "@babel/helper-module-imports" "^7.8.3"
+ "@babel/types" "^7.9.0"
+
+"@babel/helper-builder-react-jsx@^7.9.0":
+ version "7.9.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.9.0.tgz#16bf391990b57732700a3278d4d9a81231ea8d32"
+ integrity sha512-weiIo4gaoGgnhff54GQ3P5wsUQmnSwpkvU0r6ZHq6TzoSzKy4JxHEgnxNytaKbov2a9z/CVNyzliuCOUPEX3Jw==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.8.3"
+ "@babel/types" "^7.9.0"
+
+"@babel/helper-compilation-targets@^7.8.7":
+ version "7.8.7"
+ resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.8.7.tgz#dac1eea159c0e4bd46e309b5a1b04a66b53c1dde"
+ integrity sha512-4mWm8DCK2LugIS+p1yArqvG1Pf162upsIsjE7cNBjez+NjliQpVhj20obE520nao0o14DaTnFJv+Fw5a0JpoUw==
+ dependencies:
+ "@babel/compat-data" "^7.8.6"
+ browserslist "^4.9.1"
+ invariant "^2.2.4"
+ levenary "^1.1.1"
+ semver "^5.5.0"
+
+"@babel/helper-create-class-features-plugin@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz#3c45998f431edd4a9214c5f1d3ad1448a6137f6e"
+ integrity sha512-hkL++rWeta/OVOBTRJc9a5Azh5mt5WgZUGAKMD8JM141YsE08K//bp1unBBieO6rUKkIPyUE0USQ30jAy3Sk1w==
+ dependencies:
+ "@babel/helper-function-name" "^7.10.4"
+ "@babel/helper-member-expression-to-functions" "^7.12.1"
+ "@babel/helper-optimise-call-expression" "^7.10.4"
+ "@babel/helper-replace-supers" "^7.12.1"
+ "@babel/helper-split-export-declaration" "^7.10.4"
+
+"@babel/helper-create-class-features-plugin@^7.8.3":
+ version "7.8.6"
+ resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.8.6.tgz#243a5b46e2f8f0f674dc1387631eb6b28b851de0"
+ integrity sha512-klTBDdsr+VFFqaDHm5rR69OpEQtO2Qv8ECxHS1mNhJJvaHArR6a1xTf5K/eZW7eZpJbhCx3NW1Yt/sKsLXLblg==
+ dependencies:
+ "@babel/helper-function-name" "^7.8.3"
+ "@babel/helper-member-expression-to-functions" "^7.8.3"
+ "@babel/helper-optimise-call-expression" "^7.8.3"
+ "@babel/helper-plugin-utils" "^7.8.3"
+ "@babel/helper-replace-supers" "^7.8.6"
+ "@babel/helper-split-export-declaration" "^7.8.3"
+
+"@babel/helper-create-regexp-features-plugin@^7.8.3", "@babel/helper-create-regexp-features-plugin@^7.8.8":
+ version "7.8.8"
+ resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.8.8.tgz#5d84180b588f560b7864efaeea89243e58312087"
+ integrity sha512-LYVPdwkrQEiX9+1R29Ld/wTrmQu1SSKYnuOk3g0CkcZMA1p0gsNxJFj/3gBdaJ7Cg0Fnek5z0DsMULePP7Lrqg==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.8.3"
+ "@babel/helper-regex" "^7.8.3"
+ regexpu-core "^4.7.0"
+
+"@babel/helper-define-map@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.8.3.tgz#a0655cad5451c3760b726eba875f1cd8faa02c15"
+ integrity sha512-PoeBYtxoZGtct3md6xZOCWPcKuMuk3IHhgxsRRNtnNShebf4C8YonTSblsK4tvDbm+eJAw2HAPOfCr+Q/YRG/g==
+ dependencies:
+ "@babel/helper-function-name" "^7.8.3"
+ "@babel/types" "^7.8.3"
+ lodash "^4.17.13"
+
+"@babel/helper-explode-assignable-expression@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.8.3.tgz#a728dc5b4e89e30fc2dfc7d04fa28a930653f982"
+ integrity sha512-N+8eW86/Kj147bO9G2uclsg5pwfs/fqqY5rwgIL7eTBklgXjcOJ3btzS5iM6AitJcftnY7pm2lGsrJVYLGjzIw==
+ dependencies:
+ "@babel/traverse" "^7.8.3"
+ "@babel/types" "^7.8.3"
+
+"@babel/helper-function-name@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz#d2d3b20c59ad8c47112fa7d2a94bc09d5ef82f1a"
+ integrity sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==
+ dependencies:
+ "@babel/helper-get-function-arity" "^7.10.4"
+ "@babel/template" "^7.10.4"
+ "@babel/types" "^7.10.4"
+
+"@babel/helper-function-name@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz#eeeb665a01b1f11068e9fb86ad56a1cb1a824cca"
+ integrity sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==
+ dependencies:
+ "@babel/helper-get-function-arity" "^7.8.3"
+ "@babel/template" "^7.8.3"
+ "@babel/types" "^7.8.3"
+
+"@babel/helper-get-function-arity@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz#98c1cbea0e2332f33f9a4661b8ce1505b2c19ba2"
+ integrity sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==
+ dependencies:
+ "@babel/types" "^7.10.4"
+
+"@babel/helper-get-function-arity@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz#b894b947bd004381ce63ea1db9f08547e920abd5"
+ integrity sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==
+ dependencies:
+ "@babel/types" "^7.8.3"
+
+"@babel/helper-hoist-variables@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.8.3.tgz#1dbe9b6b55d78c9b4183fc8cdc6e30ceb83b7134"
+ integrity sha512-ky1JLOjcDUtSc+xkt0xhYff7Z6ILTAHKmZLHPxAhOP0Nd77O+3nCsd6uSVYur6nJnCI029CrNbYlc0LoPfAPQg==
+ dependencies:
+ "@babel/types" "^7.8.3"
+
+"@babel/helper-member-expression-to-functions@^7.12.1":
+ version "7.12.7"
+ resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz#aa77bd0396ec8114e5e30787efa78599d874a855"
+ integrity sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw==
+ dependencies:
+ "@babel/types" "^7.12.7"
+
+"@babel/helper-member-expression-to-functions@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz#659b710498ea6c1d9907e0c73f206eee7dadc24c"
+ integrity sha512-fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA==
+ dependencies:
+ "@babel/types" "^7.8.3"
+
+"@babel/helper-module-imports@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz#7fe39589b39c016331b6b8c3f441e8f0b1419498"
+ integrity sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg==
+ dependencies:
+ "@babel/types" "^7.8.3"
+
+"@babel/helper-module-transforms@^7.9.0":
+ version "7.9.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz#43b34dfe15961918707d247327431388e9fe96e5"
+ integrity sha512-0FvKyu0gpPfIQ8EkxlrAydOWROdHpBmiCiRwLkUiBGhCUPRRbVD2/tm3sFr/c/GWFrQ/ffutGUAnx7V0FzT2wA==
+ dependencies:
+ "@babel/helper-module-imports" "^7.8.3"
+ "@babel/helper-replace-supers" "^7.8.6"
+ "@babel/helper-simple-access" "^7.8.3"
+ "@babel/helper-split-export-declaration" "^7.8.3"
+ "@babel/template" "^7.8.6"
+ "@babel/types" "^7.9.0"
+ lodash "^4.17.13"
+
+"@babel/helper-optimise-call-expression@^7.10.4":
+ version "7.12.7"
+ resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.7.tgz#7f94ae5e08721a49467346aa04fd22f750033b9c"
+ integrity sha512-I5xc9oSJ2h59OwyUqjv95HRyzxj53DAubUERgQMrpcCEYQyToeHA+NEcUEsVWB4j53RDeskeBJ0SgRAYHDBckw==
+ dependencies:
+ "@babel/types" "^7.12.7"
+
+"@babel/helper-optimise-call-expression@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz#7ed071813d09c75298ef4f208956006b6111ecb9"
+ integrity sha512-Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ==
+ dependencies:
+ "@babel/types" "^7.8.3"
+
+"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz#9ea293be19babc0f52ff8ca88b34c3611b208670"
+ integrity sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ==
+
+"@babel/helper-plugin-utils@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375"
+ integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==
+
+"@babel/helper-regex@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.8.3.tgz#139772607d51b93f23effe72105b319d2a4c6965"
+ integrity sha512-BWt0QtYv/cg/NecOAZMdcn/waj/5P26DR4mVLXfFtDokSR6fyuG0Pj+e2FqtSME+MqED1khnSMulkmGl8qWiUQ==
+ dependencies:
+ lodash "^4.17.13"
+
+"@babel/helper-remap-async-to-generator@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.8.3.tgz#273c600d8b9bf5006142c1e35887d555c12edd86"
+ integrity sha512-kgwDmw4fCg7AVgS4DukQR/roGp+jP+XluJE5hsRZwxCYGg+Rv9wSGErDWhlI90FODdYfd4xG4AQRiMDjjN0GzA==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.8.3"
+ "@babel/helper-wrap-function" "^7.8.3"
+ "@babel/template" "^7.8.3"
+ "@babel/traverse" "^7.8.3"
+ "@babel/types" "^7.8.3"
+
+"@babel/helper-replace-supers@^7.12.1":
+ version "7.12.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.12.5.tgz#f009a17543bbbbce16b06206ae73b63d3fca68d9"
+ integrity sha512-5YILoed0ZyIpF4gKcpZitEnXEJ9UoDRki1Ey6xz46rxOzfNMAhVIJMoune1hmPVxh40LRv1+oafz7UsWX+vyWA==
+ dependencies:
+ "@babel/helper-member-expression-to-functions" "^7.12.1"
+ "@babel/helper-optimise-call-expression" "^7.10.4"
+ "@babel/traverse" "^7.12.5"
+ "@babel/types" "^7.12.5"
+
+"@babel/helper-replace-supers@^7.8.3", "@babel/helper-replace-supers@^7.8.6":
+ version "7.8.6"
+ resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.8.6.tgz#5ada744fd5ad73203bf1d67459a27dcba67effc8"
+ integrity sha512-PeMArdA4Sv/Wf4zXwBKPqVj7n9UF/xg6slNRtZW84FM7JpE1CbG8B612FyM4cxrf4fMAMGO0kR7voy1ForHHFA==
+ dependencies:
+ "@babel/helper-member-expression-to-functions" "^7.8.3"
+ "@babel/helper-optimise-call-expression" "^7.8.3"
+ "@babel/traverse" "^7.8.6"
+ "@babel/types" "^7.8.6"
+
+"@babel/helper-simple-access@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz#7f8109928b4dab4654076986af575231deb639ae"
+ integrity sha512-VNGUDjx5cCWg4vvCTR8qQ7YJYZ+HBjxOgXEl7ounz+4Sn7+LMD3CFrCTEU6/qXKbA2nKg21CwhhBzO0RpRbdCw==
+ dependencies:
+ "@babel/template" "^7.8.3"
+ "@babel/types" "^7.8.3"
+
+"@babel/helper-split-export-declaration@^7.10.4", "@babel/helper-split-export-declaration@^7.11.0":
+ version "7.11.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz#f8a491244acf6a676158ac42072911ba83ad099f"
+ integrity sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==
+ dependencies:
+ "@babel/types" "^7.11.0"
+
+"@babel/helper-split-export-declaration@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz#31a9f30070f91368a7182cf05f831781065fc7a9"
+ integrity sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==
+ dependencies:
+ "@babel/types" "^7.8.3"
+
+"@babel/helper-validator-identifier@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2"
+ integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==
+
+"@babel/helper-validator-identifier@^7.9.0":
+ version "7.9.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.0.tgz#ad53562a7fc29b3b9a91bbf7d10397fd146346ed"
+ integrity sha512-6G8bQKjOh+of4PV/ThDm/rRqlU7+IGoJuofpagU5GlEl29Vv0RGqqt86ZGRV8ZuSOY3o+8yXl5y782SMcG7SHw==
+
+"@babel/helper-validator-option@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.1.tgz#175567380c3e77d60ff98a54bb015fe78f2178d9"
+ integrity sha512-YpJabsXlJVWP0USHjnC/AQDTLlZERbON577YUVO/wLpqyj6HAtVYnWaQaN0iUN+1/tWn3c+uKKXjRut5115Y2A==
+
+"@babel/helper-wrap-function@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.8.3.tgz#9dbdb2bb55ef14aaa01fe8c99b629bd5352d8610"
+ integrity sha512-LACJrbUET9cQDzb6kG7EeD7+7doC3JNvUgTEQOx2qaO1fKlzE/Bf05qs9w1oXQMmXlPO65lC3Tq9S6gZpTErEQ==
+ dependencies:
+ "@babel/helper-function-name" "^7.8.3"
+ "@babel/template" "^7.8.3"
+ "@babel/traverse" "^7.8.3"
+ "@babel/types" "^7.8.3"
+
+"@babel/helpers@^7.9.0":
+ version "7.9.2"
+ resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.9.2.tgz#b42a81a811f1e7313b88cba8adc66b3d9ae6c09f"
+ integrity sha512-JwLvzlXVPjO8eU9c/wF9/zOIN7X6h8DYf7mG4CiFRZRvZNKEF5dQ3H3V+ASkHoIB3mWhatgl5ONhyqHRI6MppA==
+ dependencies:
+ "@babel/template" "^7.8.3"
+ "@babel/traverse" "^7.9.0"
+ "@babel/types" "^7.9.0"
+
+"@babel/highlight@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143"
+ integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==
+ dependencies:
+ "@babel/helper-validator-identifier" "^7.10.4"
+ chalk "^2.0.0"
+ js-tokens "^4.0.0"
+
+"@babel/highlight@^7.8.3":
+ version "7.9.0"
+ resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.9.0.tgz#4e9b45ccb82b79607271b2979ad82c7b68163079"
+ integrity sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==
+ dependencies:
+ "@babel/helper-validator-identifier" "^7.9.0"
+ chalk "^2.0.0"
+ js-tokens "^4.0.0"
+
+"@babel/parser@^7.1.0", "@babel/parser@^7.1.6", "@babel/parser@^7.4.3", "@babel/parser@^7.8.6", "@babel/parser@^7.9.0":
+ version "7.9.4"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.9.4.tgz#68a35e6b0319bbc014465be43828300113f2f2e8"
+ integrity sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==
+
+"@babel/parser@^7.12.7":
+ version "7.12.7"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.7.tgz#fee7b39fe809d0e73e5b25eecaf5780ef3d73056"
+ integrity sha512-oWR02Ubp4xTLCAqPRiNIuMVgNO5Aif/xpXtabhzW2HWUD47XJsAB4Zd/Rg30+XeQA3juXigV7hlquOTmwqLiwg==
+
+"@babel/plugin-proposal-async-generator-functions@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.8.3.tgz#bad329c670b382589721b27540c7d288601c6e6f"
+ integrity sha512-NZ9zLv848JsV3hs8ryEh7Uaz/0KsmPLqv0+PdkDJL1cJy0K4kOCFa8zc1E3mp+RHPQcpdfb/6GovEsW4VDrOMw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+ "@babel/helper-remap-async-to-generator" "^7.8.3"
+ "@babel/plugin-syntax-async-generators" "^7.8.0"
+
+"@babel/plugin-proposal-class-properties@^7.1.0", "@babel/plugin-proposal-class-properties@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.8.3.tgz#5e06654af5cd04b608915aada9b2a6788004464e"
+ integrity sha512-EqFhbo7IosdgPgZggHaNObkmO1kNUe3slaKu54d5OWvy+p9QIKOzK1GAEpAIsZtWVtPXUHSMcT4smvDrCfY4AA==
+ dependencies:
+ "@babel/helper-create-class-features-plugin" "^7.8.3"
+ "@babel/helper-plugin-utils" "^7.8.3"
+
+"@babel/plugin-proposal-dynamic-import@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.8.3.tgz#38c4fe555744826e97e2ae930b0fb4cc07e66054"
+ integrity sha512-NyaBbyLFXFLT9FP+zk0kYlUlA8XtCUbehs67F0nnEg7KICgMc2mNkIeu9TYhKzyXMkrapZFwAhXLdnt4IYHy1w==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+ "@babel/plugin-syntax-dynamic-import" "^7.8.0"
+
+"@babel/plugin-proposal-json-strings@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.8.3.tgz#da5216b238a98b58a1e05d6852104b10f9a70d6b"
+ integrity sha512-KGhQNZ3TVCQG/MjRbAUwuH+14y9q0tpxs1nWWs3pbSleRdDro9SAMMDyye8HhY1gqZ7/NqIc8SKhya0wRDgP1Q==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+ "@babel/plugin-syntax-json-strings" "^7.8.0"
+
+"@babel/plugin-proposal-nullish-coalescing-operator@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.8.3.tgz#e4572253fdeed65cddeecfdab3f928afeb2fd5d2"
+ integrity sha512-TS9MlfzXpXKt6YYomudb/KU7nQI6/xnapG6in1uZxoxDghuSMZsPb6D2fyUwNYSAp4l1iR7QtFOjkqcRYcUsfw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+ "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0"
+
+"@babel/plugin-proposal-numeric-separator@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.8.3.tgz#5d6769409699ec9b3b68684cd8116cedff93bad8"
+ integrity sha512-jWioO1s6R/R+wEHizfaScNsAx+xKgwTLNXSh7tTC4Usj3ItsPEhYkEpU4h+lpnBwq7NBVOJXfO6cRFYcX69JUQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+ "@babel/plugin-syntax-numeric-separator" "^7.8.3"
+
+"@babel/plugin-proposal-object-rest-spread@^7.0.0", "@babel/plugin-proposal-object-rest-spread@^7.9.0":
+ version "7.9.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.9.0.tgz#a28993699fc13df165995362693962ba6b061d6f"
+ integrity sha512-UgqBv6bjq4fDb8uku9f+wcm1J7YxJ5nT7WO/jBr0cl0PLKb7t1O6RNR1kZbjgx2LQtsDI9hwoQVmn0yhXeQyow==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+ "@babel/plugin-syntax-object-rest-spread" "^7.8.0"
+
+"@babel/plugin-proposal-optional-catch-binding@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.8.3.tgz#9dee96ab1650eed88646ae9734ca167ac4a9c5c9"
+ integrity sha512-0gkX7J7E+AtAw9fcwlVQj8peP61qhdg/89D5swOkjYbkboA2CVckn3kiyum1DE0wskGb7KJJxBdyEBApDLLVdw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+ "@babel/plugin-syntax-optional-catch-binding" "^7.8.0"
+
+"@babel/plugin-proposal-optional-chaining@^7.9.0":
+ version "7.9.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.9.0.tgz#31db16b154c39d6b8a645292472b98394c292a58"
+ integrity sha512-NDn5tu3tcv4W30jNhmc2hyD5c56G6cXx4TesJubhxrJeCvuuMpttxr0OnNCqbZGhFjLrg+NIhxxC+BK5F6yS3w==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+ "@babel/plugin-syntax-optional-chaining" "^7.8.0"
+
+"@babel/plugin-proposal-unicode-property-regex@^7.4.4", "@babel/plugin-proposal-unicode-property-regex@^7.8.3":
+ version "7.8.8"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.8.8.tgz#ee3a95e90cdc04fe8cd92ec3279fa017d68a0d1d"
+ integrity sha512-EVhjVsMpbhLw9ZfHWSx2iy13Q8Z/eg8e8ccVWt23sWQK5l1UdkoLJPN5w69UA4uITGBnEZD2JOe4QOHycYKv8A==
+ dependencies:
+ "@babel/helper-create-regexp-features-plugin" "^7.8.8"
+ "@babel/helper-plugin-utils" "^7.8.3"
+
+"@babel/plugin-syntax-async-generators@^7.8.0":
+ version "7.8.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d"
+ integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-dynamic-import@^7.8.0":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3"
+ integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-flow@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.12.1.tgz#a77670d9abe6d63e8acadf4c31bb1eb5a506bbdd"
+ integrity sha512-1lBLLmtxrwpm4VKmtVFselI/P3pX+G63fAtUUt6b2Nzgao77KNDwyuRt90Mj2/9pKobtt68FdvjfqohZjg/FCA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-syntax-json-strings@^7.8.0":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a"
+ integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-jsx@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.8.3.tgz#521b06c83c40480f1e58b4fd33b92eceb1d6ea94"
+ integrity sha512-WxdW9xyLgBdefoo0Ynn3MRSkhe5tFVxxKNVdnZSh318WrG2e2jH+E9wd/++JsqcLJZPfz87njQJ8j2Upjm0M0A==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+
+"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9"
+ integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-numeric-separator@^7.8.0", "@babel/plugin-syntax-numeric-separator@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.8.3.tgz#0e3fb63e09bea1b11e96467271c8308007e7c41f"
+ integrity sha512-H7dCMAdN83PcCmqmkHB5dtp+Xa9a6LKSvA2hiFBC/5alSHxM5VgWZXFqDi0YFe8XNGT6iCa+z4V4zSt/PdZ7Dw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+
+"@babel/plugin-syntax-object-rest-spread@^7.0.0", "@babel/plugin-syntax-object-rest-spread@^7.8.0":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871"
+ integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-optional-catch-binding@^7.8.0":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1"
+ integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-optional-chaining@^7.8.0":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a"
+ integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-top-level-await@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.8.3.tgz#3acdece695e6b13aaf57fc291d1a800950c71391"
+ integrity sha512-kwj1j9lL/6Wd0hROD3b/OZZ7MSrZLqqn9RAZ5+cYYsflQ9HZBIKCUkr3+uL1MEJ1NePiUbf98jjiMQSv0NMR9g==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+
+"@babel/plugin-syntax-typescript@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.12.1.tgz#460ba9d77077653803c3dd2e673f76d66b4029e5"
+ integrity sha512-UZNEcCY+4Dp9yYRCAHrHDU+9ZXLYaY9MgBXSRLkB9WjYFRR6quJBumfVrEkUxrePPBwFcpWfNKXqVRQQtm7mMA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-transform-arrow-functions@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.8.3.tgz#82776c2ed0cd9e1a49956daeb896024c9473b8b6"
+ integrity sha512-0MRF+KC8EqH4dbuITCWwPSzsyO3HIWWlm30v8BbbpOrS1B++isGxPnnuq/IZvOX5J2D/p7DQalQm+/2PnlKGxg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+
+"@babel/plugin-transform-async-to-generator@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.8.3.tgz#4308fad0d9409d71eafb9b1a6ee35f9d64b64086"
+ integrity sha512-imt9tFLD9ogt56Dd5CI/6XgpukMwd/fLGSrix2httihVe7LOGVPhyhMh1BU5kDM7iHD08i8uUtmV2sWaBFlHVQ==
+ dependencies:
+ "@babel/helper-module-imports" "^7.8.3"
+ "@babel/helper-plugin-utils" "^7.8.3"
+ "@babel/helper-remap-async-to-generator" "^7.8.3"
+
+"@babel/plugin-transform-block-scoped-functions@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.8.3.tgz#437eec5b799b5852072084b3ae5ef66e8349e8a3"
+ integrity sha512-vo4F2OewqjbB1+yaJ7k2EJFHlTP3jR634Z9Cj9itpqNjuLXvhlVxgnjsHsdRgASR8xYDrx6onw4vW5H6We0Jmg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+
+"@babel/plugin-transform-block-scoping@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.8.3.tgz#97d35dab66857a437c166358b91d09050c868f3a"
+ integrity sha512-pGnYfm7RNRgYRi7bids5bHluENHqJhrV4bCZRwc5GamaWIIs07N4rZECcmJL6ZClwjDz1GbdMZFtPs27hTB06w==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+ lodash "^4.17.13"
+
+"@babel/plugin-transform-classes@^7.9.0":
+ version "7.9.2"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.9.2.tgz#8603fc3cc449e31fdbdbc257f67717536a11af8d"
+ integrity sha512-TC2p3bPzsfvSsqBZo0kJnuelnoK9O3welkUpqSqBQuBF6R5MN2rysopri8kNvtlGIb2jmUO7i15IooAZJjZuMQ==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.8.3"
+ "@babel/helper-define-map" "^7.8.3"
+ "@babel/helper-function-name" "^7.8.3"
+ "@babel/helper-optimise-call-expression" "^7.8.3"
+ "@babel/helper-plugin-utils" "^7.8.3"
+ "@babel/helper-replace-supers" "^7.8.6"
+ "@babel/helper-split-export-declaration" "^7.8.3"
+ globals "^11.1.0"
+
+"@babel/plugin-transform-computed-properties@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.8.3.tgz#96d0d28b7f7ce4eb5b120bb2e0e943343c86f81b"
+ integrity sha512-O5hiIpSyOGdrQZRQ2ccwtTVkgUDBBiCuK//4RJ6UfePllUTCENOzKxfh6ulckXKc0DixTFLCfb2HVkNA7aDpzA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+
+"@babel/plugin-transform-destructuring@^7.8.3":
+ version "7.8.8"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.8.8.tgz#fadb2bc8e90ccaf5658de6f8d4d22ff6272a2f4b"
+ integrity sha512-eRJu4Vs2rmttFCdhPUM3bV0Yo/xPSdPw6ML9KHs/bjB4bLA5HXlbvYXPOD5yASodGod+krjYx21xm1QmL8dCJQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+
+"@babel/plugin-transform-dotall-regex@^7.4.4", "@babel/plugin-transform-dotall-regex@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.8.3.tgz#c3c6ec5ee6125c6993c5cbca20dc8621a9ea7a6e"
+ integrity sha512-kLs1j9Nn4MQoBYdRXH6AeaXMbEJFaFu/v1nQkvib6QzTj8MZI5OQzqmD83/2jEM1z0DLilra5aWO5YpyC0ALIw==
+ dependencies:
+ "@babel/helper-create-regexp-features-plugin" "^7.8.3"
+ "@babel/helper-plugin-utils" "^7.8.3"
+
+"@babel/plugin-transform-duplicate-keys@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.8.3.tgz#8d12df309aa537f272899c565ea1768e286e21f1"
+ integrity sha512-s8dHiBUbcbSgipS4SMFuWGqCvyge5V2ZeAWzR6INTVC3Ltjig/Vw1G2Gztv0vU/hRG9X8IvKvYdoksnUfgXOEQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+
+"@babel/plugin-transform-exponentiation-operator@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.8.3.tgz#581a6d7f56970e06bf51560cd64f5e947b70d7b7"
+ integrity sha512-zwIpuIymb3ACcInbksHaNcR12S++0MDLKkiqXHl3AzpgdKlFNhog+z/K0+TGW+b0w5pgTq4H6IwV/WhxbGYSjQ==
+ dependencies:
+ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.8.3"
+ "@babel/helper-plugin-utils" "^7.8.3"
+
+"@babel/plugin-transform-flow-strip-types@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.12.1.tgz#8430decfa7eb2aea5414ed4a3fa6e1652b7d77c4"
+ integrity sha512-8hAtkmsQb36yMmEtk2JZ9JnVyDSnDOdlB+0nEGzIDLuK4yR3JcEjfuFPYkdEPSh8Id+rAMeBEn+X0iVEyho6Hg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+ "@babel/plugin-syntax-flow" "^7.12.1"
+
+"@babel/plugin-transform-for-of@^7.9.0":
+ version "7.9.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.9.0.tgz#0f260e27d3e29cd1bb3128da5e76c761aa6c108e"
+ integrity sha512-lTAnWOpMwOXpyDx06N+ywmF3jNbafZEqZ96CGYabxHrxNX8l5ny7dt4bK/rGwAh9utyP2b2Hv7PlZh1AAS54FQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+
+"@babel/plugin-transform-function-name@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.8.3.tgz#279373cb27322aaad67c2683e776dfc47196ed8b"
+ integrity sha512-rO/OnDS78Eifbjn5Py9v8y0aR+aSYhDhqAwVfsTl0ERuMZyr05L1aFSCJnbv2mmsLkit/4ReeQ9N2BgLnOcPCQ==
+ dependencies:
+ "@babel/helper-function-name" "^7.8.3"
+ "@babel/helper-plugin-utils" "^7.8.3"
+
+"@babel/plugin-transform-literals@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.8.3.tgz#aef239823d91994ec7b68e55193525d76dbd5dc1"
+ integrity sha512-3Tqf8JJ/qB7TeldGl+TT55+uQei9JfYaregDcEAyBZ7akutriFrt6C/wLYIer6OYhleVQvH/ntEhjE/xMmy10A==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+
+"@babel/plugin-transform-member-expression-literals@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.8.3.tgz#963fed4b620ac7cbf6029c755424029fa3a40410"
+ integrity sha512-3Wk2EXhnw+rP+IDkK6BdtPKsUE5IeZ6QOGrPYvw52NwBStw9V1ZVzxgK6fSKSxqUvH9eQPR3tm3cOq79HlsKYA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+
+"@babel/plugin-transform-modules-amd@^7.9.0":
+ version "7.9.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.9.0.tgz#19755ee721912cf5bb04c07d50280af3484efef4"
+ integrity sha512-vZgDDF003B14O8zJy0XXLnPH4sg+9X5hFBBGN1V+B2rgrB+J2xIypSN6Rk9imB2hSTHQi5OHLrFWsZab1GMk+Q==
+ dependencies:
+ "@babel/helper-module-transforms" "^7.9.0"
+ "@babel/helper-plugin-utils" "^7.8.3"
+ babel-plugin-dynamic-import-node "^2.3.0"
+
+"@babel/plugin-transform-modules-commonjs@^7.9.0":
+ version "7.9.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.9.0.tgz#e3e72f4cbc9b4a260e30be0ea59bdf5a39748940"
+ integrity sha512-qzlCrLnKqio4SlgJ6FMMLBe4bySNis8DFn1VkGmOcxG9gqEyPIOzeQrA//u0HAKrWpJlpZbZMPB1n/OPa4+n8g==
+ dependencies:
+ "@babel/helper-module-transforms" "^7.9.0"
+ "@babel/helper-plugin-utils" "^7.8.3"
+ "@babel/helper-simple-access" "^7.8.3"
+ babel-plugin-dynamic-import-node "^2.3.0"
+
+"@babel/plugin-transform-modules-systemjs@^7.9.0":
+ version "7.9.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.9.0.tgz#e9fd46a296fc91e009b64e07ddaa86d6f0edeb90"
+ integrity sha512-FsiAv/nao/ud2ZWy4wFacoLOm5uxl0ExSQ7ErvP7jpoihLR6Cq90ilOFyX9UXct3rbtKsAiZ9kFt5XGfPe/5SQ==
+ dependencies:
+ "@babel/helper-hoist-variables" "^7.8.3"
+ "@babel/helper-module-transforms" "^7.9.0"
+ "@babel/helper-plugin-utils" "^7.8.3"
+ babel-plugin-dynamic-import-node "^2.3.0"
+
+"@babel/plugin-transform-modules-umd@^7.9.0":
+ version "7.9.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.9.0.tgz#e909acae276fec280f9b821a5f38e1f08b480697"
+ integrity sha512-uTWkXkIVtg/JGRSIABdBoMsoIeoHQHPTL0Y2E7xf5Oj7sLqwVsNXOkNk0VJc7vF0IMBsPeikHxFjGe+qmwPtTQ==
+ dependencies:
+ "@babel/helper-module-transforms" "^7.9.0"
+ "@babel/helper-plugin-utils" "^7.8.3"
+
+"@babel/plugin-transform-named-capturing-groups-regex@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.8.3.tgz#a2a72bffa202ac0e2d0506afd0939c5ecbc48c6c"
+ integrity sha512-f+tF/8UVPU86TrCb06JoPWIdDpTNSGGcAtaD9mLP0aYGA0OS0j7j7DHJR0GTFrUZPUU6loZhbsVZgTh0N+Qdnw==
+ dependencies:
+ "@babel/helper-create-regexp-features-plugin" "^7.8.3"
+
+"@babel/plugin-transform-new-target@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.8.3.tgz#60cc2ae66d85c95ab540eb34babb6434d4c70c43"
+ integrity sha512-QuSGysibQpyxexRyui2vca+Cmbljo8bcRckgzYV4kRIsHpVeyeC3JDO63pY+xFZ6bWOBn7pfKZTqV4o/ix9sFw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+
+"@babel/plugin-transform-object-super@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.8.3.tgz#ebb6a1e7a86ffa96858bd6ac0102d65944261725"
+ integrity sha512-57FXk+gItG/GejofIyLIgBKTas4+pEU47IXKDBWFTxdPd7F80H8zybyAY7UoblVfBhBGs2EKM+bJUu2+iUYPDQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+ "@babel/helper-replace-supers" "^7.8.3"
+
+"@babel/plugin-transform-parameters@^7.8.7":
+ version "7.9.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.9.3.tgz#3028d0cc20ddc733166c6e9c8534559cee09f54a"
+ integrity sha512-fzrQFQhp7mIhOzmOtPiKffvCYQSK10NR8t6BBz2yPbeUHb9OLW8RZGtgDRBn8z2hGcwvKDL3vC7ojPTLNxmqEg==
+ dependencies:
+ "@babel/helper-get-function-arity" "^7.8.3"
+ "@babel/helper-plugin-utils" "^7.8.3"
+
+"@babel/plugin-transform-property-literals@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.8.3.tgz#33194300d8539c1ed28c62ad5087ba3807b98263"
+ integrity sha512-uGiiXAZMqEoQhRWMK17VospMZh5sXWg+dlh2soffpkAl96KAm+WZuJfa6lcELotSRmooLqg0MWdH6UUq85nmmg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+
+"@babel/plugin-transform-react-display-name@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.8.3.tgz#70ded987c91609f78353dd76d2fb2a0bb991e8e5"
+ integrity sha512-3Jy/PCw8Fe6uBKtEgz3M82ljt+lTg+xJaM4og+eyu83qLT87ZUSckn0wy7r31jflURWLO83TW6Ylf7lyXj3m5A==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+
+"@babel/plugin-transform-react-jsx-development@^7.9.0":
+ version "7.9.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.9.0.tgz#3c2a130727caf00c2a293f0aed24520825dbf754"
+ integrity sha512-tK8hWKrQncVvrhvtOiPpKrQjfNX3DtkNLSX4ObuGcpS9p0QrGetKmlySIGR07y48Zft8WVgPakqd/bk46JrMSw==
+ dependencies:
+ "@babel/helper-builder-react-jsx-experimental" "^7.9.0"
+ "@babel/helper-plugin-utils" "^7.8.3"
+ "@babel/plugin-syntax-jsx" "^7.8.3"
+
+"@babel/plugin-transform-react-jsx-self@^7.9.0":
+ version "7.9.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.9.0.tgz#f4f26a325820205239bb915bad8e06fcadabb49b"
+ integrity sha512-K2ObbWPKT7KUTAoyjCsFilOkEgMvFG+y0FqOl6Lezd0/13kMkkjHskVsZvblRPj1PHA44PrToaZANrryppzTvQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+ "@babel/plugin-syntax-jsx" "^7.8.3"
+
+"@babel/plugin-transform-react-jsx-source@^7.9.0":
+ version "7.9.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.9.0.tgz#89ef93025240dd5d17d3122294a093e5e0183de0"
+ integrity sha512-K6m3LlSnTSfRkM6FcRk8saNEeaeyG5k7AVkBU2bZK3+1zdkSED3qNdsWrUgQBeTVD2Tp3VMmerxVO2yM5iITmw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+ "@babel/plugin-syntax-jsx" "^7.8.3"
+
+"@babel/plugin-transform-react-jsx@^7.9.4":
+ version "7.9.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.9.4.tgz#86f576c8540bd06d0e95e0b61ea76d55f6cbd03f"
+ integrity sha512-Mjqf3pZBNLt854CK0C/kRuXAnE6H/bo7xYojP+WGtX8glDGSibcwnsWwhwoSuRg0+EBnxPC1ouVnuetUIlPSAw==
+ dependencies:
+ "@babel/helper-builder-react-jsx" "^7.9.0"
+ "@babel/helper-builder-react-jsx-experimental" "^7.9.0"
+ "@babel/helper-plugin-utils" "^7.8.3"
+ "@babel/plugin-syntax-jsx" "^7.8.3"
+
+"@babel/plugin-transform-regenerator@^7.8.7":
+ version "7.8.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.8.7.tgz#5e46a0dca2bee1ad8285eb0527e6abc9c37672f8"
+ integrity sha512-TIg+gAl4Z0a3WmD3mbYSk+J9ZUH6n/Yc57rtKRnlA/7rcCvpekHXe0CMZHP1gYp7/KLe9GHTuIba0vXmls6drA==
+ dependencies:
+ regenerator-transform "^0.14.2"
+
+"@babel/plugin-transform-reserved-words@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.8.3.tgz#9a0635ac4e665d29b162837dd3cc50745dfdf1f5"
+ integrity sha512-mwMxcycN3omKFDjDQUl+8zyMsBfjRFr0Zn/64I41pmjv4NJuqcYlEtezwYtw9TFd9WR1vN5kiM+O0gMZzO6L0A==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+
+"@babel/plugin-transform-shorthand-properties@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.8.3.tgz#28545216e023a832d4d3a1185ed492bcfeac08c8"
+ integrity sha512-I9DI6Odg0JJwxCHzbzW08ggMdCezoWcuQRz3ptdudgwaHxTjxw5HgdFJmZIkIMlRymL6YiZcped4TTCB0JcC8w==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+
+"@babel/plugin-transform-spread@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.8.3.tgz#9c8ffe8170fdfb88b114ecb920b82fb6e95fe5e8"
+ integrity sha512-CkuTU9mbmAoFOI1tklFWYYbzX5qCIZVXPVy0jpXgGwkplCndQAa58s2jr66fTeQnA64bDox0HL4U56CFYoyC7g==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+
+"@babel/plugin-transform-sticky-regex@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.8.3.tgz#be7a1290f81dae767475452199e1f76d6175b100"
+ integrity sha512-9Spq0vGCD5Bb4Z/ZXXSK5wbbLFMG085qd2vhL1JYu1WcQ5bXqZBAYRzU1d+p79GcHs2szYv5pVQCX13QgldaWw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+ "@babel/helper-regex" "^7.8.3"
+
+"@babel/plugin-transform-template-literals@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.8.3.tgz#7bfa4732b455ea6a43130adc0ba767ec0e402a80"
+ integrity sha512-820QBtykIQOLFT8NZOcTRJ1UNuztIELe4p9DCgvj4NK+PwluSJ49we7s9FB1HIGNIYT7wFUJ0ar2QpCDj0escQ==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.8.3"
+ "@babel/helper-plugin-utils" "^7.8.3"
+
+"@babel/plugin-transform-typeof-symbol@^7.8.4":
+ version "7.8.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.8.4.tgz#ede4062315ce0aaf8a657a920858f1a2f35fc412"
+ integrity sha512-2QKyfjGdvuNfHsb7qnBBlKclbD4CfshH2KvDabiijLMGXPHJXGxtDzwIF7bQP+T0ysw8fYTtxPafgfs/c1Lrqg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+
+"@babel/plugin-transform-typescript@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.12.1.tgz#d92cc0af504d510e26a754a7dbc2e5c8cd9c7ab4"
+ integrity sha512-VrsBByqAIntM+EYMqSm59SiMEf7qkmI9dqMt6RbD/wlwueWmYcI0FFK5Fj47pP6DRZm+3teXjosKlwcZJ5lIMw==
+ dependencies:
+ "@babel/helper-create-class-features-plugin" "^7.12.1"
+ "@babel/helper-plugin-utils" "^7.10.4"
+ "@babel/plugin-syntax-typescript" "^7.12.1"
+
+"@babel/plugin-transform-unicode-regex@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.8.3.tgz#0cef36e3ba73e5c57273effb182f46b91a1ecaad"
+ integrity sha512-+ufgJjYdmWfSQ+6NS9VGUR2ns8cjJjYbrbi11mZBTaWm+Fui/ncTLFF28Ei1okavY+xkojGr1eJxNsWYeA5aZw==
+ dependencies:
+ "@babel/helper-create-regexp-features-plugin" "^7.8.3"
+ "@babel/helper-plugin-utils" "^7.8.3"
+
+"@babel/preset-env@^7.1.6", "@babel/preset-env@^7.9.0":
+ version "7.9.0"
+ resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.9.0.tgz#a5fc42480e950ae8f5d9f8f2bbc03f52722df3a8"
+ integrity sha512-712DeRXT6dyKAM/FMbQTV/FvRCms2hPCx+3weRjZ8iQVQWZejWWk1wwG6ViWMyqb/ouBbGOl5b6aCk0+j1NmsQ==
+ dependencies:
+ "@babel/compat-data" "^7.9.0"
+ "@babel/helper-compilation-targets" "^7.8.7"
+ "@babel/helper-module-imports" "^7.8.3"
+ "@babel/helper-plugin-utils" "^7.8.3"
+ "@babel/plugin-proposal-async-generator-functions" "^7.8.3"
+ "@babel/plugin-proposal-dynamic-import" "^7.8.3"
+ "@babel/plugin-proposal-json-strings" "^7.8.3"
+ "@babel/plugin-proposal-nullish-coalescing-operator" "^7.8.3"
+ "@babel/plugin-proposal-numeric-separator" "^7.8.3"
+ "@babel/plugin-proposal-object-rest-spread" "^7.9.0"
+ "@babel/plugin-proposal-optional-catch-binding" "^7.8.3"
+ "@babel/plugin-proposal-optional-chaining" "^7.9.0"
+ "@babel/plugin-proposal-unicode-property-regex" "^7.8.3"
+ "@babel/plugin-syntax-async-generators" "^7.8.0"
+ "@babel/plugin-syntax-dynamic-import" "^7.8.0"
+ "@babel/plugin-syntax-json-strings" "^7.8.0"
+ "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0"
+ "@babel/plugin-syntax-numeric-separator" "^7.8.0"
+ "@babel/plugin-syntax-object-rest-spread" "^7.8.0"
+ "@babel/plugin-syntax-optional-catch-binding" "^7.8.0"
+ "@babel/plugin-syntax-optional-chaining" "^7.8.0"
+ "@babel/plugin-syntax-top-level-await" "^7.8.3"
+ "@babel/plugin-transform-arrow-functions" "^7.8.3"
+ "@babel/plugin-transform-async-to-generator" "^7.8.3"
+ "@babel/plugin-transform-block-scoped-functions" "^7.8.3"
+ "@babel/plugin-transform-block-scoping" "^7.8.3"
+ "@babel/plugin-transform-classes" "^7.9.0"
+ "@babel/plugin-transform-computed-properties" "^7.8.3"
+ "@babel/plugin-transform-destructuring" "^7.8.3"
+ "@babel/plugin-transform-dotall-regex" "^7.8.3"
+ "@babel/plugin-transform-duplicate-keys" "^7.8.3"
+ "@babel/plugin-transform-exponentiation-operator" "^7.8.3"
+ "@babel/plugin-transform-for-of" "^7.9.0"
+ "@babel/plugin-transform-function-name" "^7.8.3"
+ "@babel/plugin-transform-literals" "^7.8.3"
+ "@babel/plugin-transform-member-expression-literals" "^7.8.3"
+ "@babel/plugin-transform-modules-amd" "^7.9.0"
+ "@babel/plugin-transform-modules-commonjs" "^7.9.0"
+ "@babel/plugin-transform-modules-systemjs" "^7.9.0"
+ "@babel/plugin-transform-modules-umd" "^7.9.0"
+ "@babel/plugin-transform-named-capturing-groups-regex" "^7.8.3"
+ "@babel/plugin-transform-new-target" "^7.8.3"
+ "@babel/plugin-transform-object-super" "^7.8.3"
+ "@babel/plugin-transform-parameters" "^7.8.7"
+ "@babel/plugin-transform-property-literals" "^7.8.3"
+ "@babel/plugin-transform-regenerator" "^7.8.7"
+ "@babel/plugin-transform-reserved-words" "^7.8.3"
+ "@babel/plugin-transform-shorthand-properties" "^7.8.3"
+ "@babel/plugin-transform-spread" "^7.8.3"
+ "@babel/plugin-transform-sticky-regex" "^7.8.3"
+ "@babel/plugin-transform-template-literals" "^7.8.3"
+ "@babel/plugin-transform-typeof-symbol" "^7.8.4"
+ "@babel/plugin-transform-unicode-regex" "^7.8.3"
+ "@babel/preset-modules" "^0.1.3"
+ "@babel/types" "^7.9.0"
+ browserslist "^4.9.1"
+ core-js-compat "^3.6.2"
+ invariant "^2.2.2"
+ levenary "^1.1.1"
+ semver "^5.5.0"
+
+"@babel/preset-flow@^7.0.0":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.12.1.tgz#1a81d376c5a9549e75352a3888f8c273455ae940"
+ integrity sha512-UAoyMdioAhM6H99qPoKvpHMzxmNVXno8GYU/7vZmGaHk6/KqfDYL1W0NxszVbJ2EP271b7e6Ox+Vk2A9QsB3Sw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+ "@babel/plugin-transform-flow-strip-types" "^7.12.1"
+
+"@babel/preset-modules@^0.1.3":
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.3.tgz#13242b53b5ef8c883c3cf7dddd55b36ce80fbc72"
+ integrity sha512-Ra3JXOHBq2xd56xSF7lMKXdjBn3T772Y1Wet3yWnkDly9zHvJki029tAFzvAAK5cf4YV3yoxuP61crYRol6SVg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/plugin-proposal-unicode-property-regex" "^7.4.4"
+ "@babel/plugin-transform-dotall-regex" "^7.4.4"
+ "@babel/types" "^7.4.4"
+ esutils "^2.0.2"
+
+"@babel/preset-react@^7.9.4":
+ version "7.9.4"
+ resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.9.4.tgz#c6c97693ac65b6b9c0b4f25b948a8f665463014d"
+ integrity sha512-AxylVB3FXeOTQXNXyiuAQJSvss62FEotbX2Pzx3K/7c+MKJMdSg6Ose6QYllkdCFA8EInCJVw7M/o5QbLuA4ZQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+ "@babel/plugin-transform-react-display-name" "^7.8.3"
+ "@babel/plugin-transform-react-jsx" "^7.9.4"
+ "@babel/plugin-transform-react-jsx-development" "^7.9.0"
+ "@babel/plugin-transform-react-jsx-self" "^7.9.0"
+ "@babel/plugin-transform-react-jsx-source" "^7.9.0"
+
+"@babel/preset-typescript@^7.1.0", "@babel/preset-typescript@^7.12.7":
+ version "7.12.7"
+ resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.12.7.tgz#fc7df8199d6aae747896f1e6c61fc872056632a3"
+ integrity sha512-nOoIqIqBmHBSEgBXWR4Dv/XBehtIFcw9PqZw6rFYuKrzsZmOQm3PR5siLBnKZFEsDb03IegG8nSjU/iXXXYRmw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+ "@babel/helper-validator-option" "^7.12.1"
+ "@babel/plugin-transform-typescript" "^7.12.1"
+
+"@babel/register@^7.0.0":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.12.1.tgz#cdb087bdfc4f7241c03231f22e15d211acf21438"
+ integrity sha512-XWcmseMIncOjoydKZnWvWi0/5CUCD+ZYKhRwgYlWOrA8fGZ/FjuLRpqtIhLOVD/fvR1b9DQHtZPn68VvhpYf+Q==
+ dependencies:
+ find-cache-dir "^2.0.0"
+ lodash "^4.17.19"
+ make-dir "^2.1.0"
+ pirates "^4.0.0"
+ source-map-support "^0.5.16"
+
+"@babel/runtime@^7.2.0", "@babel/runtime@^7.8.4":
+ version "7.9.2"
+ resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.9.2.tgz#d90df0583a3a252f09aaa619665367bae518db06"
+ integrity sha512-NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q==
+ dependencies:
+ regenerator-runtime "^0.13.4"
+
+"@babel/template@^7.10.4":
+ version "7.12.7"
+ resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.12.7.tgz#c817233696018e39fbb6c491d2fb684e05ed43bc"
+ integrity sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow==
+ dependencies:
+ "@babel/code-frame" "^7.10.4"
+ "@babel/parser" "^7.12.7"
+ "@babel/types" "^7.12.7"
+
+"@babel/template@^7.4.0", "@babel/template@^7.8.3", "@babel/template@^7.8.6":
+ version "7.8.6"
+ resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.8.6.tgz#86b22af15f828dfb086474f964dcc3e39c43ce2b"
+ integrity sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==
+ dependencies:
+ "@babel/code-frame" "^7.8.3"
+ "@babel/parser" "^7.8.6"
+ "@babel/types" "^7.8.6"
+
+"@babel/traverse@^7.1.0", "@babel/traverse@^7.4.3", "@babel/traverse@^7.8.3", "@babel/traverse@^7.8.6", "@babel/traverse@^7.9.0":
+ version "7.9.0"
+ resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.9.0.tgz#d3882c2830e513f4fe4cec9fe76ea1cc78747892"
+ integrity sha512-jAZQj0+kn4WTHO5dUZkZKhbFrqZE7K5LAQ5JysMnmvGij+wOdr+8lWqPeW0BcF4wFwrEXXtdGO7wcV6YPJcf3w==
+ dependencies:
+ "@babel/code-frame" "^7.8.3"
+ "@babel/generator" "^7.9.0"
+ "@babel/helper-function-name" "^7.8.3"
+ "@babel/helper-split-export-declaration" "^7.8.3"
+ "@babel/parser" "^7.9.0"
+ "@babel/types" "^7.9.0"
+ debug "^4.1.0"
+ globals "^11.1.0"
+ lodash "^4.17.13"
+
+"@babel/traverse@^7.12.5":
+ version "7.12.9"
+ resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.9.tgz#fad26c972eabbc11350e0b695978de6cc8e8596f"
+ integrity sha512-iX9ajqnLdoU1s1nHt36JDI9KG4k+vmI8WgjK5d+aDTwQbL2fUnzedNedssA645Ede3PM2ma1n8Q4h2ohwXgMXw==
+ dependencies:
+ "@babel/code-frame" "^7.10.4"
+ "@babel/generator" "^7.12.5"
+ "@babel/helper-function-name" "^7.10.4"
+ "@babel/helper-split-export-declaration" "^7.11.0"
+ "@babel/parser" "^7.12.7"
+ "@babel/types" "^7.12.7"
+ debug "^4.1.0"
+ globals "^11.1.0"
+ lodash "^4.17.19"
+
+"@babel/types@^7.0.0", "@babel/types@^7.3.0", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.8.3", "@babel/types@^7.8.6", "@babel/types@^7.9.0":
+ version "7.9.0"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.9.0.tgz#00b064c3df83ad32b2dbf5ff07312b15c7f1efb5"
+ integrity sha512-BS9JKfXkzzJl8RluW4JGknzpiUV7ZrvTayM6yfqLTVBEnFtyowVIOu6rqxRd5cVO6yGoWf4T8u8dgK9oB+GCng==
+ dependencies:
+ "@babel/helper-validator-identifier" "^7.9.0"
+ lodash "^4.17.13"
+ to-fast-properties "^2.0.0"
+
+"@babel/types@^7.10.4", "@babel/types@^7.11.0", "@babel/types@^7.12.5", "@babel/types@^7.12.7":
+ version "7.12.7"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.7.tgz#6039ff1e242640a29452c9ae572162ec9a8f5d13"
+ integrity sha512-MNyI92qZq6jrQkXvtIiykvl4WtoRrVV9MPn+ZfsoEENjiWcBQ3ZSHrkxnJWgWtLX3XXqX5hrSQ+X69wkmesXuQ==
+ dependencies:
+ "@babel/helper-validator-identifier" "^7.10.4"
+ lodash "^4.17.19"
+ to-fast-properties "^2.0.0"
+
+"@choojs/findup@^0.2.0":
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/@choojs/findup/-/findup-0.2.1.tgz#ac13c59ae7be6e1da64de0779a0a7f03d75615a3"
+ integrity sha512-YstAqNb0MCN8PjdLCDfRsBcGVRN41f3vgLvaI0IrIcBp4AqILRSS0DeWNGkicC+f/zRIPJLc+9RURVSepwvfBw==
+ dependencies:
+ commander "^2.15.1"
+
+"@cnakazawa/watch@^1.0.3":
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a"
+ integrity sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==
+ dependencies:
+ exec-sh "^0.3.2"
+ minimist "^1.2.0"
+
+"@dsherret/to-absolute-glob@^2.0.2":
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/@dsherret/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz#1f6475dc8bd974cea07a2daf3864b317b1dd332c"
+ integrity sha1-H2R13IvZdM6gei2vOGSzF7HdMyw=
+ dependencies:
+ is-absolute "^1.0.0"
+ is-negated-glob "^1.0.0"
+
+"@eslint/eslintrc@^0.2.2":
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.2.2.tgz#d01fc791e2fc33e88a29d6f3dc7e93d0cd784b76"
+ integrity sha512-EfB5OHNYp1F4px/LI/FEnGylop7nOqkQ1LRzCM0KccA2U8tvV8w01KBv37LbO7nW4H+YhKyo2LcJhRwjjV17QQ==
+ dependencies:
+ ajv "^6.12.4"
+ debug "^4.1.1"
+ espree "^7.3.0"
+ globals "^12.1.0"
+ ignore "^4.0.6"
+ import-fresh "^3.2.1"
+ js-yaml "^3.13.1"
+ lodash "^4.17.19"
+ minimatch "^3.0.4"
+ strip-json-comments "^3.1.1"
+
+"@istanbuljs/load-nyc-config@^1.0.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced"
+ integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==
+ dependencies:
+ camelcase "^5.3.1"
+ find-up "^4.1.0"
+ get-package-type "^0.1.0"
+ js-yaml "^3.13.1"
+ resolve-from "^5.0.0"
+
+"@istanbuljs/schema@^0.1.2":
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.2.tgz#26520bf09abe4a5644cd5414e37125a8954241dd"
+ integrity sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==
+
+"@jest/console@^24.7.1", "@jest/console@^24.9.0":
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/@jest/console/-/console-24.9.0.tgz#79b1bc06fb74a8cfb01cbdedf945584b1b9707f0"
+ integrity sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ==
+ dependencies:
+ "@jest/source-map" "^24.9.0"
+ chalk "^2.0.1"
+ slash "^2.0.0"
+
+"@jest/core@^24.9.0":
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/@jest/core/-/core-24.9.0.tgz#2ceccd0b93181f9c4850e74f2a9ad43d351369c4"
+ integrity sha512-Fogg3s4wlAr1VX7q+rhV9RVnUv5tD7VuWfYy1+whMiWUrvl7U3QJSJyWcDio9Lq2prqYsZaeTv2Rz24pWGkJ2A==
+ dependencies:
+ "@jest/console" "^24.7.1"
+ "@jest/reporters" "^24.9.0"
+ "@jest/test-result" "^24.9.0"
+ "@jest/transform" "^24.9.0"
+ "@jest/types" "^24.9.0"
+ ansi-escapes "^3.0.0"
+ chalk "^2.0.1"
+ exit "^0.1.2"
+ graceful-fs "^4.1.15"
+ jest-changed-files "^24.9.0"
+ jest-config "^24.9.0"
+ jest-haste-map "^24.9.0"
+ jest-message-util "^24.9.0"
+ jest-regex-util "^24.3.0"
+ jest-resolve "^24.9.0"
+ jest-resolve-dependencies "^24.9.0"
+ jest-runner "^24.9.0"
+ jest-runtime "^24.9.0"
+ jest-snapshot "^24.9.0"
+ jest-util "^24.9.0"
+ jest-validate "^24.9.0"
+ jest-watcher "^24.9.0"
+ micromatch "^3.1.10"
+ p-each-series "^1.0.0"
+ realpath-native "^1.1.0"
+ rimraf "^2.5.4"
+ slash "^2.0.0"
+ strip-ansi "^5.0.0"
+
+"@jest/environment@^24.9.0":
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-24.9.0.tgz#21e3afa2d65c0586cbd6cbefe208bafade44ab18"
+ integrity sha512-5A1QluTPhvdIPFYnO3sZC3smkNeXPVELz7ikPbhUj0bQjB07EoE9qtLrem14ZUYWdVayYbsjVwIiL4WBIMV4aQ==
+ dependencies:
+ "@jest/fake-timers" "^24.9.0"
+ "@jest/transform" "^24.9.0"
+ "@jest/types" "^24.9.0"
+ jest-mock "^24.9.0"
+
+"@jest/fake-timers@^24.9.0":
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-24.9.0.tgz#ba3e6bf0eecd09a636049896434d306636540c93"
+ integrity sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A==
+ dependencies:
+ "@jest/types" "^24.9.0"
+ jest-message-util "^24.9.0"
+ jest-mock "^24.9.0"
+
+"@jest/reporters@^24.9.0":
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-24.9.0.tgz#86660eff8e2b9661d042a8e98a028b8d631a5b43"
+ integrity sha512-mu4X0yjaHrffOsWmVLzitKmmmWSQ3GGuefgNscUSWNiUNcEOSEQk9k3pERKEQVBb0Cnn88+UESIsZEMH3o88Gw==
+ dependencies:
+ "@jest/environment" "^24.9.0"
+ "@jest/test-result" "^24.9.0"
+ "@jest/transform" "^24.9.0"
+ "@jest/types" "^24.9.0"
+ chalk "^2.0.1"
+ exit "^0.1.2"
+ glob "^7.1.2"
+ istanbul-lib-coverage "^2.0.2"
+ istanbul-lib-instrument "^3.0.1"
+ istanbul-lib-report "^2.0.4"
+ istanbul-lib-source-maps "^3.0.1"
+ istanbul-reports "^2.2.6"
+ jest-haste-map "^24.9.0"
+ jest-resolve "^24.9.0"
+ jest-runtime "^24.9.0"
+ jest-util "^24.9.0"
+ jest-worker "^24.6.0"
+ node-notifier "^5.4.2"
+ slash "^2.0.0"
+ source-map "^0.6.0"
+ string-length "^2.0.0"
+
+"@jest/source-map@^24.3.0", "@jest/source-map@^24.9.0":
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-24.9.0.tgz#0e263a94430be4b41da683ccc1e6bffe2a191714"
+ integrity sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg==
+ dependencies:
+ callsites "^3.0.0"
+ graceful-fs "^4.1.15"
+ source-map "^0.6.0"
+
+"@jest/test-result@^24.9.0":
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-24.9.0.tgz#11796e8aa9dbf88ea025757b3152595ad06ba0ca"
+ integrity sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA==
+ dependencies:
+ "@jest/console" "^24.9.0"
+ "@jest/types" "^24.9.0"
+ "@types/istanbul-lib-coverage" "^2.0.0"
+
+"@jest/test-sequencer@^24.9.0":
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-24.9.0.tgz#f8f334f35b625a4f2f355f2fe7e6036dad2e6b31"
+ integrity sha512-6qqsU4o0kW1dvA95qfNog8v8gkRN9ph6Lz7r96IvZpHdNipP2cBcb07J1Z45mz/VIS01OHJ3pY8T5fUY38tg4A==
+ dependencies:
+ "@jest/test-result" "^24.9.0"
+ jest-haste-map "^24.9.0"
+ jest-runner "^24.9.0"
+ jest-runtime "^24.9.0"
+
+"@jest/transform@^24.9.0":
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-24.9.0.tgz#4ae2768b296553fadab09e9ec119543c90b16c56"
+ integrity sha512-TcQUmyNRxV94S0QpMOnZl0++6RMiqpbH/ZMccFB/amku6Uwvyb1cjYX7xkp5nGNkbX4QPH/FcB6q1HBTHynLmQ==
+ dependencies:
+ "@babel/core" "^7.1.0"
+ "@jest/types" "^24.9.0"
+ babel-plugin-istanbul "^5.1.0"
+ chalk "^2.0.1"
+ convert-source-map "^1.4.0"
+ fast-json-stable-stringify "^2.0.0"
+ graceful-fs "^4.1.15"
+ jest-haste-map "^24.9.0"
+ jest-regex-util "^24.9.0"
+ jest-util "^24.9.0"
+ micromatch "^3.1.10"
+ pirates "^4.0.1"
+ realpath-native "^1.1.0"
+ slash "^2.0.0"
+ source-map "^0.6.1"
+ write-file-atomic "2.4.1"
+
+"@jest/types@^24.9.0":
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/@jest/types/-/types-24.9.0.tgz#63cb26cb7500d069e5a389441a7c6ab5e909fc59"
+ integrity sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==
+ dependencies:
+ "@types/istanbul-lib-coverage" "^2.0.0"
+ "@types/istanbul-reports" "^1.1.1"
+ "@types/yargs" "^13.0.0"
+
+"@jest/types@^26.6.2":
+ version "26.6.2"
+ resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.6.2.tgz#bef5a532030e1d88a2f5a6d933f84e97226ed48e"
+ integrity sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==
+ dependencies:
+ "@types/istanbul-lib-coverage" "^2.0.0"
+ "@types/istanbul-reports" "^3.0.0"
+ "@types/node" "*"
+ "@types/yargs" "^15.0.0"
+ chalk "^4.0.0"
+
+"@mapbox/geojson-area@0.2.2":
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/@mapbox/geojson-area/-/geojson-area-0.2.2.tgz#18d7814aa36bf23fbbcc379f8e26a22927debf10"
+ integrity sha1-GNeBSqNr8j+7zDefjiaiKSfevxA=
+ dependencies:
+ wgs84 "0.0.0"
+
+"@mapbox/geojson-rewind@^0.4.0":
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/@mapbox/geojson-rewind/-/geojson-rewind-0.4.1.tgz#357d79300adb7fec7c1f091512988bca6458f068"
+ integrity sha512-mxo2MEr7izA1uOXcDsw99Kgg6xW3P4H2j4n1lmldsgviIelpssvP+jQDivFKOHrOVJDpTTi5oZJvRcHtU9Uufw==
+ dependencies:
+ "@mapbox/geojson-area" "0.2.2"
+ concat-stream "~1.6.0"
+ minimist "^1.2.5"
+ sharkdown "^0.1.0"
+
+"@mapbox/geojson-types@^1.0.2":
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/@mapbox/geojson-types/-/geojson-types-1.0.2.tgz#9aecf642cb00eab1080a57c4f949a65b4a5846d6"
+ integrity sha512-e9EBqHHv3EORHrSfbR9DqecPNn+AmuAoQxV6aL8Xu30bJMJR1o8PZLZzpk1Wq7/NfCbuhmakHTPYRhoqLsXRnw==
+
+"@mapbox/jsonlint-lines-primitives@^2.0.2":
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/@mapbox/jsonlint-lines-primitives/-/jsonlint-lines-primitives-2.0.2.tgz#ce56e539f83552b58d10d672ea4d6fc9adc7b234"
+ integrity sha1-zlblOfg1UrWNENZy6k1vya3HsjQ=
+
+"@mapbox/mapbox-gl-supported@^1.4.0":
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/@mapbox/mapbox-gl-supported/-/mapbox-gl-supported-1.5.0.tgz#f60b6a55a5d8e5ee908347d2ce4250b15103dc8e"
+ integrity sha512-/PT1P6DNf7vjEEiPkVIRJkvibbqWtqnyGaBz3nfRdcxclNSnSdaLU5tfAgcD7I8Yt5i+L19s406YLl1koLnLbg==
+
+"@mapbox/point-geometry@0.1.0", "@mapbox/point-geometry@^0.1.0", "@mapbox/point-geometry@~0.1.0":
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/@mapbox/point-geometry/-/point-geometry-0.1.0.tgz#8a83f9335c7860effa2eeeca254332aa0aeed8f2"
+ integrity sha1-ioP5M1x4YO/6Lu7KJUMyqgru2PI=
+
+"@mapbox/tiny-sdf@^1.1.0":
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/@mapbox/tiny-sdf/-/tiny-sdf-1.1.1.tgz#16a20c470741bfe9191deb336f46e194da4a91ff"
+ integrity sha512-Ihn1nZcGIswJ5XGbgFAvVumOgWpvIjBX9jiRlIl46uQG9vJOF51ViBYHF95rEZupuyQbEmhLaDPLQlU7fUTsBg==
+
+"@mapbox/unitbezier@^0.0.0":
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/@mapbox/unitbezier/-/unitbezier-0.0.0.tgz#15651bd553a67b8581fb398810c98ad86a34524e"
+ integrity sha1-FWUb1VOme4WB+zmIEMmK2Go0Uk4=
+
+"@mapbox/vector-tile@^1.3.1":
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/@mapbox/vector-tile/-/vector-tile-1.3.1.tgz#d3a74c90402d06e89ec66de49ec817ff53409666"
+ integrity sha512-MCEddb8u44/xfQ3oD+Srl/tNcQoqTw3goGk2oLsrFxOTc3dUp+kAnby3PvAeeBYSMSjSPD1nd1AJA6W49WnoUw==
+ dependencies:
+ "@mapbox/point-geometry" "~0.1.0"
+
+"@mapbox/whoots-js@^3.1.0":
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/@mapbox/whoots-js/-/whoots-js-3.1.0.tgz#497c67a1cef50d1a2459ba60f315e448d2ad87fe"
+ integrity sha512-Es6WcD0nO5l+2BOQS4uLfNPYQaNDfbot3X1XUoloz+x0mPDS3eeORZJl06HXjwBG1fOGwCRnzK88LMdxKRrd6Q==
+
+"@nodelib/fs.scandir@2.1.3":
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz#3a582bdb53804c6ba6d146579c46e52130cf4a3b"
+ integrity sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==
+ dependencies:
+ "@nodelib/fs.stat" "2.0.3"
+ run-parallel "^1.1.9"
+
+"@nodelib/fs.stat@2.0.3", "@nodelib/fs.stat@^2.0.2":
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz#34dc5f4cabbc720f4e60f75a747e7ecd6c175bd3"
+ integrity sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==
+
+"@nodelib/fs.walk@^1.2.3":
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz#011b9202a70a6366e436ca5c065844528ab04976"
+ integrity sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==
+ dependencies:
+ "@nodelib/fs.scandir" "2.1.3"
+ fastq "^1.6.0"
+
+"@plotly/d3-sankey-circular@0.33.1":
+ version "0.33.1"
+ resolved "https://registry.yarnpkg.com/@plotly/d3-sankey-circular/-/d3-sankey-circular-0.33.1.tgz#15d1e0337e0e4b1135bdf0e2195c88adacace1a7"
+ integrity sha512-FgBV1HEvCr3DV7RHhDsPXyryknucxtfnLwPtCKKxdolKyTFYoLX/ibEfX39iFYIL7DYbVeRtP43dbFcrHNE+KQ==
+ dependencies:
+ d3-array "^1.2.1"
+ d3-collection "^1.0.4"
+ d3-shape "^1.2.0"
+ elementary-circuits-directed-graph "^1.0.4"
+
+"@plotly/d3-sankey@0.7.2":
+ version "0.7.2"
+ resolved "https://registry.yarnpkg.com/@plotly/d3-sankey/-/d3-sankey-0.7.2.tgz#ddd5290d3b02c60037ced018a162644a2ccef33b"
+ integrity sha512-2jdVos1N3mMp3QW0k2q1ph7Gd6j5PY1YihBrwpkFnKqO+cqtZq3AdEYUeSGXMeLsBDQYiqTVcihYfk8vr5tqhw==
+ dependencies:
+ d3-array "1"
+ d3-collection "1"
+ d3-shape "^1.2.0"
+
+"@ts-morph/bootstrap@^0.6.0":
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/@ts-morph/bootstrap/-/bootstrap-0.6.0.tgz#264b51a00070916c5c824d754b7155b8b03f6631"
+ integrity sha512-ZCrY+57ktsNNe3PFnnS4U98lo95zpl8Rpqhe4NKl1c5lmnOBeBlp168D6bQYH/GCnJpErxrgAgZsSqBSh/Jk7A==
+ dependencies:
+ "@ts-morph/common" "~0.6.0"
+
+"@ts-morph/common@~0.6.0":
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/@ts-morph/common/-/common-0.6.0.tgz#cbd4ee57c5ef971511b9c5778e0bb8eb27de4783"
+ integrity sha512-pI35nZz5bs3tL3btSVX2cWkAE8rc80F+Fn4TwSC6bQvn7fgn9IyLXVcAfpG6X6NBY5wN9TkSWXn/QYUkBvR/Fw==
+ dependencies:
+ "@dsherret/to-absolute-glob" "^2.0.2"
+ fast-glob "^3.2.4"
+ fs-extra "^9.0.1"
+ is-negated-glob "^1.0.0"
+ multimatch "^4.0.0"
+ typescript "~4.0.2"
+
+"@turf/area@^6.0.1":
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/@turf/area/-/area-6.0.1.tgz#50ed63c70ef2bdb72952384f1594319d94f3b051"
+ integrity sha512-Zv+3N1ep9P5JvR0YOYagLANyapGWQBh8atdeR3bKpWcigVXFsEKNUw03U/5xnh+cKzm7yozHD6MFJkqQv55y0g==
+ dependencies:
+ "@turf/helpers" "6.x"
+ "@turf/meta" "6.x"
+
+"@turf/bbox@^6.0.1":
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/@turf/bbox/-/bbox-6.0.1.tgz#b966075771475940ee1c16be2a12cf389e6e923a"
+ integrity sha512-EGgaRLettBG25Iyx7VyUINsPpVj1x3nFQFiGS3ER8KCI1MximzNLsam3eXRabqQDjyAKyAE1bJ4EZEpGvspQxw==
+ dependencies:
+ "@turf/helpers" "6.x"
+ "@turf/meta" "6.x"
+
+"@turf/centroid@^6.0.2":
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/@turf/centroid/-/centroid-6.0.2.tgz#c4eb16b4bc60b692f74e1809cf9a7c4a4f5ba1cc"
+ integrity sha512-auyDauOtC4eddH7GC3CHFTDu2PKhpSeKCRhwhHhXtJqn2dWCJQNIoCeJRmfXRIbzCWhWvgvQafvvhq8HNvmvWw==
+ dependencies:
+ "@turf/helpers" "6.x"
+ "@turf/meta" "6.x"
+
+"@turf/helpers@6.x":
+ version "6.1.4"
+ resolved "https://registry.yarnpkg.com/@turf/helpers/-/helpers-6.1.4.tgz#d6fd7ebe6782dd9c87dca5559bda5c48ae4c3836"
+ integrity sha512-vJvrdOZy1ngC7r3MDA7zIGSoIgyrkWcGnNIEaqn/APmw+bVLF2gAW7HIsdTxd12s5wQMqEpqIQrmrbRRZ0xC7g==
+
+"@turf/meta@6.x":
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/@turf/meta/-/meta-6.0.2.tgz#eb92951126d24a613ac1b7b99d733fcc20fd30cf"
+ integrity sha512-VA7HJkx7qF1l3+GNGkDVn2oXy4+QoLP6LktXAaZKjuT1JI0YESat7quUkbCMy4zP9lAUuvS4YMslLyTtr919FA==
+ dependencies:
+ "@turf/helpers" "6.x"
+
+"@types/babel__core@^7.1.0":
+ version "7.1.7"
+ resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.7.tgz#1dacad8840364a57c98d0dd4855c6dd3752c6b89"
+ integrity sha512-RL62NqSFPCDK2FM1pSDH0scHpJvsXtZNiYlMB73DgPBaG1E38ZYVL+ei5EkWRbr+KC4YNiAUNBnRj+bgwpgjMw==
+ dependencies:
+ "@babel/parser" "^7.1.0"
+ "@babel/types" "^7.0.0"
+ "@types/babel__generator" "*"
+ "@types/babel__template" "*"
+ "@types/babel__traverse" "*"
+
+"@types/babel__generator@*":
+ version "7.6.1"
+ resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.1.tgz#4901767b397e8711aeb99df8d396d7ba7b7f0e04"
+ integrity sha512-bBKm+2VPJcMRVwNhxKu8W+5/zT7pwNEqeokFOmbvVSqGzFneNxYcEBro9Ac7/N9tlsaPYnZLK8J1LWKkMsLAew==
+ dependencies:
+ "@babel/types" "^7.0.0"
+
+"@types/babel__template@*":
+ version "7.0.2"
+ resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.0.2.tgz#4ff63d6b52eddac1de7b975a5223ed32ecea9307"
+ integrity sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg==
+ dependencies:
+ "@babel/parser" "^7.1.0"
+ "@babel/types" "^7.0.0"
+
+"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6":
+ version "7.0.11"
+ resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.11.tgz#1ae3010e8bf8851d324878b42acec71986486d18"
+ integrity sha512-ddHK5icION5U6q11+tV2f9Mo6CZVuT8GJKld2q9LqHSZbvLbH34Kcu2yFGckZut453+eQU6btIA3RihmnRgI+Q==
+ dependencies:
+ "@babel/types" "^7.3.0"
+
+"@types/cheerio@*":
+ version "0.22.23"
+ resolved "https://registry.yarnpkg.com/@types/cheerio/-/cheerio-0.22.23.tgz#74bcfee9c5ee53f619711dca953a89fe5cfa4eb4"
+ integrity sha512-QfHLujVMlGqcS/ePSf3Oe5hK3H8wi/yN2JYuxSB1U10VvW1fO3K8C+mURQesFYS1Hn7lspOsTT75SKq/XtydQg==
+ dependencies:
+ "@types/node" "*"
+
+"@types/chroma-js@^2.1.2":
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/@types/chroma-js/-/chroma-js-2.1.2.tgz#edd640f17dbd13561ace34c13fdc43416b013223"
+ integrity sha512-fpIsY+9doOvRiBLR0xtubHmGBEVhis2z3CSWcxRDy7L2noKWXkT49c1QiU0RZ2YLc8lHitxu13HTuVItXUdD/g==
+
+"@types/d3-array@*":
+ version "2.8.0"
+ resolved "https://registry.yarnpkg.com/@types/d3-array/-/d3-array-2.8.0.tgz#4b70ccb0c6d2ef28dac1e7e653b3ecd1f4b1d1ee"
+ integrity sha512-Q0ubcGHAmCRPh90/hoYB4eKWhxYKUxphwSeQrlz2tiabQ8S9zqhaE2CZJtCaLH2cjqKcjr52WPvmOA7ha0O4ZA==
+
+"@types/d3-axis@*":
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/@types/d3-axis/-/d3-axis-2.0.0.tgz#a3e7534d3c399c20ba42ec3093dd2a385659366e"
+ integrity sha512-gUdlEwGBLl3tXGiBnBNmNzph9W3bCfa4tBgWZD60Z1eDQKTY4zyCAcZ3LksignGfKawYatmDYcBdjJ5h/54sqA==
+ dependencies:
+ "@types/d3-selection" "*"
+
+"@types/d3-brush@*":
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/@types/d3-brush/-/d3-brush-2.1.0.tgz#c51ad1ab93887b23be7637d2100540f1df0dac00"
+ integrity sha512-rLQqxQeXWF4ArXi81GlV8HBNwJw9EDpz0jcWvvzv548EDE4tXrayBTOHYi/8Q4FZ/Df8PGXFzxpAVQmJMjOtvQ==
+ dependencies:
+ "@types/d3-selection" "*"
+
+"@types/d3-chord@*":
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/@types/d3-chord/-/d3-chord-2.0.0.tgz#8d7085e2828418f2c5087e512f276559499bacfd"
+ integrity sha512-3nHsLY7lImpZlM/hrPeDqqW2a+lRXXoHsG54QSurDGihZAIE/doQlohs0evoHrWOJqXyn4A4xbSVEtXnMEZZiw==
+
+"@types/d3-cloud@^1.2.3":
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/@types/d3-cloud/-/d3-cloud-1.2.3.tgz#cfaac9cb601968c27094903a82687336de69b518"
+ integrity sha512-VUcRA9YWM1V5Srg444/zVxgmhVyIYBrChIr5lg+0cPGNM4J4fLdBqEeAkk9ggRPM3Um4fUy/p/gtEKbAqL/hcw==
+ dependencies:
+ "@types/d3" "^3"
+
+"@types/d3-color@*":
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/@types/d3-color/-/d3-color-2.0.1.tgz#570ea7f8b853461301804efa52bd790a640a26db"
+ integrity sha512-u7LTCL7RnaavFSmob2rIAJLNwu50i6gFwY9cHFr80BrQURYQBRkJ+Yv47nA3Fm7FeRhdWTiVTeqvSeOuMAOzBQ==
+
+"@types/d3-contour@*":
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/@types/d3-contour/-/d3-contour-2.0.0.tgz#6e079f281b29a8df3fcbd3ec193f2cf1d0b4a584"
+ integrity sha512-PS9UO6zBQqwHXsocbpdzZFONgK1oRUgWtjjh/iz2vM06KaXLInLiKZ9e3OLBRerc1cU2uJYpO+8zOnb6frvCGQ==
+ dependencies:
+ "@types/d3-array" "*"
+ "@types/geojson" "*"
+
+"@types/d3-delaunay@*":
+ version "5.3.0"
+ resolved "https://registry.yarnpkg.com/@types/d3-delaunay/-/d3-delaunay-5.3.0.tgz#416169bb5c67a510c87b55d092a404fcab49def3"
+ integrity sha512-gJYcGxLu0xDZPccbUe32OUpeaNtd1Lz0NYJtko6ZLMyG2euF4pBzrsQXms67LHZCDFzzszw+dMhSL/QAML3bXw==
+
+"@types/d3-dispatch@*":
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/@types/d3-dispatch/-/d3-dispatch-2.0.0.tgz#1f8803041b73b81f2c751e026b7bb63dd5f24ce0"
+ integrity sha512-Sh0KW6z/d7uxssD7K4s4uCSzlEG/+SP+U47q098NVdOfFvUKNTvKAIV4XqjxsUuhE/854ARAREHOxkr9gQOCyg==
+
+"@types/d3-drag@*":
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/@types/d3-drag/-/d3-drag-2.0.0.tgz#ef66acc422576fbe10b8bd66af45a9fb8525199a"
+ integrity sha512-VaUJPjbMnDn02tcRqsHLRAX5VjcRIzCjBfeXTLGe6QjMn5JccB5Cz4ztMRXMJfkbC45ovgJFWuj6DHvWMX1thA==
+ dependencies:
+ "@types/d3-selection" "*"
+
+"@types/d3-dsv@*":
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/@types/d3-dsv/-/d3-dsv-2.0.0.tgz#c9fb8b2f0f7168d21a6bbd29492141bfd1b8db16"
+ integrity sha512-wYqy7T8tQ/DmocwxmlPujllLI5fg3lb6/FrVVWkLUD+NsRV+kcE4nbRZg10G9yjJ8pK2ZXqu+VP5jQbN13uNRQ==
+
+"@types/d3-ease@*":
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/@types/d3-ease/-/d3-ease-2.0.0.tgz#798cbd9908d26cfe9f1a295a3a75164da9a3666e"
+ integrity sha512-6aZrTyX5LG+ptofVHf+gTsThLRY1nhLotJjgY4drYqk1OkJMu2UvuoZRlPw2fffjRHeYepue3/fxTufqKKmvsA==
+
+"@types/d3-fetch@*":
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/@types/d3-fetch/-/d3-fetch-2.0.0.tgz#580846256ed0011b36a08ebb36924e0dff70e27e"
+ integrity sha512-WnLepGtxepFfXRdPI8I5FTgNiHn9p4vMTTqaNCzJJfAswXx0rOY2jjeolzEU063em3iJmGZ+U79InnEeFOrCRw==
+ dependencies:
+ "@types/d3-dsv" "*"
+
+"@types/d3-force@*":
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/@types/d3-force/-/d3-force-2.1.0.tgz#6a2210f04d02a0862c6b069de91bad904143e7b5"
+ integrity sha512-LGDtC2YADu8OBniq9EBx/MOsXsMcJbEkmfSpXuz6oVdRamB+3CLCiq5EKFPEILGZQckkilGFq1ZTJ7kc289k+Q==
+
+"@types/d3-format@*":
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/@types/d3-format/-/d3-format-2.0.0.tgz#607d261cb268f0a027f100575491031539a40ee6"
+ integrity sha512-uagdkftxnGkO4pZw5jEYOM5ZnZOEsh7z8j11Qxk85UkB2RzfUUxRl7R9VvvJZHwKn8l+x+rpS77Nusq7FkFmIg==
+
+"@types/d3-geo@*":
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/@types/d3-geo/-/d3-geo-2.0.0.tgz#6f179512343c2d30e06acde190abfacf44b2d264"
+ integrity sha512-DHHgYXW36lnAEQMYU2udKVOxxljHrn2EdOINeSC9jWCAXwOnGn7A19B8sNsHqgpu4F7O2bSD7//cqBXD3W0Deg==
+ dependencies:
+ "@types/geojson" "*"
+
+"@types/d3-hierarchy@*":
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/@types/d3-hierarchy/-/d3-hierarchy-2.0.0.tgz#92079d9dbcec1dfe2736fb050a8bf916e5850a1c"
+ integrity sha512-YxdskUvwzqggpnSnDQj4KVkicgjpkgXn/g/9M9iGsiToLS3nG6Ytjo1FoYhYVAAElV/fJBGVL3cQ9Hb7tcv+lw==
+
+"@types/d3-interpolate@*":
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/@types/d3-interpolate/-/d3-interpolate-2.0.0.tgz#325029216dc722c1c68c33ccda759f1209d35823"
+ integrity sha512-Wt1v2zTlEN8dSx8hhx6MoOhWQgTkz0Ukj7owAEIOF2QtI0e219paFX9rf/SLOr/UExWb1TcUzatU8zWwFby6gg==
+ dependencies:
+ "@types/d3-color" "*"
+
+"@types/d3-path@*":
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/@types/d3-path/-/d3-path-2.0.0.tgz#dcc7f5ecadf52b0c0c39f6c1def3733195e4b199"
+ integrity sha512-tXcR/9OtDdeCIsyl6eTNHC3XOAOdyc6ceF3QGBXOd9jTcK+ex/ecr00p9L9362e/op3UEPpxrToi1FHrtTSj7Q==
+
+"@types/d3-path@^1":
+ version "1.0.9"
+ resolved "https://registry.yarnpkg.com/@types/d3-path/-/d3-path-1.0.9.tgz#73526b150d14cd96e701597cbf346cfd1fd4a58c"
+ integrity sha512-NaIeSIBiFgSC6IGUBjZWcscUJEq7vpVu7KthHN8eieTV9d9MqkSOZLH4chq1PmcKy06PNe3axLeKmRIyxJ+PZQ==
+
+"@types/d3-polygon@*":
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/@types/d3-polygon/-/d3-polygon-2.0.0.tgz#8b1df0a1358016e62c4961b01e8dc8e5ab4c64e5"
+ integrity sha512-fISnMd8ePED1G4aa4V974Jmt+ajHSgPoxMa2D0ULxMybpx0Vw4WEzhQEaMIrL3hM8HVRcKTx669I+dTy/4PhAw==
+
+"@types/d3-quadtree@*":
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/@types/d3-quadtree/-/d3-quadtree-2.0.0.tgz#b17e953dc061e083966075bba0d3a9a259812150"
+ integrity sha512-YZuJuGBnijD0H+98xMJD4oZXgv/umPXy5deu3IimYTPGH3Kr8Th6iQUff0/6S80oNBD7KtOuIHwHUCymUiRoeQ==
+
+"@types/d3-random@*":
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/@types/d3-random/-/d3-random-2.2.0.tgz#fc44cabb966917459490b758f31f5359adeabe5b"
+ integrity sha512-Hjfj9m68NmYZzushzEG7etPvKH/nj9b9s9+qtkNG3/dbRBjQZQg1XS6nRuHJcCASTjxXlyXZnKu2gDxyQIIu9A==
+
+"@types/d3-scale-chromatic@*":
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/@types/d3-scale-chromatic/-/d3-scale-chromatic-2.0.0.tgz#8d4a6f07cbbf2a9f2a4bec9c9476c27ed76a96ea"
+ integrity sha512-Y62+2clOwZoKua84Ha0xU77w7lePiaBoTjXugT4l8Rd5LAk+Mn/ZDtrgs087a+B5uJ3jYUHHtKw5nuEzp0WBHw==
+
+"@types/d3-scale@*":
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/@types/d3-scale/-/d3-scale-3.2.1.tgz#b37578c8c7edb6f040e46e7757783aafd2d50e4e"
+ integrity sha512-j+FryQSVk3GHLqjOX/RsHwGHg4XByJ0xIO1ASBTgzhE9o1tgeV4kEWLOzMzJRembKalflk5F03lEkM+4V6LDrQ==
+ dependencies:
+ "@types/d3-time" "*"
+
+"@types/d3-selection@*":
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/@types/d3-selection/-/d3-selection-2.0.0.tgz#59df94a8e47ed1050a337d4ffb4d4d213aa590a8"
+ integrity sha512-EF0lWZ4tg7oDFg4YQFlbOU3936e3a9UmoQ2IXlBy1+cv2c2Pv7knhKUzGlH5Hq2sF/KeDTH1amiRPey2rrLMQA==
+
+"@types/d3-shape@*":
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/@types/d3-shape/-/d3-shape-2.0.0.tgz#61aa065726f3c2641aedc59c3603475ab11aeb2f"
+ integrity sha512-NLzD02m5PiD1KLEDjLN+MtqEcFYn4ZL9+Rqc9ZwARK1cpKZXd91zBETbe6wpBB6Ia0D0VZbpmbW3+BsGPGnCpA==
+ dependencies:
+ "@types/d3-path" "^1"
+
+"@types/d3-time-format@*":
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/@types/d3-time-format/-/d3-time-format-3.0.0.tgz#913e984362a59792dc8d8b122dd17625991eade2"
+ integrity sha512-UpLg1mn/8PLyjr+J/JwdQJM/GzysMvv2CS8y+WYAL5K0+wbvXv/pPSLEfdNaprCZsGcXTxPsFMy8QtkYv9ueew==
+
+"@types/d3-time@*":
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/@types/d3-time/-/d3-time-2.0.0.tgz#831dd093db91f16b83ba980e194bb8e4bcef44d6"
+ integrity sha512-Abz8bTzy8UWDeYs9pCa3D37i29EWDjNTjemdk0ei1ApYVNqulYlGUKip/jLOpogkPSsPz/GvZCYiC7MFlEk0iQ==
+
+"@types/d3-timer@*":
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/@types/d3-timer/-/d3-timer-2.0.0.tgz#9901bb02af38798764674df17d66b07329705632"
+ integrity sha512-l6stHr1VD1BWlW6u3pxrjLtJfpPZq9I3XmKIQtq7zHM/s6fwEtI1Yn6Sr5/jQTrUDCC5jkS6gWqlFGCDArDqNg==
+
+"@types/d3-transition@*":
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/@types/d3-transition/-/d3-transition-2.0.0.tgz#6f073f0b567c13b7a3dcd1d54214c89f48c5a873"
+ integrity sha512-UJDzI98utcZQUJt3uIit/Ho0/eBIANzrWJrTmi4+TaKIyWL2iCu7ShP0o4QajCskhyjOA7C8+4CE3b1YirTzEQ==
+ dependencies:
+ "@types/d3-selection" "*"
+
+"@types/d3-zoom@*":
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/@types/d3-zoom/-/d3-zoom-2.0.0.tgz#ef8b87464e8ebc7c66b70f6383d1ae841e78e7fc"
+ integrity sha512-daL0PJm4yT0ISTGa7p2lHX0kvv9FO/IR1ooWbHR/7H4jpbaKiLux5FslyS/OvISPiJ5SXb4sOqYhO6fMB6hKRw==
+ dependencies:
+ "@types/d3-interpolate" "*"
+ "@types/d3-selection" "*"
+
+"@types/d3@^3":
+ version "3.5.44"
+ resolved "https://registry.yarnpkg.com/@types/d3/-/d3-3.5.44.tgz#28635f8bb9adf1cef5bbef2b06778174a9d34383"
+ integrity sha512-hFEcf03YGJ2uQoDYEp3nFD5mXWxly5kf6KOstuOQFEs9sUCN7kNlKhcYkpZ3gK6PiHz4XRLkoHa80NVCJNeLBw==
+
+"@types/d3@^6.2.0":
+ version "6.2.0"
+ resolved "https://registry.yarnpkg.com/@types/d3/-/d3-6.2.0.tgz#db3c70ad6479cf79b15840a3d15338a9754384e7"
+ integrity sha512-XhQ6sCTu+CrFLqJMsg/uRPZQrt5FlCPjPE/wvsSBYoaOZ9C1chdJSS9+2oR8+Xtk6DKGewa7/UP5icJRwAryEA==
+ dependencies:
+ "@types/d3-array" "*"
+ "@types/d3-axis" "*"
+ "@types/d3-brush" "*"
+ "@types/d3-chord" "*"
+ "@types/d3-color" "*"
+ "@types/d3-contour" "*"
+ "@types/d3-delaunay" "*"
+ "@types/d3-dispatch" "*"
+ "@types/d3-drag" "*"
+ "@types/d3-dsv" "*"
+ "@types/d3-ease" "*"
+ "@types/d3-fetch" "*"
+ "@types/d3-force" "*"
+ "@types/d3-format" "*"
+ "@types/d3-geo" "*"
+ "@types/d3-hierarchy" "*"
+ "@types/d3-interpolate" "*"
+ "@types/d3-path" "*"
+ "@types/d3-polygon" "*"
+ "@types/d3-quadtree" "*"
+ "@types/d3-random" "*"
+ "@types/d3-scale" "*"
+ "@types/d3-scale-chromatic" "*"
+ "@types/d3-selection" "*"
+ "@types/d3-shape" "*"
+ "@types/d3-time" "*"
+ "@types/d3-time-format" "*"
+ "@types/d3-timer" "*"
+ "@types/d3-transition" "*"
+ "@types/d3-zoom" "*"
+
+"@types/debug@^4.1.5":
+ version "4.1.5"
+ resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.5.tgz#b14efa8852b7768d898906613c23f688713e02cd"
+ integrity sha512-Q1y515GcOdTHgagaVFhHnIFQ38ygs/kmxdNpvpou+raI9UO3YZcHDngBSYKQklcKlvA7iuQlmIKbzvmxcOE9CQ==
+
+"@types/dompurify@^2.0.4":
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/@types/dompurify/-/dompurify-2.0.4.tgz#25fce15f1f4b1bc0df0ad957040cf226416ac2d7"
+ integrity sha512-y6K7NyXTQvjr8hJNsAFAD8yshCsIJ0d+OYEFzULuIqWyWOKL2hRru1I+rorI5U0K4SLAROTNuSUFXPDTu278YA==
+ dependencies:
+ "@types/trusted-types" "*"
+
+"@types/enzyme@^3.10.8":
+ version "3.10.8"
+ resolved "https://registry.yarnpkg.com/@types/enzyme/-/enzyme-3.10.8.tgz#ad7ac9d3af3de6fd0673773123fafbc63db50d42"
+ integrity sha512-vlOuzqsTHxog6PV79+tvOHFb6hq4QZKMq1lLD9MaWD1oec2lHTKndn76XOpSwCA0oFTaIbKVPrgM3k78Jjd16g==
+ dependencies:
+ "@types/cheerio" "*"
+ "@types/react" "*"
+
+"@types/geojson@*":
+ version "7946.0.7"
+ resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-7946.0.7.tgz#c8fa532b60a0042219cdf173ca21a975ef0666ad"
+ integrity sha512-wE2v81i4C4Ol09RtsWFAqg3BUitWbHSpSlIo+bNdsCJijO9sjme+zm+73ZMCa/qMC8UEERxzGbvmr1cffo2SiQ==
+
+"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0":
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz#42995b446db9a48a11a07ec083499a860e9138ff"
+ integrity sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg==
+
+"@types/istanbul-lib-report@*":
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686"
+ integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==
+ dependencies:
+ "@types/istanbul-lib-coverage" "*"
+
+"@types/istanbul-reports@^1.1.1":
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-1.1.1.tgz#7a8cbf6a406f36c8add871625b278eaf0b0d255a"
+ integrity sha512-UpYjBi8xefVChsCoBpKShdxTllC9pwISirfoZsUa2AAdQg/Jd2KQGtSbw+ya7GPo7x/wAPlH6JBhKhAsXUEZNA==
+ dependencies:
+ "@types/istanbul-lib-coverage" "*"
+ "@types/istanbul-lib-report" "*"
+
+"@types/istanbul-reports@^3.0.0":
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz#508b13aa344fa4976234e75dddcc34925737d821"
+ integrity sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==
+ dependencies:
+ "@types/istanbul-lib-report" "*"
+
+"@types/jest@^26.0.18":
+ version "26.0.18"
+ resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.18.tgz#3c5f9228e9ac15bd42f903f1acf2ad6ea5ed73d9"
+ integrity sha512-scDPs+mELZgsFetTgBSsIxKGrlitn9t/d2ecP+S1QSIGD+31fkMBEftLfOAX5k3tU06/0PjreJIQ+gWEbbHqpw==
+ dependencies:
+ jest-diff "^26.0.0"
+ pretty-format "^26.0.0"
+
+"@types/leaflet@^1.5.19":
+ version "1.5.19"
+ resolved "https://registry.yarnpkg.com/@types/leaflet/-/leaflet-1.5.19.tgz#f290e21fe7a4744d68bb4b0709e99ce490120e6e"
+ integrity sha512-ZAKqfvdU/+KFoCpf8aUba09F8mfSc8R2esq++Cha3E2DgwS5K/I/4eJ+0JylrVHZivgY7PSAeXFv/izP+81/MQ==
+ dependencies:
+ "@types/geojson" "*"
+
+"@types/minimatch@^3.0.3":
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d"
+ integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==
+
+"@types/node@*":
+ version "13.13.4"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-13.13.4.tgz#1581d6c16e3d4803eb079c87d4ac893ee7501c2c"
+ integrity sha512-x26ur3dSXgv5AwKS0lNfbjpCakGIduWU1DU91Zz58ONRWrIKGunmZBNv4P7N+e27sJkiGDsw/3fT4AtsqQBrBA==
+
+"@types/numeral@0.0.28":
+ version "0.0.28"
+ resolved "https://registry.yarnpkg.com/@types/numeral/-/numeral-0.0.28.tgz#e43928f0bda10b169b6f7ecf99e3ddf836b8ebe4"
+ integrity sha512-Sjsy10w6XFHDktJJdXzBJmoondAKW+LcGpRFH+9+zXEDj0cOH8BxJuZA9vUDSMAzU1YRJlsPKmZEEiTYDlICLw==
+
+"@types/plotly.js@^1.54.4":
+ version "1.54.4"
+ resolved "https://registry.yarnpkg.com/@types/plotly.js/-/plotly.js-1.54.4.tgz#ede63dbc48c9d37fb1b9b65afa0e8f59225ecee2"
+ integrity sha512-qKqNIw09Huuzz3/vkHXQeObLPMf7jbe99uTK246ZSh502xpldJxFuOmubPgSgq3bchRVJeR+mM0Dm6/FctL6tg==
+ dependencies:
+ "@types/d3" "^3"
+
+"@types/prop-types@*":
+ version "15.7.3"
+ resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7"
+ integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==
+
+"@types/react-dom@^17.0.0":
+ version "17.0.0"
+ resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-17.0.0.tgz#b3b691eb956c4b3401777ee67b900cb28415d95a"
+ integrity sha512-lUqY7OlkF/RbNtD5nIq7ot8NquXrdFrjSOR6+w9a9RFQevGi1oZO1dcJbXMeONAPKtZ2UrZOEJ5UOCVsxbLk/g==
+ dependencies:
+ "@types/react" "*"
+
+"@types/react@*", "@types/react@^17.0.0":
+ version "17.0.0"
+ resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.0.tgz#5af3eb7fad2807092f0046a1302b7823e27919b8"
+ integrity sha512-aj/L7RIMsRlWML3YB6KZiXB3fV2t41+5RBGYF8z+tAKU43Px8C3cYUZsDvf1/+Bm4FK21QWBrDutu8ZJ/70qOw==
+ dependencies:
+ "@types/prop-types" "*"
+ csstype "^3.0.2"
+
+"@types/stack-utils@^1.0.1":
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e"
+ integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==
+
+"@types/tinycolor2@^1.4.2":
+ version "1.4.2"
+ resolved "https://registry.yarnpkg.com/@types/tinycolor2/-/tinycolor2-1.4.2.tgz#721ca5c5d1a2988b4a886e35c2ffc5735b6afbdf"
+ integrity sha512-PeHg/AtdW6aaIO2a+98Xj7rWY4KC1E6yOy7AFknJQ7VXUGNrMlyxDFxJo7HqLtjQms/ZhhQX52mLVW/EX3JGOw==
+
+"@types/trusted-types@*":
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-1.0.6.tgz#569b8a08121d3203398290d602d84d73c8dcf5da"
+ integrity sha512-230RC8sFeHoT6sSUlRO6a8cAnclO06eeiq1QDfiv2FGCLWFvvERWgwIQD4FWqD9A69BN7Lzee4OXwoMVnnsWDw==
+
+"@types/yargs-parser@*":
+ version "15.0.0"
+ resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-15.0.0.tgz#cb3f9f741869e20cce330ffbeb9271590483882d"
+ integrity sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw==
+
+"@types/yargs@^13.0.0":
+ version "13.0.8"
+ resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-13.0.8.tgz#a38c22def2f1c2068f8971acb3ea734eb3c64a99"
+ integrity sha512-XAvHLwG7UQ+8M4caKIH0ZozIOYay5fQkAgyIXegXT9jPtdIGdhga+sUEdAr1CiG46aB+c64xQEYyEzlwWVTNzA==
+ dependencies:
+ "@types/yargs-parser" "*"
+
+"@types/yargs@^15.0.0":
+ version "15.0.11"
+ resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.11.tgz#361d7579ecdac1527687bcebf9946621c12ab78c"
+ integrity sha512-jfcNBxHFYJ4nPIacsi3woz1+kvUO6s1CyeEhtnDHBjHUMNj5UlW2GynmnSgiJJEdNg9yW5C8lfoNRZrHGv5EqA==
+ dependencies:
+ "@types/yargs-parser" "*"
+
+"@webassemblyjs/ast@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964"
+ integrity sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==
+ dependencies:
+ "@webassemblyjs/helper-module-context" "1.9.0"
+ "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
+ "@webassemblyjs/wast-parser" "1.9.0"
+
+"@webassemblyjs/floating-point-hex-parser@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz#3c3d3b271bddfc84deb00f71344438311d52ffb4"
+ integrity sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==
+
+"@webassemblyjs/helper-api-error@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz#203f676e333b96c9da2eeab3ccef33c45928b6a2"
+ integrity sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==
+
+"@webassemblyjs/helper-buffer@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz#a1442d269c5feb23fcbc9ef759dac3547f29de00"
+ integrity sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==
+
+"@webassemblyjs/helper-code-frame@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz#647f8892cd2043a82ac0c8c5e75c36f1d9159f27"
+ integrity sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==
+ dependencies:
+ "@webassemblyjs/wast-printer" "1.9.0"
+
+"@webassemblyjs/helper-fsm@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz#c05256b71244214671f4b08ec108ad63b70eddb8"
+ integrity sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==
+
+"@webassemblyjs/helper-module-context@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz#25d8884b76839871a08a6c6f806c3979ef712f07"
+ integrity sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==
+ dependencies:
+ "@webassemblyjs/ast" "1.9.0"
+
+"@webassemblyjs/helper-wasm-bytecode@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz#4fed8beac9b8c14f8c58b70d124d549dd1fe5790"
+ integrity sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==
+
+"@webassemblyjs/helper-wasm-section@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz#5a4138d5a6292ba18b04c5ae49717e4167965346"
+ integrity sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==
+ dependencies:
+ "@webassemblyjs/ast" "1.9.0"
+ "@webassemblyjs/helper-buffer" "1.9.0"
+ "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
+ "@webassemblyjs/wasm-gen" "1.9.0"
+
+"@webassemblyjs/ieee754@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz#15c7a0fbaae83fb26143bbacf6d6df1702ad39e4"
+ integrity sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==
+ dependencies:
+ "@xtuc/ieee754" "^1.2.0"
+
+"@webassemblyjs/leb128@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz#f19ca0b76a6dc55623a09cffa769e838fa1e1c95"
+ integrity sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==
+ dependencies:
+ "@xtuc/long" "4.2.2"
+
+"@webassemblyjs/utf8@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz#04d33b636f78e6a6813227e82402f7637b6229ab"
+ integrity sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==
+
+"@webassemblyjs/wasm-edit@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz#3fe6d79d3f0f922183aa86002c42dd256cfee9cf"
+ integrity sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==
+ dependencies:
+ "@webassemblyjs/ast" "1.9.0"
+ "@webassemblyjs/helper-buffer" "1.9.0"
+ "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
+ "@webassemblyjs/helper-wasm-section" "1.9.0"
+ "@webassemblyjs/wasm-gen" "1.9.0"
+ "@webassemblyjs/wasm-opt" "1.9.0"
+ "@webassemblyjs/wasm-parser" "1.9.0"
+ "@webassemblyjs/wast-printer" "1.9.0"
+
+"@webassemblyjs/wasm-gen@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz#50bc70ec68ded8e2763b01a1418bf43491a7a49c"
+ integrity sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==
+ dependencies:
+ "@webassemblyjs/ast" "1.9.0"
+ "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
+ "@webassemblyjs/ieee754" "1.9.0"
+ "@webassemblyjs/leb128" "1.9.0"
+ "@webassemblyjs/utf8" "1.9.0"
+
+"@webassemblyjs/wasm-opt@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz#2211181e5b31326443cc8112eb9f0b9028721a61"
+ integrity sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==
+ dependencies:
+ "@webassemblyjs/ast" "1.9.0"
+ "@webassemblyjs/helper-buffer" "1.9.0"
+ "@webassemblyjs/wasm-gen" "1.9.0"
+ "@webassemblyjs/wasm-parser" "1.9.0"
+
+"@webassemblyjs/wasm-parser@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz#9d48e44826df4a6598294aa6c87469d642fff65e"
+ integrity sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==
+ dependencies:
+ "@webassemblyjs/ast" "1.9.0"
+ "@webassemblyjs/helper-api-error" "1.9.0"
+ "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
+ "@webassemblyjs/ieee754" "1.9.0"
+ "@webassemblyjs/leb128" "1.9.0"
+ "@webassemblyjs/utf8" "1.9.0"
+
+"@webassemblyjs/wast-parser@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz#3031115d79ac5bd261556cecc3fa90a3ef451914"
+ integrity sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==
+ dependencies:
+ "@webassemblyjs/ast" "1.9.0"
+ "@webassemblyjs/floating-point-hex-parser" "1.9.0"
+ "@webassemblyjs/helper-api-error" "1.9.0"
+ "@webassemblyjs/helper-code-frame" "1.9.0"
+ "@webassemblyjs/helper-fsm" "1.9.0"
+ "@xtuc/long" "4.2.2"
+
+"@webassemblyjs/wast-printer@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz#4935d54c85fef637b00ce9f52377451d00d47899"
+ integrity sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==
+ dependencies:
+ "@webassemblyjs/ast" "1.9.0"
+ "@webassemblyjs/wast-parser" "1.9.0"
+ "@xtuc/long" "4.2.2"
+
+"@xtuc/ieee754@^1.2.0":
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790"
+ integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==
+
+"@xtuc/long@4.2.2":
+ version "4.2.2"
+ resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d"
+ integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==
+
+a-big-triangle@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/a-big-triangle/-/a-big-triangle-1.0.3.tgz#eefd30b02a8f525e8b1f72bb6bb1b0c16751c794"
+ integrity sha1-7v0wsCqPUl6LH3K7a7GwwWdRx5Q=
+ dependencies:
+ gl-buffer "^2.1.1"
+ gl-vao "^1.2.0"
+ weak-map "^1.0.5"
+
+abab@^2.0.0:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.3.tgz#623e2075e02eb2d3f2475e49f99c91846467907a"
+ integrity sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg==
+
+abbrev@1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
+ integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==
+
+abs-svg-path@^0.1.1, abs-svg-path@~0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/abs-svg-path/-/abs-svg-path-0.1.1.tgz#df601c8e8d2ba10d4a76d625e236a9a39c2723bf"
+ integrity sha1-32Acjo0roQ1KdtYl4japo5wnI78=
+
+acorn-dynamic-import@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz#482210140582a36b83c3e342e1cfebcaa9240948"
+ integrity sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==
+
+acorn-globals@^4.1.0:
+ version "4.3.4"
+ resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.4.tgz#9fa1926addc11c97308c4e66d7add0d40c3272e7"
+ integrity sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==
+ dependencies:
+ acorn "^6.0.1"
+ acorn-walk "^6.0.1"
+
+acorn-jsx@^5.0.1:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.2.0.tgz#4c66069173d6fdd68ed85239fc256226182b2ebe"
+ integrity sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==
+
+acorn-jsx@^5.3.1:
+ version "5.3.1"
+ resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b"
+ integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==
+
+acorn-walk@^6.0.1:
+ version "6.2.0"
+ resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c"
+ integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==
+
+acorn@^5.5.3:
+ version "5.7.4"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.4.tgz#3e8d8a9947d0599a1796d10225d7432f4a4acf5e"
+ integrity sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==
+
+acorn@^6.0.1, acorn@^6.1.1, acorn@^6.2.1:
+ version "6.4.1"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474"
+ integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==
+
+acorn@^7.1.1:
+ version "7.1.1"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.1.1.tgz#e35668de0b402f359de515c5482a1ab9f89a69bf"
+ integrity sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg==
+
+acorn@^7.4.0:
+ version "7.4.1"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa"
+ integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==
+
+add-line-numbers@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/add-line-numbers/-/add-line-numbers-1.0.1.tgz#48dbbdea47dbd234deafeac6c93cea6f70b4b7e3"
+ integrity sha1-SNu96kfb0jTer+rGyTzqb3C0t+M=
+ dependencies:
+ pad-left "^1.0.2"
+
+affine-hull@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/affine-hull/-/affine-hull-1.0.0.tgz#763ff1d38d063ceb7e272f17ee4d7bbcaf905c5d"
+ integrity sha1-dj/x040GPOt+Jy8X7k17vK+QXF0=
+ dependencies:
+ robust-orientation "^1.1.3"
+
+airbnb-prop-types@^2.15.0:
+ version "2.15.0"
+ resolved "https://registry.yarnpkg.com/airbnb-prop-types/-/airbnb-prop-types-2.15.0.tgz#5287820043af1eb469f5b0af0d6f70da6c52aaef"
+ integrity sha512-jUh2/hfKsRjNFC4XONQrxo/n/3GG4Tn6Hl0WlFQN5PY9OMC9loSCoAYKnZsWaP8wEfd5xcrPloK0Zg6iS1xwVA==
+ dependencies:
+ array.prototype.find "^2.1.0"
+ function.prototype.name "^1.1.1"
+ has "^1.0.3"
+ is-regex "^1.0.4"
+ object-is "^1.0.1"
+ object.assign "^4.1.0"
+ object.entries "^1.1.0"
+ prop-types "^15.7.2"
+ prop-types-exact "^1.2.0"
+ react-is "^16.9.0"
+
+ajv-errors@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d"
+ integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==
+
+ajv-keywords@^3.1.0, ajv-keywords@^3.4.1:
+ version "3.4.1"
+ resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.1.tgz#ef916e271c64ac12171fd8384eaae6b2345854da"
+ integrity sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==
+
+ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.0, ajv@^6.5.5:
+ version "6.12.0"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.0.tgz#06d60b96d87b8454a5adaba86e7854da629db4b7"
+ integrity sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw==
+ dependencies:
+ fast-deep-equal "^3.1.1"
+ fast-json-stable-stringify "^2.0.0"
+ json-schema-traverse "^0.4.1"
+ uri-js "^4.2.2"
+
+ajv@^6.12.4:
+ version "6.12.6"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
+ integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
+ dependencies:
+ fast-deep-equal "^3.1.1"
+ fast-json-stable-stringify "^2.0.0"
+ json-schema-traverse "^0.4.1"
+ uri-js "^4.2.2"
+
+align-text@^0.1.1, align-text@^0.1.3:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117"
+ integrity sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=
+ dependencies:
+ kind-of "^3.0.2"
+ longest "^1.0.1"
+ repeat-string "^1.5.2"
+
+almost-equal@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/almost-equal/-/almost-equal-1.1.0.tgz#f851c631138757994276aa2efbe8dfa3066cccdd"
+ integrity sha1-+FHGMROHV5lCdqou++jfowZszN0=
+
+alpha-complex@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/alpha-complex/-/alpha-complex-1.0.0.tgz#90865870d6b0542ae73c0c131d4ef989669b72d2"
+ integrity sha1-kIZYcNawVCrnPAwTHU75iWabctI=
+ dependencies:
+ circumradius "^1.0.0"
+ delaunay-triangulate "^1.1.6"
+
+alpha-shape@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/alpha-shape/-/alpha-shape-1.0.0.tgz#c83109923ecfda667d2163fe4f26fe24726f64a9"
+ integrity sha1-yDEJkj7P2mZ9IWP+Tyb+JHJvZKk=
+ dependencies:
+ alpha-complex "^1.0.0"
+ simplicial-complex-boundary "^1.0.0"
+
+amdefine@>=0.0.4:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5"
+ integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=
+
+ansi-colors@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348"
+ integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==
+
+ansi-escapes@^3.0.0, ansi-escapes@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b"
+ integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==
+
+ansi-regex@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
+ integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8=
+
+ansi-regex@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
+ integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=
+
+ansi-regex@^4.0.0, ansi-regex@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997"
+ integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==
+
+ansi-regex@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75"
+ integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==
+
+ansi-styles@^3.2.0, ansi-styles@^3.2.1:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
+ integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
+ dependencies:
+ color-convert "^1.9.0"
+
+ansi-styles@^4.0.0, ansi-styles@^4.1.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
+ integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
+ dependencies:
+ color-convert "^2.0.1"
+
+ansicolors@~0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.2.1.tgz#be089599097b74a5c9c4a84a0cdbcdb62bd87aef"
+ integrity sha1-vgiVmQl7dKXJxKhKDNvNtivYeu8=
+
+anymatch@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb"
+ integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==
+ dependencies:
+ micromatch "^3.1.4"
+ normalize-path "^2.1.1"
+
+aproba@^1.0.3, aproba@^1.1.1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
+ integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==
+
+are-we-there-yet@~1.1.2:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21"
+ integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==
+ dependencies:
+ delegates "^1.0.0"
+ readable-stream "^2.0.6"
+
+argparse@^1.0.7:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
+ integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
+ dependencies:
+ sprintf-js "~1.0.2"
+
+arr-diff@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520"
+ integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=
+
+arr-flatten@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1"
+ integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==
+
+arr-union@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4"
+ integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=
+
+array-bounds@^1.0.0, array-bounds@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/array-bounds/-/array-bounds-1.0.1.tgz#da11356b4e18e075a4f0c86e1f179a67b7d7ea31"
+ integrity sha512-8wdW3ZGk6UjMPJx/glyEt0sLzzwAE1bhToPsO1W2pbpR2gULyxe3BjSiuJFheP50T/GgODVPz2fuMUmIywt8cQ==
+
+array-differ@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-3.0.0.tgz#3cbb3d0f316810eafcc47624734237d6aee4ae6b"
+ integrity sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==
+
+array-equal@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93"
+ integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=
+
+array-filter@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-1.0.0.tgz#baf79e62e6ef4c2a4c0b831232daffec251f9d83"
+ integrity sha1-uveeYubvTCpMC4MSMtr/7CUfnYM=
+
+array-normalize@^1.1.4:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/array-normalize/-/array-normalize-1.1.4.tgz#d75cec57383358af38efdf6a78071aa36ae4174c"
+ integrity sha512-fCp0wKFLjvSPmCn4F5Tiw4M3lpMZoHlCjfcs7nNzuj3vqQQ1/a8cgB9DXcpDSn18c+coLnaW7rqfcYCvKbyJXg==
+ dependencies:
+ array-bounds "^1.0.0"
+
+array-range@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/array-range/-/array-range-1.0.1.tgz#f56e46591843611c6a56f77ef02eda7c50089bfc"
+ integrity sha1-9W5GWRhDYRxqVvd+8C7afFAIm/w=
+
+array-rearrange@^2.2.2:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/array-rearrange/-/array-rearrange-2.2.2.tgz#fa1a2acf8d02e88dd0c9602aa0e06a79158b2283"
+ integrity sha512-UfobP5N12Qm4Qu4fwLDIi2v6+wZsSf6snYSxAMeKhrh37YGnNWZPRmVEKc/2wfms53TLQnzfpG8wCx2Y/6NG1w==
+
+array-union@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
+ integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
+
+array-unique@^0.3.2:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
+ integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=
+
+array.prototype.find@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/array.prototype.find/-/array.prototype.find-2.1.1.tgz#3baca26108ca7affb08db06bf0be6cb3115a969c"
+ integrity sha512-mi+MYNJYLTx2eNYy+Yh6raoQacCsNeeMUaspFPh9Y141lFSsWxxB8V9mM2ye+eqiRs917J6/pJ4M9ZPzenWckA==
+ dependencies:
+ define-properties "^1.1.3"
+ es-abstract "^1.17.4"
+
+array.prototype.flat@^1.2.3:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz#0de82b426b0318dbfdb940089e38b043d37f6c7b"
+ integrity sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ==
+ dependencies:
+ define-properties "^1.1.3"
+ es-abstract "^1.17.0-next.1"
+
+arrify@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa"
+ integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==
+
+asap@~2.0.3:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46"
+ integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=
+
+asn1.js@^4.0.0:
+ version "4.10.1"
+ resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0"
+ integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==
+ dependencies:
+ bn.js "^4.0.0"
+ inherits "^2.0.1"
+ minimalistic-assert "^1.0.0"
+
+asn1@~0.2.3:
+ version "0.2.4"
+ resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136"
+ integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==
+ dependencies:
+ safer-buffer "~2.1.0"
+
+assert-plus@1.0.0, assert-plus@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
+ integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=
+
+assert@^1.1.1:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb"
+ integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==
+ dependencies:
+ object-assign "^4.1.1"
+ util "0.10.3"
+
+assign-symbols@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"
+ integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=
+
+ast-types@0.11.7:
+ version "0.11.7"
+ resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.11.7.tgz#f318bf44e339db6a320be0009ded64ec1471f46c"
+ integrity sha512-2mP3TwtkY/aTv5X3ZsMpNAbOnyoC/aMJwJSoaELPkHId0nSQgFcnU4dRW3isxiz7+zBexk0ym3WNVjMiQBnJSw==
+
+ast-types@0.13.3:
+ version "0.13.3"
+ resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.13.3.tgz#50da3f28d17bdbc7969a3a2d83a0e4a72ae755a7"
+ integrity sha512-XTZ7xGML849LkQP86sWdQzfhwbt3YwIO6MqbX9mUNYY98VKaaVZP7YNNm70IpwecbkkxmfC5IYAzOQ/2p29zRA==
+
+astral-regex@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9"
+ integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==
+
+async-each@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf"
+ integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==
+
+async-limiter@~1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd"
+ integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==
+
+asynckit@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
+ integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
+
+at-least-node@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2"
+ integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==
+
+atob-lite@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/atob-lite/-/atob-lite-1.0.0.tgz#b88dca6006922b962094f7556826bab31c4a296b"
+ integrity sha1-uI3KYAaSK5YglPdVaCa6sxxKKWs=
+
+atob-lite@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/atob-lite/-/atob-lite-2.0.0.tgz#0fef5ad46f1bd7a8502c65727f0367d5ee43d696"
+ integrity sha1-D+9a1G8b16hQLGVyfwNn1e5D1pY=
+
+atob@^2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
+ integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
+
+autoprefixer@^8.6.3:
+ version "8.6.5"
+ resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-8.6.5.tgz#343f3d193ed568b3208e00117a1b96eb691d4ee9"
+ integrity sha512-PLWJN3Xo/rycNkx+mp8iBDMTm3FeWe4VmYaZDSqL5QQB9sLsQkG5k8n+LNDFnhh9kdq2K+egL/icpctOmDHwig==
+ dependencies:
+ browserslist "^3.2.8"
+ caniuse-lite "^1.0.30000864"
+ normalize-range "^0.1.2"
+ num2fraction "^1.2.2"
+ postcss "^6.0.23"
+ postcss-value-parser "^3.2.3"
+
+aws-sign2@~0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
+ integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=
+
+aws4@^1.8.0:
+ version "1.9.1"
+ resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.9.1.tgz#7e33d8f7d449b3f673cd72deb9abdc552dbe528e"
+ integrity sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==
+
+axios@^0.19.2:
+ version "0.19.2"
+ resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.2.tgz#3ea36c5d8818d0d5f8a8a97a6d36b86cdc00cb27"
+ integrity sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA==
+ dependencies:
+ follow-redirects "1.5.10"
+
+babel-core@^7.0.0-bridge.0:
+ version "7.0.0-bridge.0"
+ resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-7.0.0-bridge.0.tgz#95a492ddd90f9b4e9a4a1da14eb335b87b634ece"
+ integrity sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==
+
+babel-jest@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-24.9.0.tgz#3fc327cb8467b89d14d7bc70e315104a783ccd54"
+ integrity sha512-ntuddfyiN+EhMw58PTNL1ph4C9rECiQXjI4nMMBKBaNjXvqLdkXpPRcMSr4iyBrJg/+wz9brFUD6RhOAT6r4Iw==
+ dependencies:
+ "@jest/transform" "^24.9.0"
+ "@jest/types" "^24.9.0"
+ "@types/babel__core" "^7.1.0"
+ babel-plugin-istanbul "^5.1.0"
+ babel-preset-jest "^24.9.0"
+ chalk "^2.4.2"
+ slash "^2.0.0"
+
+babel-loader@^8.1.0:
+ version "8.1.0"
+ resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.1.0.tgz#c611d5112bd5209abe8b9fa84c3e4da25275f1c3"
+ integrity sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw==
+ dependencies:
+ find-cache-dir "^2.1.0"
+ loader-utils "^1.4.0"
+ mkdirp "^0.5.3"
+ pify "^4.0.1"
+ schema-utils "^2.6.5"
+
+babel-plugin-dynamic-import-node@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz#f00f507bdaa3c3e3ff6e7e5e98d90a7acab96f7f"
+ integrity sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==
+ dependencies:
+ object.assign "^4.1.0"
+
+babel-plugin-istanbul@^5.1.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-5.2.0.tgz#df4ade83d897a92df069c4d9a25cf2671293c854"
+ integrity sha512-5LphC0USA8t4i1zCtjbbNb6jJj/9+X6P37Qfirc/70EQ34xKlMW+a1RHGwxGI+SwWpNwZ27HqvzAobeqaXwiZw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ find-up "^3.0.0"
+ istanbul-lib-instrument "^3.3.0"
+ test-exclude "^5.2.3"
+
+babel-plugin-istanbul@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz#e159ccdc9af95e0b570c75b4573b7c34d671d765"
+ integrity sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@istanbuljs/load-nyc-config" "^1.0.0"
+ "@istanbuljs/schema" "^0.1.2"
+ istanbul-lib-instrument "^4.0.0"
+ test-exclude "^6.0.0"
+
+babel-plugin-jest-hoist@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.9.0.tgz#4f837091eb407e01447c8843cbec546d0002d756"
+ integrity sha512-2EMA2P8Vp7lG0RAzr4HXqtYwacfMErOuv1U3wrvxHX6rD1sV6xS3WXG3r8TRQ2r6w8OhvSdWt+z41hQNwNm3Xw==
+ dependencies:
+ "@types/babel__traverse" "^7.0.6"
+
+babel-plugin-module-resolver@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-module-resolver/-/babel-plugin-module-resolver-4.0.0.tgz#8f3a3d9d48287dc1d3b0d5595113adabd36a847f"
+ integrity sha512-3pdEq3PXALilSJ6dnC4wMWr0AZixHRM4utpdpBR9g5QG7B7JwWyukQv7a9hVxkbGFl+nQbrHDqqQOIBtTXTP/Q==
+ dependencies:
+ find-babel-config "^1.2.0"
+ glob "^7.1.6"
+ pkg-up "^3.1.0"
+ reselect "^4.0.0"
+ resolve "^1.13.1"
+
+babel-preset-jest@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-24.9.0.tgz#192b521e2217fb1d1f67cf73f70c336650ad3cdc"
+ integrity sha512-izTUuhE4TMfTRPF92fFwD2QfdXaZW08qvWTFCI51V8rW5x00UuPgc3ajRoWofXOuxjfcOM5zzSYsQS3H8KGCAg==
+ dependencies:
+ "@babel/plugin-syntax-object-rest-spread" "^7.0.0"
+ babel-plugin-jest-hoist "^24.9.0"
+
+balanced-match@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
+ integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
+
+barycentric@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/barycentric/-/barycentric-1.0.1.tgz#f1562bb891b26f4fec463a82eeda3657800ec688"
+ integrity sha1-8VYruJGyb0/sRjqC7to2V4AOxog=
+ dependencies:
+ robust-linear-solve "^1.0.0"
+
+base64-js@^1.0.2:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1"
+ integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==
+
+base@^0.11.1:
+ version "0.11.2"
+ resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f"
+ integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==
+ dependencies:
+ cache-base "^1.0.1"
+ class-utils "^0.3.5"
+ component-emitter "^1.2.1"
+ define-property "^1.0.0"
+ isobject "^3.0.1"
+ mixin-deep "^1.2.0"
+ pascalcase "^0.1.1"
+
+bcrypt-pbkdf@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e"
+ integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=
+ dependencies:
+ tweetnacl "^0.14.3"
+
+beautifymarker@^1.0.7:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/beautifymarker/-/beautifymarker-1.0.7.tgz#b613092b90bfa37960716caca1aa3a93446657d8"
+ integrity sha512-iWj/8cZOJ2jW7N7VkmmmPg7gFLgU6C8ArX6m6/hkIz0LaktVWtE+kpL351AE6MK5sX57/CzzXH54jlYD9agxnQ==
+
+big-rat@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/big-rat/-/big-rat-1.0.4.tgz#768d093bb57930dd18ed575c7fca27dc5391adea"
+ integrity sha1-do0JO7V5MN0Y7Vdcf8on3FORreo=
+ dependencies:
+ bit-twiddle "^1.0.2"
+ bn.js "^4.11.6"
+ double-bits "^1.1.1"
+
+big.js@^5.2.2:
+ version "5.2.2"
+ resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328"
+ integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==
+
+binary-extensions@^1.0.0:
+ version "1.13.1"
+ resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65"
+ integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==
+
+binary-search-bounds@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/binary-search-bounds/-/binary-search-bounds-1.0.0.tgz#323ca317e3f2a40f4244c7255f5384a5b207bb69"
+ integrity sha1-MjyjF+PypA9CRMclX1OEpbIHu2k=
+
+binary-search-bounds@^2.0.3, binary-search-bounds@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/binary-search-bounds/-/binary-search-bounds-2.0.4.tgz#eea0e4081da93baa851c7d851a7e636c3d51307f"
+ integrity sha512-2hg5kgdKql5ClF2ErBcSx0U5bnl5hgS4v7wMnLFodyR47yMtj2w+UAZB+0CiqyHct2q543i7Bi4/aMIegorCCg==
+
+bindings@^1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df"
+ integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==
+ dependencies:
+ file-uri-to-path "1.0.0"
+
+bit-twiddle@^1.0.0, bit-twiddle@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/bit-twiddle/-/bit-twiddle-1.0.2.tgz#0c6c1fabe2b23d17173d9a61b7b7093eb9e1769e"
+ integrity sha1-DGwfq+KyPRcXPZpht7cJPrnhdp4=
+
+bit-twiddle@~0.0.1:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/bit-twiddle/-/bit-twiddle-0.0.2.tgz#c2eaebb952a3b94acc140497e1cdcd2f1a33f58e"
+ integrity sha1-wurruVKjuUrMFASX4c3NLxoz9Y4=
+
+bitmap-sdf@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/bitmap-sdf/-/bitmap-sdf-1.0.3.tgz#c99913e5729357a6fd350de34158180c013880b2"
+ integrity sha512-ojYySSvWTx21cbgntR942zgEgqj38wHctN64vr4vYRFf3GKVmI23YlA94meWGkFslidwLwGCsMy2laJ3g/94Sg==
+ dependencies:
+ clamp "^1.0.1"
+
+bl@^1.0.0:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.3.tgz#1e8dd80142eac80d7158c9dccc047fb620e035e7"
+ integrity sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==
+ dependencies:
+ readable-stream "^2.3.5"
+ safe-buffer "^5.1.1"
+
+bluebird@^3.5.5:
+ version "3.7.2"
+ resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
+ integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==
+
+bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.11.6, bn.js@^4.4.0:
+ version "4.11.8"
+ resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f"
+ integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==
+
+boolbase@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
+ integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24=
+
+boundary-cells@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/boundary-cells/-/boundary-cells-2.0.1.tgz#e905a8d1419cf47cb36be3dbf525db5e24de0042"
+ integrity sha1-6QWo0UGc9Hyza+Pb9SXbXiTeAEI=
+ dependencies:
+ tape "^4.0.0"
+
+box-intersect@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/box-intersect/-/box-intersect-1.0.2.tgz#4693ad63e828868d0654b114e09364d6281f3fbd"
+ integrity sha512-yJeMwlmFPG1gIa7Rs/cGXeI6iOj6Qz5MG5PE61xLKpElUGzmJ4abm+qsLpzxKJFpsSDq742BQEocr8dI2t8Nxw==
+ dependencies:
+ bit-twiddle "^1.0.2"
+ typedarray-pool "^1.1.0"
+
+brace-expansion@^1.1.7:
+ version "1.1.11"
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
+ integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
+ dependencies:
+ balanced-match "^1.0.0"
+ concat-map "0.0.1"
+
+braces@^2.3.1, braces@^2.3.2:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729"
+ integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==
+ dependencies:
+ arr-flatten "^1.1.0"
+ array-unique "^0.3.2"
+ extend-shallow "^2.0.1"
+ fill-range "^4.0.0"
+ isobject "^3.0.1"
+ repeat-element "^1.1.2"
+ snapdragon "^0.8.1"
+ snapdragon-node "^2.0.1"
+ split-string "^3.0.2"
+ to-regex "^3.0.1"
+
+braces@^3.0.1:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
+ integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
+ dependencies:
+ fill-range "^7.0.1"
+
+brorand@^1.0.1:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
+ integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=
+
+browser-process-hrtime@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626"
+ integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==
+
+browser-resolve@^1.11.3:
+ version "1.11.3"
+ resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6"
+ integrity sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==
+ dependencies:
+ resolve "1.1.7"
+
+browserify-aes@^1.0.0, browserify-aes@^1.0.4:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48"
+ integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==
+ dependencies:
+ buffer-xor "^1.0.3"
+ cipher-base "^1.0.0"
+ create-hash "^1.1.0"
+ evp_bytestokey "^1.0.3"
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
+browserify-cipher@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0"
+ integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==
+ dependencies:
+ browserify-aes "^1.0.4"
+ browserify-des "^1.0.0"
+ evp_bytestokey "^1.0.0"
+
+browserify-des@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c"
+ integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==
+ dependencies:
+ cipher-base "^1.0.1"
+ des.js "^1.0.0"
+ inherits "^2.0.1"
+ safe-buffer "^5.1.2"
+
+browserify-rsa@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524"
+ integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=
+ dependencies:
+ bn.js "^4.1.0"
+ randombytes "^2.0.1"
+
+browserify-sign@^4.0.0:
+ version "4.0.4"
+ resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298"
+ integrity sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=
+ dependencies:
+ bn.js "^4.1.1"
+ browserify-rsa "^4.0.0"
+ create-hash "^1.1.0"
+ create-hmac "^1.1.2"
+ elliptic "^6.0.0"
+ inherits "^2.0.1"
+ parse-asn1 "^5.0.0"
+
+browserify-zlib@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f"
+ integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==
+ dependencies:
+ pako "~1.0.5"
+
+browserslist@^3.2.8:
+ version "3.2.8"
+ resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-3.2.8.tgz#b0005361d6471f0f5952797a76fc985f1f978fc6"
+ integrity sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==
+ dependencies:
+ caniuse-lite "^1.0.30000844"
+ electron-to-chromium "^1.3.47"
+
+browserslist@^4.8.3, browserslist@^4.9.1:
+ version "4.11.1"
+ resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.11.1.tgz#92f855ee88d6e050e7e7311d987992014f1a1f1b"
+ integrity sha512-DCTr3kDrKEYNw6Jb9HFxVLQNaue8z+0ZfRBRjmCunKDEXEBajKDj2Y+Uelg+Pi29OnvaSGwjOsnRyNEkXzHg5g==
+ dependencies:
+ caniuse-lite "^1.0.30001038"
+ electron-to-chromium "^1.3.390"
+ node-releases "^1.1.53"
+ pkg-up "^2.0.0"
+
+bser@2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05"
+ integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==
+ dependencies:
+ node-int64 "^0.4.0"
+
+buble@^0.19.3:
+ version "0.19.8"
+ resolved "https://registry.yarnpkg.com/buble/-/buble-0.19.8.tgz#d642f0081afab66dccd897d7b6360d94030b9d3d"
+ integrity sha512-IoGZzrUTY5fKXVkgGHw3QeXFMUNBFv+9l8a4QJKG1JhG3nCMHTdEX1DCOg8568E2Q9qvAQIiSokv6Jsgx8p2cA==
+ dependencies:
+ acorn "^6.1.1"
+ acorn-dynamic-import "^4.0.0"
+ acorn-jsx "^5.0.1"
+ chalk "^2.4.2"
+ magic-string "^0.25.3"
+ minimist "^1.2.0"
+ os-homedir "^2.0.0"
+ regexpu-core "^4.5.4"
+
+bubleify@^1.1.0, bubleify@^1.2.0:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/bubleify/-/bubleify-1.2.1.tgz#c11fa33fa59d5b9b747d4e486f43889084257f37"
+ integrity sha512-vp3NHmaQVoKaKWvi15FTMinPNjfp+47+/kFJ9ifezdMF/CBLArCxDVUh+FQE3qRxCRj1qyjJqilTBHHqlM8MaQ==
+ dependencies:
+ buble "^0.19.3"
+
+buffer-from@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
+ integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
+
+buffer-xor@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9"
+ integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=
+
+buffer@^4.3.0:
+ version "4.9.2"
+ resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8"
+ integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==
+ dependencies:
+ base64-js "^1.0.2"
+ ieee754 "^1.1.4"
+ isarray "^1.0.0"
+
+builtin-status-codes@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8"
+ integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=
+
+cacache@^12.0.2:
+ version "12.0.4"
+ resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c"
+ integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==
+ dependencies:
+ bluebird "^3.5.5"
+ chownr "^1.1.1"
+ figgy-pudding "^3.5.1"
+ glob "^7.1.4"
+ graceful-fs "^4.1.15"
+ infer-owner "^1.0.3"
+ lru-cache "^5.1.1"
+ mississippi "^3.0.0"
+ mkdirp "^0.5.1"
+ move-concurrently "^1.0.1"
+ promise-inflight "^1.0.1"
+ rimraf "^2.6.3"
+ ssri "^6.0.1"
+ unique-filename "^1.1.1"
+ y18n "^4.0.0"
+
+cache-base@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2"
+ integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==
+ dependencies:
+ collection-visit "^1.0.0"
+ component-emitter "^1.2.1"
+ get-value "^2.0.6"
+ has-value "^1.0.0"
+ isobject "^3.0.1"
+ set-value "^2.0.0"
+ to-object-path "^0.3.0"
+ union-value "^1.0.0"
+ unset-value "^1.0.0"
+
+callsites@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
+ integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
+
+camelcase@^1.0.2:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39"
+ integrity sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=
+
+camelcase@^5.0.0, camelcase@^5.3.1:
+ version "5.3.1"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
+ integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
+
+caniuse-lite@^1.0.30000844, caniuse-lite@^1.0.30000864, caniuse-lite@^1.0.30001038:
+ version "1.0.30001039"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001039.tgz#b3814a1c38ffeb23567f8323500c09526a577bbe"
+ integrity sha512-SezbWCTT34eyFoWHgx8UWso7YtvtM7oosmFoXbCkdC6qJzRfBTeTgE9REtKtiuKXuMwWTZEvdnFNGAyVMorv8Q==
+
+canvas-fit@^1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/canvas-fit/-/canvas-fit-1.5.0.tgz#ae13be66ade42f5be0e487e345fce30a5e5b5e5f"
+ integrity sha1-rhO+Zq3kL1vg5IfjRfzjCl5bXl8=
+ dependencies:
+ element-size "^1.1.1"
+
+capture-exit@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4"
+ integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==
+ dependencies:
+ rsvp "^4.8.4"
+
+cardinal@~0.4.2:
+ version "0.4.4"
+ resolved "https://registry.yarnpkg.com/cardinal/-/cardinal-0.4.4.tgz#ca5bb68a5b511b90fe93b9acea49bdee5c32bfe2"
+ integrity sha1-ylu2iltRG5D+k7ms6km97lwyv+I=
+ dependencies:
+ ansicolors "~0.2.1"
+ redeyed "~0.4.0"
+
+caseless@~0.12.0:
+ version "0.12.0"
+ resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
+ integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=
+
+cdt2d@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/cdt2d/-/cdt2d-1.0.0.tgz#4f212434bcd67bdb3d68b8fef4acdc2c54415141"
+ integrity sha1-TyEkNLzWe9s9aLj+9KzcLFRBUUE=
+ dependencies:
+ binary-search-bounds "^2.0.3"
+ robust-in-sphere "^1.1.3"
+ robust-orientation "^1.1.3"
+
+cell-orientation@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/cell-orientation/-/cell-orientation-1.0.1.tgz#b504ad96a66ad286d9edd985a2253d03b80d2850"
+ integrity sha1-tQStlqZq0obZ7dmFoiU9A7gNKFA=
+
+center-align@^0.1.1:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad"
+ integrity sha1-qg0yYptu6XIgBBHL1EYckHvCt60=
+ dependencies:
+ align-text "^0.1.3"
+ lazy-cache "^1.0.3"
+
+chalk@2.4.2, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.4.1, chalk@^2.4.2:
+ version "2.4.2"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
+ integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
+ dependencies:
+ ansi-styles "^3.2.1"
+ escape-string-regexp "^1.0.5"
+ supports-color "^5.3.0"
+
+chalk@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a"
+ integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==
+ dependencies:
+ ansi-styles "^4.1.0"
+ supports-color "^7.1.0"
+
+cheerio@^1.0.0-rc.3:
+ version "1.0.0-rc.3"
+ resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.3.tgz#094636d425b2e9c0f4eb91a46c05630c9a1a8bf6"
+ integrity sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA==
+ dependencies:
+ css-select "~1.2.0"
+ dom-serializer "~0.1.1"
+ entities "~1.1.1"
+ htmlparser2 "^3.9.1"
+ lodash "^4.15.0"
+ parse5 "^3.0.1"
+
+chokidar@^2.1.8:
+ version "2.1.8"
+ resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917"
+ integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==
+ dependencies:
+ anymatch "^2.0.0"
+ async-each "^1.0.1"
+ braces "^2.3.2"
+ glob-parent "^3.1.0"
+ inherits "^2.0.3"
+ is-binary-path "^1.0.0"
+ is-glob "^4.0.0"
+ normalize-path "^3.0.0"
+ path-is-absolute "^1.0.0"
+ readdirp "^2.2.1"
+ upath "^1.1.1"
+ optionalDependencies:
+ fsevents "^1.2.7"
+
+chownr@^1.1.1:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b"
+ integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==
+
+chroma-js@^1.3.6:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/chroma-js/-/chroma-js-1.4.1.tgz#eb2d9c4d1ff24616be84b35119f4d26f8205f134"
+ integrity sha512-jTwQiT859RTFN/vIf7s+Vl/Z2LcMrvMv3WUFmd/4u76AdlFC0NTNgqEEFPcRiHmAswPsMiQEDZLM8vX8qXpZNQ==
+
+chrome-trace-event@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4"
+ integrity sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==
+ dependencies:
+ tslib "^1.9.0"
+
+ci-info@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46"
+ integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==
+
+cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de"
+ integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==
+ dependencies:
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
+circumcenter@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/circumcenter/-/circumcenter-1.0.0.tgz#20d7aa13b17fbac52f52da4f54c6ac8b906ee529"
+ integrity sha1-INeqE7F/usUvUtpPVMasi5Bu5Sk=
+ dependencies:
+ dup "^1.0.0"
+ robust-linear-solve "^1.0.0"
+
+circumradius@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/circumradius/-/circumradius-1.0.0.tgz#706c447e3e55cd1ed3d11bd133e37c252cc305b5"
+ integrity sha1-cGxEfj5VzR7T0RvRM+N8JSzDBbU=
+ dependencies:
+ circumcenter "^1.0.0"
+
+clamp@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/clamp/-/clamp-1.0.1.tgz#66a0e64011816e37196828fdc8c8c147312c8634"
+ integrity sha1-ZqDmQBGBbjcZaCj9yMjBRzEshjQ=
+
+class-utils@^0.3.5:
+ version "0.3.6"
+ resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463"
+ integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==
+ dependencies:
+ arr-union "^3.1.0"
+ define-property "^0.2.5"
+ isobject "^3.0.0"
+ static-extend "^0.1.1"
+
+classnames@^2.2.5, classnames@^2.2.6:
+ version "2.2.6"
+ resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce"
+ integrity sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==
+
+clean-pslg@^1.1.0, clean-pslg@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/clean-pslg/-/clean-pslg-1.1.2.tgz#bd35c7460b7e8ab5a9f761a5ed51796aa3c86c11"
+ integrity sha1-vTXHRgt+irWp92Gl7VF5aqPIbBE=
+ dependencies:
+ big-rat "^1.0.3"
+ box-intersect "^1.0.1"
+ nextafter "^1.0.0"
+ rat-vec "^1.1.1"
+ robust-segment-intersect "^1.0.1"
+ union-find "^1.0.2"
+ uniq "^1.0.1"
+
+cli-cursor@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5"
+ integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=
+ dependencies:
+ restore-cursor "^2.0.0"
+
+cliui@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1"
+ integrity sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=
+ dependencies:
+ center-align "^0.1.1"
+ right-align "^0.1.1"
+ wordwrap "0.0.2"
+
+cliui@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5"
+ integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==
+ dependencies:
+ string-width "^3.1.0"
+ strip-ansi "^5.2.0"
+ wrap-ansi "^5.1.0"
+
+cliui@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1"
+ integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==
+ dependencies:
+ string-width "^4.2.0"
+ strip-ansi "^6.0.0"
+ wrap-ansi "^6.2.0"
+
+clone@^2.1.1, clone@^2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f"
+ integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=
+
+co@^4.6.0:
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
+ integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=
+
+code-point-at@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
+ integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=
+
+collection-visit@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0"
+ integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=
+ dependencies:
+ map-visit "^1.0.0"
+ object-visit "^1.0.0"
+
+color-alpha@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/color-alpha/-/color-alpha-1.0.4.tgz#c141dc926e95fc3db647d0e14e5bc3651c29e040"
+ integrity sha512-lr8/t5NPozTSqli+duAN+x+no/2WaKTeWvxhHGN+aXT6AJ8vPlzLa7UriyjWak0pSC2jHol9JgjBYnnHsGha9A==
+ dependencies:
+ color-parse "^1.3.8"
+
+color-convert@^1.9.0:
+ version "1.9.3"
+ resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
+ integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
+ dependencies:
+ color-name "1.1.3"
+
+color-convert@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
+ integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
+ dependencies:
+ color-name "~1.1.4"
+
+color-id@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/color-id/-/color-id-1.1.0.tgz#5e9159b99a73ac98f74820cb98a15fde3d7e034c"
+ integrity sha512-2iRtAn6dC/6/G7bBIo0uupVrIne1NsQJvJxZOBCzQOfk7jRq97feaDZ3RdzuHakRXXnHGNwglto3pqtRx1sX0g==
+ dependencies:
+ clamp "^1.0.1"
+
+color-name@1.1.3, color-name@^1.0.0:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
+ integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
+
+color-name@~1.1.4:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
+ integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
+
+color-normalize@1.5.0, color-normalize@^1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/color-normalize/-/color-normalize-1.5.0.tgz#ee610af9acb15daf73e77a945a847b18e40772da"
+ integrity sha512-rUT/HDXMr6RFffrR53oX3HGWkDOP9goSAQGBkUaAYKjOE2JxozccdGyufageWDlInRAjm/jYPrf/Y38oa+7obw==
+ dependencies:
+ clamp "^1.0.1"
+ color-rgba "^2.1.1"
+ dtype "^2.0.0"
+
+color-parse@^1.3.8:
+ version "1.3.8"
+ resolved "https://registry.yarnpkg.com/color-parse/-/color-parse-1.3.8.tgz#eaf54cd385cb34c0681f18c218aca38478082fa3"
+ integrity sha512-1Y79qFv0n1xair3lNMTNeoFvmc3nirMVBij24zbs1f13+7fPpQClMg5b4AuKXLt3szj7BRlHMCXHplkce6XlmA==
+ dependencies:
+ color-name "^1.0.0"
+ defined "^1.0.0"
+ is-plain-obj "^1.1.0"
+
+color-rgba@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/color-rgba/-/color-rgba-2.1.1.tgz#4633b83817c7406c90b3d7bf4d1acfa48dde5c83"
+ integrity sha512-VaX97wsqrMwLSOR6H7rU1Doa2zyVdmShabKrPEIFywLlHoibgD3QW9Dw6fSqM4+H/LfjprDNAUUW31qEQcGzNw==
+ dependencies:
+ clamp "^1.0.1"
+ color-parse "^1.3.8"
+ color-space "^1.14.6"
+
+color-space@^1.14.6:
+ version "1.16.0"
+ resolved "https://registry.yarnpkg.com/color-space/-/color-space-1.16.0.tgz#611781bca41cd8582a1466fd9e28a7d3d89772a2"
+ integrity sha512-A6WMiFzunQ8KEPFmj02OnnoUnqhmSaHaZ/0LVFcPTdlvm8+3aMJ5x1HRHy3bDHPkovkf4sS0f4wsVvwk71fKkg==
+ dependencies:
+ hsluv "^0.0.3"
+ mumath "^3.3.4"
+
+colormap@^2.3.1:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/colormap/-/colormap-2.3.1.tgz#9f2ab643591c0728d32332d5480b2487a4e0f249"
+ integrity sha512-TEzNlo/qYp6pBoR2SK9JiV+DG1cmUcVO/+DEJqVPSHIKNlWh5L5L4FYog7b/h0bAnhKhpOAvx/c1dFp2QE9sFw==
+ dependencies:
+ lerp "^1.0.3"
+
+colors@^1.1.2:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78"
+ integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==
+
+combined-stream@^1.0.6, combined-stream@~1.0.6:
+ version "1.0.8"
+ resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
+ integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
+ dependencies:
+ delayed-stream "~1.0.0"
+
+commander@2, commander@^2.15.1, commander@^2.19.0, commander@^2.20.0:
+ version "2.20.3"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
+ integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
+
+commander@^4.0.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068"
+ integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==
+
+commondir@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
+ integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=
+
+compare-angle@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/compare-angle/-/compare-angle-1.0.1.tgz#a4eb63416ea3c747fc6bd6c8b63668b4de4fa129"
+ integrity sha1-pOtjQW6jx0f8a9bItjZotN5PoSk=
+ dependencies:
+ robust-orientation "^1.0.2"
+ robust-product "^1.0.0"
+ robust-sum "^1.0.0"
+ signum "^0.0.0"
+ two-sum "^1.0.0"
+
+compare-cell@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/compare-cell/-/compare-cell-1.0.0.tgz#a9eb708f6e0e41aef7aa566b130f1968dc9e1aaa"
+ integrity sha1-qetwj24OQa73qlZrEw8ZaNyeGqo=
+
+compare-oriented-cell@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/compare-oriented-cell/-/compare-oriented-cell-1.0.1.tgz#6a149feef9dfc4f8fc62358e51dd42effbbdc39e"
+ integrity sha1-ahSf7vnfxPj8YjWOUd1C7/u9w54=
+ dependencies:
+ cell-orientation "^1.0.1"
+ compare-cell "^1.0.0"
+
+component-emitter@^1.2.1:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0"
+ integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==
+
+compute-dims@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/compute-dims/-/compute-dims-1.1.0.tgz#6d5b712929b6c531af3b4d580ed5adacbbd77e0c"
+ integrity sha512-YHMiIKjH/8Eom8zATk3g8/lH3HxGCZcVQyEfEoVrfWI7od/WRpTgRGShnei3jArYSx77mQqPxZNokjGHCdLfxg==
+ dependencies:
+ utils-copy "^1.0.0"
+ validate.io-array "^1.0.6"
+ validate.io-matrix-like "^1.0.2"
+ validate.io-ndarray-like "^1.0.0"
+ validate.io-positive-integer "^1.0.0"
+
+concat-map@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+ integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
+
+concat-stream@^1.5.0, concat-stream@^1.5.2, concat-stream@~1.6.0:
+ version "1.6.2"
+ resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"
+ integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==
+ dependencies:
+ buffer-from "^1.0.0"
+ inherits "^2.0.3"
+ readable-stream "^2.2.2"
+ typedarray "^0.0.6"
+
+console-browserify@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336"
+ integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==
+
+console-control-strings@^1.0.0, console-control-strings@~1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
+ integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=
+
+const-max-uint32@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/const-max-uint32/-/const-max-uint32-1.0.2.tgz#f009bb6230e678ed874dd2d6a9cd9e3cbfabb676"
+ integrity sha1-8Am7YjDmeO2HTdLWqc2ePL+rtnY=
+
+const-pinf-float64@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/const-pinf-float64/-/const-pinf-float64-1.0.0.tgz#f6efb0d79f9c0986d3e79f2923abf9b70b63d726"
+ integrity sha1-9u+w15+cCYbT558pI6v5twtj1yY=
+
+constants-browserify@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75"
+ integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=
+
+convert-source-map@^1.1.0, convert-source-map@^1.4.0, convert-source-map@^1.7.0:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442"
+ integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==
+ dependencies:
+ safe-buffer "~5.1.1"
+
+convex-hull@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/convex-hull/-/convex-hull-1.0.3.tgz#20a3aa6ce87f4adea2ff7d17971c9fc1c67e1fff"
+ integrity sha1-IKOqbOh/St6i/30XlxyfwcZ+H/8=
+ dependencies:
+ affine-hull "^1.0.0"
+ incremental-convex-hull "^1.0.1"
+ monotone-convex-hull-2d "^1.0.1"
+
+copy-concurrently@^1.0.0:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0"
+ integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==
+ dependencies:
+ aproba "^1.1.1"
+ fs-write-stream-atomic "^1.0.8"
+ iferr "^0.1.5"
+ mkdirp "^0.5.1"
+ rimraf "^2.5.4"
+ run-queue "^1.0.0"
+
+copy-descriptor@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
+ integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=
+
+core-js-compat@^3.6.2:
+ version "3.6.4"
+ resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.6.4.tgz#938476569ebb6cda80d339bcf199fae4f16fff17"
+ integrity sha512-zAa3IZPvsJ0slViBQ2z+vgyyTuhd3MFn1rBQjZSKVEgB0UMYhUkCj9jJUVPgGTGqWvsBVmfnruXgTcNyTlEiSA==
+ dependencies:
+ browserslist "^4.8.3"
+ semver "7.0.0"
+
+core-util-is@1.0.2, core-util-is@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
+ integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
+
+country-regex@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/country-regex/-/country-regex-1.1.0.tgz#51c333dcdf12927b7e5eeb9c10ac8112a6120896"
+ integrity sha1-UcMz3N8Sknt+XuucEKyBEqYSCJY=
+
+create-ecdh@^4.0.0:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff"
+ integrity sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==
+ dependencies:
+ bn.js "^4.1.0"
+ elliptic "^6.0.0"
+
+create-hash@^1.1.0, create-hash@^1.1.2:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196"
+ integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==
+ dependencies:
+ cipher-base "^1.0.1"
+ inherits "^2.0.1"
+ md5.js "^1.3.4"
+ ripemd160 "^2.0.1"
+ sha.js "^2.4.0"
+
+create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff"
+ integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==
+ dependencies:
+ cipher-base "^1.0.3"
+ create-hash "^1.1.0"
+ inherits "^2.0.1"
+ ripemd160 "^2.0.0"
+ safe-buffer "^5.0.1"
+ sha.js "^2.4.8"
+
+create-jest-runner@^0.5.3:
+ version "0.5.3"
+ resolved "https://registry.yarnpkg.com/create-jest-runner/-/create-jest-runner-0.5.3.tgz#1387e2ce70b08e4c989ae55f677005b64f9ba97b"
+ integrity sha512-a9VY2doMBmzRollJB3Ft3/Y5fBceSWJ4gdyVsg4/d7nP1S4715VG939s2VnITDj79YBmRgKhjGjNRv1c+Kre1g==
+ dependencies:
+ chalk "^2.4.2"
+ jest-worker "^24.0.0"
+ throat "^4.1.0"
+
+cross-spawn@6.0.5, cross-spawn@^6.0.0, cross-spawn@^6.0.5:
+ version "6.0.5"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
+ integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==
+ dependencies:
+ nice-try "^1.0.4"
+ path-key "^2.0.1"
+ semver "^5.5.0"
+ shebang-command "^1.2.0"
+ which "^1.2.9"
+
+cross-spawn@^7.0.2:
+ version "7.0.3"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
+ integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
+ dependencies:
+ path-key "^3.1.0"
+ shebang-command "^2.0.0"
+ which "^2.0.1"
+
+crypto-browserify@^3.11.0:
+ version "3.12.0"
+ resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec"
+ integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==
+ dependencies:
+ browserify-cipher "^1.0.0"
+ browserify-sign "^4.0.0"
+ create-ecdh "^4.0.0"
+ create-hash "^1.1.0"
+ create-hmac "^1.1.0"
+ diffie-hellman "^5.0.0"
+ inherits "^2.0.1"
+ pbkdf2 "^3.0.3"
+ public-encrypt "^4.0.0"
+ randombytes "^2.0.0"
+ randomfill "^1.0.3"
+
+css-font-size-keywords@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/css-font-size-keywords/-/css-font-size-keywords-1.0.0.tgz#854875ace9aca6a8d2ee0d345a44aae9bb6db6cb"
+ integrity sha1-hUh1rOmspqjS7g00WkSq6btttss=
+
+css-font-stretch-keywords@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/css-font-stretch-keywords/-/css-font-stretch-keywords-1.0.1.tgz#50cee9b9ba031fb5c952d4723139f1e107b54b10"
+ integrity sha1-UM7puboDH7XJUtRyMTnx4Qe1SxA=
+
+css-font-style-keywords@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/css-font-style-keywords/-/css-font-style-keywords-1.0.1.tgz#5c3532813f63b4a1de954d13cea86ab4333409e4"
+ integrity sha1-XDUygT9jtKHelU0TzqhqtDM0CeQ=
+
+css-font-weight-keywords@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/css-font-weight-keywords/-/css-font-weight-keywords-1.0.0.tgz#9bc04671ac85bc724b574ef5d3ac96b0d604fd97"
+ integrity sha1-m8BGcayFvHJLV07106yWsNYE/Zc=
+
+css-font@^1.0.0, css-font@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/css-font/-/css-font-1.2.0.tgz#e73cbdc11fd87c8e6c928ad7098a9771c8c2b6e3"
+ integrity sha512-V4U4Wps4dPDACJ4WpgofJ2RT5Yqwe1lEH6wlOOaIxMi0gTjdIijsc5FmxQlZ7ZZyKQkkutqqvULOp07l9c7ssA==
+ dependencies:
+ css-font-size-keywords "^1.0.0"
+ css-font-stretch-keywords "^1.0.1"
+ css-font-style-keywords "^1.0.1"
+ css-font-weight-keywords "^1.0.0"
+ css-global-keywords "^1.0.1"
+ css-system-font-keywords "^1.0.0"
+ pick-by-alias "^1.2.0"
+ string-split-by "^1.0.0"
+ unquote "^1.1.0"
+
+css-global-keywords@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/css-global-keywords/-/css-global-keywords-1.0.1.tgz#72a9aea72796d019b1d2a3252de4e5aaa37e4a69"
+ integrity sha1-cqmupyeW0Bmx0qMlLeTlqqN+Smk=
+
+css-loader@^3.5.2:
+ version "3.5.2"
+ resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-3.5.2.tgz#6483ae56f48a7f901fbe07dde2fc96b01eafab3c"
+ integrity sha512-hDL0DPopg6zQQSRlZm0hyeaqIRnL0wbWjay9BZxoiJBpbfOW4WHfbaYQhwnDmEa0kZUc1CJ3IFo15ot1yULMIQ==
+ dependencies:
+ camelcase "^5.3.1"
+ cssesc "^3.0.0"
+ icss-utils "^4.1.1"
+ loader-utils "^1.2.3"
+ normalize-path "^3.0.0"
+ postcss "^7.0.27"
+ postcss-modules-extract-imports "^2.0.0"
+ postcss-modules-local-by-default "^3.0.2"
+ postcss-modules-scope "^2.2.0"
+ postcss-modules-values "^3.0.0"
+ postcss-value-parser "^4.0.3"
+ schema-utils "^2.6.5"
+ semver "^6.3.0"
+
+css-select@~1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858"
+ integrity sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=
+ dependencies:
+ boolbase "~1.0.0"
+ css-what "2.1"
+ domutils "1.5.1"
+ nth-check "~1.0.1"
+
+css-system-font-keywords@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/css-system-font-keywords/-/css-system-font-keywords-1.0.0.tgz#85c6f086aba4eb32c571a3086affc434b84823ed"
+ integrity sha1-hcbwhquk6zLFcaMIav/ENLhII+0=
+
+css-what@2.1:
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2"
+ integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==
+
+csscolorparser@~1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/csscolorparser/-/csscolorparser-1.0.3.tgz#b34f391eea4da8f3e98231e2ccd8df9c041f171b"
+ integrity sha1-s085HupNqPPpgjHizNjfnAQfFxs=
+
+cssesc@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee"
+ integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==
+
+cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0":
+ version "0.3.8"
+ resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a"
+ integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==
+
+cssstyle@^1.0.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-1.4.0.tgz#9d31328229d3c565c61e586b02041a28fccdccf1"
+ integrity sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA==
+ dependencies:
+ cssom "0.3.x"
+
+csstype@^3.0.2:
+ version "3.0.5"
+ resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.5.tgz#7fdec6a28a67ae18647c51668a9ff95bb2fa7bb8"
+ integrity sha512-uVDi8LpBUKQj6sdxNaTetL6FpeCqTjOvAQuQUa/qAqq8oOd4ivkbhgnqayl0dnPal8Tb/yB1tF+gOvCBiicaiQ==
+
+cubic-hermite@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/cubic-hermite/-/cubic-hermite-1.0.0.tgz#84e3b2f272b31454e8393b99bb6aed45168c14e5"
+ integrity sha1-hOOy8nKzFFToOTuZu2rtRRaMFOU=
+
+cwise-compiler@^1.0.0, cwise-compiler@^1.1.1, cwise-compiler@^1.1.2:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/cwise-compiler/-/cwise-compiler-1.1.3.tgz#f4d667410e850d3a313a7d2db7b1e505bb034cc5"
+ integrity sha1-9NZnQQ6FDToxOn0tt7HlBbsDTMU=
+ dependencies:
+ uniq "^1.0.0"
+
+cwise-parser@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/cwise-parser/-/cwise-parser-1.0.3.tgz#8e493c17d54f97cb030a9e9854bc86c9dfb354fe"
+ integrity sha1-jkk8F9VPl8sDCp6YVLyGyd+zVP4=
+ dependencies:
+ esprima "^1.0.3"
+ uniq "^1.0.0"
+
+cwise@^1.0.10, cwise@^1.0.4:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/cwise/-/cwise-1.0.10.tgz#24eee6072ebdfd6b8c6f5dadb17090b649b12bef"
+ integrity sha1-JO7mBy69/WuMb12tsXCQtkmxK+8=
+ dependencies:
+ cwise-compiler "^1.1.1"
+ cwise-parser "^1.0.0"
+ static-module "^1.0.0"
+ uglify-js "^2.6.0"
+
+cyclist@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9"
+ integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=
+
+d3-array@1, d3-array@^1.2.1:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-1.2.4.tgz#635ce4d5eea759f6f605863dbcfc30edc737f71f"
+ integrity sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==
+
+d3-cloud@^1.2.4:
+ version "1.2.5"
+ resolved "https://registry.yarnpkg.com/d3-cloud/-/d3-cloud-1.2.5.tgz#3e91564f2d27fba47fcc7d812eb5081ea24c603d"
+ integrity sha512-4s2hXZgvs0CoUIw31oBAGrHt9Kt/7P9Ik5HIVzISFiWkD0Ga2VLAuO/emO/z1tYIpE7KG2smB4PhMPfFMJpahw==
+ dependencies:
+ d3-dispatch "^1.0.3"
+
+d3-collection@1, d3-collection@^1.0.4:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/d3-collection/-/d3-collection-1.0.7.tgz#349bd2aa9977db071091c13144d5e4f16b5b310e"
+ integrity sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A==
+
+d3-color@1:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-1.4.0.tgz#89c45a995ed773b13314f06460df26d60ba0ecaf"
+ integrity sha512-TzNPeJy2+iEepfiL92LAAB7fvnp/dV2YwANPVHdDWmYMm23qIJBYww3qT8I8C1wXrmrg4UWs7BKc2tKIgyjzHg==
+
+d3-dispatch@1, d3-dispatch@^1.0.3:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/d3-dispatch/-/d3-dispatch-1.0.6.tgz#00d37bcee4dd8cd97729dd893a0ac29caaba5d58"
+ integrity sha512-fVjoElzjhCEy+Hbn8KygnmMS7Or0a9sI2UzGwoB7cCtvI1XpVN9GpoYlnb3xt2YV66oXYb1fLJ8GMvP4hdU1RA==
+
+d3-force@^1.0.6:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/d3-force/-/d3-force-1.2.1.tgz#fd29a5d1ff181c9e7f0669e4bd72bdb0e914ec0b"
+ integrity sha512-HHvehyaiUlVo5CxBJ0yF/xny4xoaxFxDnBXNvNcfW9adORGZfyNF1dj6DGLKyk4Yh3brP/1h3rnDzdIAwL08zg==
+ dependencies:
+ d3-collection "1"
+ d3-dispatch "1"
+ d3-quadtree "1"
+ d3-timer "1"
+
+d3-hierarchy@^1.1.9:
+ version "1.1.9"
+ resolved "https://registry.yarnpkg.com/d3-hierarchy/-/d3-hierarchy-1.1.9.tgz#2f6bee24caaea43f8dc37545fa01628559647a83"
+ integrity sha512-j8tPxlqh1srJHAtxfvOUwKNYJkQuBFdM1+JAUfq6xqH5eAqf93L7oG1NVqDa4CpFZNvnNKtCYEUC8KY9yEn9lQ==
+
+d3-interpolate@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-1.4.0.tgz#526e79e2d80daa383f9e0c1c1c7dcc0f0583e987"
+ integrity sha512-V9znK0zc3jOPV4VD2zZn0sDhZU3WAE2bmlxdIwwQPPzPjvyLkd8B3JUVdS1IDUFDkWZ72c9qnv1GK2ZagTZ8EA==
+ dependencies:
+ d3-color "1"
+
+d3-path@1:
+ version "1.0.9"
+ resolved "https://registry.yarnpkg.com/d3-path/-/d3-path-1.0.9.tgz#48c050bb1fe8c262493a8caf5524e3e9591701cf"
+ integrity sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==
+
+d3-quadtree@1:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/d3-quadtree/-/d3-quadtree-1.0.7.tgz#ca8b84df7bb53763fe3c2f24bd435137f4e53135"
+ integrity sha512-RKPAeXnkC59IDGD0Wu5mANy0Q2V28L+fNe65pOCXVdVuTJS3WPKaJlFHer32Rbh9gIo9qMuJXio8ra4+YmIymA==
+
+d3-shape@^1.2.0:
+ version "1.3.7"
+ resolved "https://registry.yarnpkg.com/d3-shape/-/d3-shape-1.3.7.tgz#df63801be07bc986bc54f63789b4fe502992b5d7"
+ integrity sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==
+ dependencies:
+ d3-path "1"
+
+d3-timer@1:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/d3-timer/-/d3-timer-1.0.10.tgz#dfe76b8a91748831b13b6d9c793ffbd508dd9de5"
+ integrity sha512-B1JDm0XDaQC+uvo4DT79H0XmBskgS3l6Ve+1SBCfxgmtIb1AVrPIoqd+nPSv+loMX8szQ0sVUhGngL7D5QPiXw==
+
+d3@^3.5.12, d3@^3.5.17:
+ version "3.5.17"
+ resolved "https://registry.yarnpkg.com/d3/-/d3-3.5.17.tgz#bc46748004378b21a360c9fc7cf5231790762fb8"
+ integrity sha1-vEZ0gAQ3iyGjYMn8fPUjF5B2L7g=
+
+d@1, d@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a"
+ integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==
+ dependencies:
+ es5-ext "^0.10.50"
+ type "^1.0.1"
+
+dashdash@^1.12.0:
+ version "1.14.1"
+ resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
+ integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=
+ dependencies:
+ assert-plus "^1.0.0"
+
+data-urls@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.1.0.tgz#15ee0582baa5e22bb59c77140da8f9c76963bbfe"
+ integrity sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==
+ dependencies:
+ abab "^2.0.0"
+ whatwg-mimetype "^2.2.0"
+ whatwg-url "^7.0.0"
+
+debug@=3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
+ integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==
+ dependencies:
+ ms "2.0.0"
+
+debug@^2.2.0, debug@^2.3.3:
+ version "2.6.9"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
+ integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
+ dependencies:
+ ms "2.0.0"
+
+debug@^3.1.0, debug@^3.2.6:
+ version "3.2.6"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b"
+ integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==
+ dependencies:
+ ms "^2.1.1"
+
+debug@^4.0.1, debug@^4.1.0:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee"
+ integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==
+ dependencies:
+ ms "2.1.2"
+
+debug@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791"
+ integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==
+ dependencies:
+ ms "^2.1.1"
+
+decamelize@^1.0.0, decamelize@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
+ integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
+
+decode-uri-component@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
+ integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=
+
+deep-equal@~1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a"
+ integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==
+ dependencies:
+ is-arguments "^1.0.4"
+ is-date-object "^1.0.1"
+ is-regex "^1.0.4"
+ object-is "^1.0.1"
+ object-keys "^1.1.1"
+ regexp.prototype.flags "^1.2.0"
+
+deep-extend@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
+ integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==
+
+deep-is@^0.1.3, deep-is@~0.1.3:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
+ integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=
+
+define-properties@^1.1.2, define-properties@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
+ integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==
+ dependencies:
+ object-keys "^1.0.12"
+
+define-property@^0.2.5:
+ version "0.2.5"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116"
+ integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=
+ dependencies:
+ is-descriptor "^0.1.0"
+
+define-property@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6"
+ integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY=
+ dependencies:
+ is-descriptor "^1.0.0"
+
+define-property@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d"
+ integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==
+ dependencies:
+ is-descriptor "^1.0.2"
+ isobject "^3.0.1"
+
+defined@^1.0.0, defined@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693"
+ integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=
+
+delaunay-triangulate@^1.1.6:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/delaunay-triangulate/-/delaunay-triangulate-1.1.6.tgz#5bbca21b078198d4bc3c75796a35cbb98c25954c"
+ integrity sha1-W7yiGweBmNS8PHV5ajXLuYwllUw=
+ dependencies:
+ incremental-convex-hull "^1.0.1"
+ uniq "^1.0.1"
+
+delayed-stream@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
+ integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk=
+
+delegates@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
+ integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=
+
+des.js@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843"
+ integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==
+ dependencies:
+ inherits "^2.0.1"
+ minimalistic-assert "^1.0.0"
+
+detect-file@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7"
+ integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=
+
+detect-kerning@^2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/detect-kerning/-/detect-kerning-2.1.2.tgz#4ecd548e4a5a3fc880fe2a50609312d000fa9fc2"
+ integrity sha512-I3JIbrnKPAntNLl1I6TpSQQdQ4AutYzv/sKMFKbepawV/hlH0GmYKhUoOEMd4xqaUHT+Bm0f4127lh5qs1m1tw==
+
+detect-libc@^1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"
+ integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=
+
+detect-newline@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2"
+ integrity sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=
+
+diff-sequences@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-24.9.0.tgz#5715d6244e2aa65f48bba0bc972db0b0b11e95b5"
+ integrity sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew==
+
+diff-sequences@^26.6.2:
+ version "26.6.2"
+ resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1"
+ integrity sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==
+
+diffie-hellman@^5.0.0:
+ version "5.0.3"
+ resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875"
+ integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==
+ dependencies:
+ bn.js "^4.1.0"
+ miller-rabin "^4.0.0"
+ randombytes "^2.0.0"
+
+discontinuous-range@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/discontinuous-range/-/discontinuous-range-1.0.0.tgz#e38331f0844bba49b9a9cb71c771585aab1bc65a"
+ integrity sha1-44Mx8IRLukm5qctxx3FYWqsbxlo=
+
+doctrine@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961"
+ integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==
+ dependencies:
+ esutils "^2.0.2"
+
+dom-serializer@0, dom-serializer@~0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.1.tgz#1ec4059e284babed36eec2941d4a970a189ce7c0"
+ integrity sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==
+ dependencies:
+ domelementtype "^1.3.0"
+ entities "^1.1.1"
+
+domain-browser@^1.1.1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda"
+ integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==
+
+domelementtype@1, domelementtype@^1.3.0, domelementtype@^1.3.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f"
+ integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==
+
+domexception@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90"
+ integrity sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==
+ dependencies:
+ webidl-conversions "^4.0.2"
+
+domhandler@^2.3.0:
+ version "2.4.2"
+ resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803"
+ integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==
+ dependencies:
+ domelementtype "1"
+
+dompurify@^2.0.7:
+ version "2.0.17"
+ resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-2.0.17.tgz#505ffa126a580603df4007e034bdc9b6b738668e"
+ integrity sha512-nNwwJfW55r8akD8MSFz6k75bzyT2y6JEa1O3JrZFBf+Y5R9JXXU4OsRl0B9hKoPgHTw2b7ER5yJ5Md97MMUJPg==
+
+domutils@1.5.1, domutils@^1.5.1:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf"
+ integrity sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=
+ dependencies:
+ dom-serializer "0"
+ domelementtype "1"
+
+dotignore@~0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/dotignore/-/dotignore-0.1.2.tgz#f942f2200d28c3a76fbdd6f0ee9f3257c8a2e905"
+ integrity sha512-UGGGWfSauusaVJC+8fgV+NVvBXkCTmVv7sk6nojDZZvuOUNGUy0Zk4UpHQD6EDjS0jpBwcACvH4eofvyzBcRDw==
+ dependencies:
+ minimatch "^3.0.4"
+
+double-bits@^1.1.0, double-bits@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/double-bits/-/double-bits-1.1.1.tgz#58abba45494da4d0fa36b73ad11a286c9184b1c6"
+ integrity sha1-WKu6RUlNpND6Nrc60RoobJGEscY=
+
+draw-svg-path@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/draw-svg-path/-/draw-svg-path-1.0.0.tgz#6f116d962dd314b99ea534d6f58dd66cdbd69379"
+ integrity sha1-bxFtli3TFLmepTTW9Y3WbNvWk3k=
+ dependencies:
+ abs-svg-path "~0.1.1"
+ normalize-svg-path "~0.1.0"
+
+dtype@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/dtype/-/dtype-2.0.0.tgz#cd052323ce061444ecd2e8f5748f69a29be28434"
+ integrity sha1-zQUjI84GFETs0uj1dI9popvihDQ=
+
+dup@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/dup/-/dup-1.0.0.tgz#51fc5ac685f8196469df0b905e934b20af5b4029"
+ integrity sha1-UfxaxoX4GWRp3wuQXpNLIK9bQCk=
+
+duplexer2@~0.0.2:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.0.2.tgz#c614dcf67e2fb14995a91711e5a617e8a60a31db"
+ integrity sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=
+ dependencies:
+ readable-stream "~1.1.9"
+
+duplexify@^3.4.2, duplexify@^3.4.5, duplexify@^3.6.0:
+ version "3.7.1"
+ resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309"
+ integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==
+ dependencies:
+ end-of-stream "^1.0.0"
+ inherits "^2.0.1"
+ readable-stream "^2.0.0"
+ stream-shift "^1.0.0"
+
+earcut@^2.1.5:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/earcut/-/earcut-2.2.2.tgz#41b0bc35f63e0fe80da7cddff28511e7e2e80d11"
+ integrity sha512-eZoZPPJcUHnfRZ0PjLvx2qBordSiO8ofC3vt+qACLM95u+4DovnbYNpQtJh0DNsWj8RnxrQytD4WA8gj5cRIaQ==
+
+ecc-jsbn@~0.1.1:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9"
+ integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=
+ dependencies:
+ jsbn "~0.1.0"
+ safer-buffer "^2.1.0"
+
+edges-to-adjacency-list@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/edges-to-adjacency-list/-/edges-to-adjacency-list-1.0.0.tgz#c146d2e084addfba74a51293c6e0199a49f757f1"
+ integrity sha1-wUbS4ISt37p0pRKTxuAZmkn3V/E=
+ dependencies:
+ uniq "^1.0.0"
+
+electron-to-chromium@^1.3.390, electron-to-chromium@^1.3.47:
+ version "1.3.397"
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.397.tgz#db640c2e67b08d590a504c20b56904537aa2bafa"
+ integrity sha512-zcUd1p/7yzTSdWkCTrqGvbnEOASy96d0RJL/lc5BDJoO23Z3G/VHd0yIPbguDU9n8QNUTCigLO7oEdtOb7fp2A==
+
+element-size@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/element-size/-/element-size-1.1.1.tgz#64e5f159d97121631845bcbaecaf279c39b5e34e"
+ integrity sha1-ZOXxWdlxIWMYRby67K8nnDm1404=
+
+elementary-circuits-directed-graph@^1.0.4:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/elementary-circuits-directed-graph/-/elementary-circuits-directed-graph-1.2.0.tgz#c6507f42566507c646b5bb144b892fbce1656371"
+ integrity sha512-eOQofnrNqebPtC29PvyNMGUBdMrIw5i8nOoC/2VOlSF84tf5+ZXnRkIk7TgdT22jFXK68CC7aA881KRmNYf/Pg==
+ dependencies:
+ strongly-connected-components "^1.0.1"
+
+elliptic@^6.0.0:
+ version "6.5.2"
+ resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.2.tgz#05c5678d7173c049d8ca433552224a495d0e3762"
+ integrity sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw==
+ dependencies:
+ bn.js "^4.4.0"
+ brorand "^1.0.1"
+ hash.js "^1.0.0"
+ hmac-drbg "^1.0.0"
+ inherits "^2.0.1"
+ minimalistic-assert "^1.0.0"
+ minimalistic-crypto-utils "^1.0.0"
+
+emoji-regex@^7.0.1:
+ version "7.0.3"
+ resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156"
+ integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==
+
+emoji-regex@^8.0.0:
+ version "8.0.0"
+ resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
+ integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
+
+emojis-list@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389"
+ integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k=
+
+emojis-list@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78"
+ integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==
+
+end-of-stream@^1.0.0, end-of-stream@^1.1.0:
+ version "1.4.4"
+ resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
+ integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
+ dependencies:
+ once "^1.4.0"
+
+enhanced-resolve@4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz#41c7e0bfdfe74ac1ffe1e57ad6a5c6c9f3742a7f"
+ integrity sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==
+ dependencies:
+ graceful-fs "^4.1.2"
+ memory-fs "^0.4.0"
+ tapable "^1.0.0"
+
+enhanced-resolve@^4.1.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz#2937e2b8066cd0fe7ce0990a98f0d71a35189f66"
+ integrity sha512-98p2zE+rL7/g/DzMHMTF4zZlCgeVdJ7yr6xzEpJRYwFYrGi9ANdn5DnJURg6RpBkyk60XYDnWIv51VfIhfNGuA==
+ dependencies:
+ graceful-fs "^4.1.2"
+ memory-fs "^0.5.0"
+ tapable "^1.0.0"
+
+enquirer@^2.3.5:
+ version "2.3.6"
+ resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d"
+ integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==
+ dependencies:
+ ansi-colors "^4.1.1"
+
+entities@^1.1.1, entities@~1.1.1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56"
+ integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==
+
+enzyme-adapter-react-16@^1.7.1:
+ version "1.15.2"
+ resolved "https://registry.yarnpkg.com/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.15.2.tgz#b16db2f0ea424d58a808f9df86ab6212895a4501"
+ integrity sha512-SkvDrb8xU3lSxID8Qic9rB8pvevDbLybxPK6D/vW7PrT0s2Cl/zJYuXvsd1EBTz0q4o3iqG3FJhpYz3nUNpM2Q==
+ dependencies:
+ enzyme-adapter-utils "^1.13.0"
+ enzyme-shallow-equal "^1.0.1"
+ has "^1.0.3"
+ object.assign "^4.1.0"
+ object.values "^1.1.1"
+ prop-types "^15.7.2"
+ react-is "^16.12.0"
+ react-test-renderer "^16.0.0-0"
+ semver "^5.7.0"
+
+enzyme-adapter-utils@^1.13.0:
+ version "1.13.0"
+ resolved "https://registry.yarnpkg.com/enzyme-adapter-utils/-/enzyme-adapter-utils-1.13.0.tgz#01c885dde2114b4690bf741f8dc94cee3060eb78"
+ integrity sha512-YuEtfQp76Lj5TG1NvtP2eGJnFKogk/zT70fyYHXK2j3v6CtuHqc8YmgH/vaiBfL8K1SgVVbQXtTcgQZFwzTVyQ==
+ dependencies:
+ airbnb-prop-types "^2.15.0"
+ function.prototype.name "^1.1.2"
+ object.assign "^4.1.0"
+ object.fromentries "^2.0.2"
+ prop-types "^15.7.2"
+ semver "^5.7.1"
+
+enzyme-shallow-equal@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/enzyme-shallow-equal/-/enzyme-shallow-equal-1.0.1.tgz#7afe03db3801c9b76de8440694096412a8d9d49e"
+ integrity sha512-hGA3i1so8OrYOZSM9whlkNmVHOicJpsjgTzC+wn2JMJXhq1oO4kA4bJ5MsfzSIcC71aLDKzJ6gZpIxrqt3QTAQ==
+ dependencies:
+ has "^1.0.3"
+ object-is "^1.0.2"
+
+enzyme-to-json@^3.3.5:
+ version "3.4.4"
+ resolved "https://registry.yarnpkg.com/enzyme-to-json/-/enzyme-to-json-3.4.4.tgz#b30726c59091d273521b6568c859e8831e94d00e"
+ integrity sha512-50LELP/SCPJJGic5rAARvU7pgE3m1YaNj7JLM+Qkhl5t7PAs6fiyc8xzc50RnkKPFQCv0EeFVjEWdIFRGPWMsA==
+ dependencies:
+ lodash "^4.17.15"
+ react-is "^16.12.0"
+
+enzyme@^3.8.0:
+ version "3.11.0"
+ resolved "https://registry.yarnpkg.com/enzyme/-/enzyme-3.11.0.tgz#71d680c580fe9349f6f5ac6c775bc3e6b7a79c28"
+ integrity sha512-Dw8/Gs4vRjxY6/6i9wU0V+utmQO9kvh9XLnz3LIudviOnVYDEe2ec+0k+NQoMamn1VrjKgCUOWj5jG/5M5M0Qw==
+ dependencies:
+ array.prototype.flat "^1.2.3"
+ cheerio "^1.0.0-rc.3"
+ enzyme-shallow-equal "^1.0.1"
+ function.prototype.name "^1.1.2"
+ has "^1.0.3"
+ html-element-map "^1.2.0"
+ is-boolean-object "^1.0.1"
+ is-callable "^1.1.5"
+ is-number-object "^1.0.4"
+ is-regex "^1.0.5"
+ is-string "^1.0.5"
+ is-subset "^0.1.1"
+ lodash.escape "^4.0.1"
+ lodash.isequal "^4.5.0"
+ object-inspect "^1.7.0"
+ object-is "^1.0.2"
+ object.assign "^4.1.0"
+ object.entries "^1.1.1"
+ object.values "^1.1.1"
+ raf "^3.4.1"
+ rst-selector-parser "^2.2.3"
+ string.prototype.trim "^1.2.1"
+
+errno@^0.1.1, errno@^0.1.3, errno@~0.1.7:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618"
+ integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==
+ dependencies:
+ prr "~1.0.1"
+
+error-ex@^1.3.1:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
+ integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
+ dependencies:
+ is-arrayish "^0.2.1"
+
+es-abstract@^1.17.0-next.1, es-abstract@^1.17.2, es-abstract@^1.17.4, es-abstract@^1.17.5:
+ version "1.17.5"
+ resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.5.tgz#d8c9d1d66c8981fb9200e2251d799eee92774ae9"
+ integrity sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==
+ dependencies:
+ es-to-primitive "^1.2.1"
+ function-bind "^1.1.1"
+ has "^1.0.3"
+ has-symbols "^1.0.1"
+ is-callable "^1.1.5"
+ is-regex "^1.0.5"
+ object-inspect "^1.7.0"
+ object-keys "^1.1.1"
+ object.assign "^4.1.0"
+ string.prototype.trimleft "^2.1.1"
+ string.prototype.trimright "^2.1.1"
+
+es-to-primitive@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a"
+ integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==
+ dependencies:
+ is-callable "^1.1.4"
+ is-date-object "^1.0.1"
+ is-symbol "^1.0.2"
+
+es5-ext@^0.10.35, es5-ext@^0.10.46, es5-ext@^0.10.50:
+ version "0.10.53"
+ resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.53.tgz#93c5a3acfdbef275220ad72644ad02ee18368de1"
+ integrity sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==
+ dependencies:
+ es6-iterator "~2.0.3"
+ es6-symbol "~3.1.3"
+ next-tick "~1.0.0"
+
+es6-iterator@^2.0.3, es6-iterator@~2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7"
+ integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c=
+ dependencies:
+ d "1"
+ es5-ext "^0.10.35"
+ es6-symbol "^3.1.1"
+
+es6-promise@^3.0.2:
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.3.1.tgz#a08cdde84ccdbf34d027a1451bc91d4bcd28a613"
+ integrity sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM=
+
+es6-symbol@^3.1.1, es6-symbol@~3.1.3:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18"
+ integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==
+ dependencies:
+ d "^1.0.1"
+ ext "^1.1.2"
+
+es6-weak-map@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.3.tgz#b6da1f16cc2cc0d9be43e6bdbfc5e7dfcdf31d53"
+ integrity sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==
+ dependencies:
+ d "1"
+ es5-ext "^0.10.46"
+ es6-iterator "^2.0.3"
+ es6-symbol "^3.1.1"
+
+escape-string-regexp@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+ integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
+
+escodegen@^1.11.1, escodegen@^1.9.1:
+ version "1.14.1"
+ resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.1.tgz#ba01d0c8278b5e95a9a45350142026659027a457"
+ integrity sha512-Bmt7NcRySdIfNPfU2ZoXDrrXsG9ZjvDxcAlMfDUgRBjLOWTuIACXPBFJH7Z+cLb40JeQco5toikyc9t9P8E9SQ==
+ dependencies:
+ esprima "^4.0.1"
+ estraverse "^4.2.0"
+ esutils "^2.0.2"
+ optionator "^0.8.1"
+ optionalDependencies:
+ source-map "~0.6.1"
+
+escodegen@~0.0.24:
+ version "0.0.28"
+ resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-0.0.28.tgz#0e4ff1715f328775d6cab51ac44a406cd7abffd3"
+ integrity sha1-Dk/xcV8yh3XWyrUaxEpAbNer/9M=
+ dependencies:
+ esprima "~1.0.2"
+ estraverse "~1.3.0"
+ optionalDependencies:
+ source-map ">= 0.1.2"
+
+escodegen@~1.3.2:
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.3.3.tgz#f024016f5a88e046fd12005055e939802e6c5f23"
+ integrity sha1-8CQBb1qI4Eb9EgBQVek5gC5sXyM=
+ dependencies:
+ esprima "~1.1.1"
+ estraverse "~1.5.0"
+ esutils "~1.0.0"
+ optionalDependencies:
+ source-map "~0.1.33"
+
+eslint-scope@^4.0.3:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848"
+ integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==
+ dependencies:
+ esrecurse "^4.1.0"
+ estraverse "^4.1.1"
+
+eslint-scope@^5.1.1:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c"
+ integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==
+ dependencies:
+ esrecurse "^4.3.0"
+ estraverse "^4.1.1"
+
+eslint-utils@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27"
+ integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==
+ dependencies:
+ eslint-visitor-keys "^1.1.0"
+
+eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e"
+ integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==
+
+eslint-visitor-keys@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8"
+ integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==
+
+eslint@^7.8.1:
+ version "7.15.0"
+ resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.15.0.tgz#eb155fb8ed0865fcf5d903f76be2e5b6cd7e0bc7"
+ integrity sha512-Vr64xFDT8w30wFll643e7cGrIkPEU50yIiI36OdSIDoSGguIeaLzBo0vpGvzo9RECUqq7htURfwEtKqwytkqzA==
+ dependencies:
+ "@babel/code-frame" "^7.0.0"
+ "@eslint/eslintrc" "^0.2.2"
+ ajv "^6.10.0"
+ chalk "^4.0.0"
+ cross-spawn "^7.0.2"
+ debug "^4.0.1"
+ doctrine "^3.0.0"
+ enquirer "^2.3.5"
+ eslint-scope "^5.1.1"
+ eslint-utils "^2.1.0"
+ eslint-visitor-keys "^2.0.0"
+ espree "^7.3.1"
+ esquery "^1.2.0"
+ esutils "^2.0.2"
+ file-entry-cache "^6.0.0"
+ functional-red-black-tree "^1.0.1"
+ glob-parent "^5.0.0"
+ globals "^12.1.0"
+ ignore "^4.0.6"
+ import-fresh "^3.0.0"
+ imurmurhash "^0.1.4"
+ is-glob "^4.0.0"
+ js-yaml "^3.13.1"
+ json-stable-stringify-without-jsonify "^1.0.1"
+ levn "^0.4.1"
+ lodash "^4.17.19"
+ minimatch "^3.0.4"
+ natural-compare "^1.4.0"
+ optionator "^0.9.1"
+ progress "^2.0.0"
+ regexpp "^3.1.0"
+ semver "^7.2.1"
+ strip-ansi "^6.0.0"
+ strip-json-comments "^3.1.0"
+ table "^5.2.3"
+ text-table "^0.2.0"
+ v8-compile-cache "^2.0.3"
+
+espree@^7.3.0, espree@^7.3.1:
+ version "7.3.1"
+ resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6"
+ integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==
+ dependencies:
+ acorn "^7.4.0"
+ acorn-jsx "^5.3.1"
+ eslint-visitor-keys "^1.3.0"
+
+esprima@^1.0.3:
+ version "1.2.5"
+ resolved "https://registry.yarnpkg.com/esprima/-/esprima-1.2.5.tgz#0993502feaf668138325756f30f9a51feeec11e9"
+ integrity sha1-CZNQL+r2aBODJXVvMPmlH+7sEek=
+
+esprima@^4.0.0, esprima@^4.0.1, esprima@~4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
+ integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
+
+esprima@~1.0.2, esprima@~1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/esprima/-/esprima-1.0.4.tgz#9f557e08fc3b4d26ece9dd34f8fbf476b62585ad"
+ integrity sha1-n1V+CPw7TSbs6d00+Pv0drYlha0=
+
+esprima@~1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/esprima/-/esprima-1.1.1.tgz#5b6f1547f4d102e670e140c509be6771d6aeb549"
+ integrity sha1-W28VR/TRAuZw4UDFCb5ncdautUk=
+
+esquery@^1.2.0:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57"
+ integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==
+ dependencies:
+ estraverse "^5.1.0"
+
+esrecurse@^4.1.0:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf"
+ integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==
+ dependencies:
+ estraverse "^4.1.0"
+
+esrecurse@^4.3.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921"
+ integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==
+ dependencies:
+ estraverse "^5.2.0"
+
+estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
+ integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
+
+estraverse@^5.1.0, estraverse@^5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880"
+ integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==
+
+estraverse@~1.3.0:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.3.2.tgz#37c2b893ef13d723f276d878d60d8535152a6c42"
+ integrity sha1-N8K4k+8T1yPydth41g2FNRUqbEI=
+
+estraverse@~1.5.0:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.5.1.tgz#867a3e8e58a9f84618afb6c2ddbcd916b7cbaf71"
+ integrity sha1-hno+jlip+EYYr7bC3bzZFrfLr3E=
+
+esutils@^2.0.2:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
+ integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
+
+esutils@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/esutils/-/esutils-1.0.0.tgz#8151d358e20c8acc7fb745e7472c0025fe496570"
+ integrity sha1-gVHTWOIMisx/t0XnRywAJf5JZXA=
+
+events@^1.0.2:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924"
+ integrity sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=
+
+events@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/events/-/events-3.1.0.tgz#84279af1b34cb75aa88bf5ff291f6d0bd9b31a59"
+ integrity sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg==
+
+evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02"
+ integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==
+ dependencies:
+ md5.js "^1.3.4"
+ safe-buffer "^5.1.1"
+
+exec-sh@^0.3.2:
+ version "0.3.4"
+ resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.4.tgz#3a018ceb526cc6f6df2bb504b2bfe8e3a4934ec5"
+ integrity sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A==
+
+execa@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8"
+ integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==
+ dependencies:
+ cross-spawn "^6.0.0"
+ get-stream "^4.0.0"
+ is-stream "^1.1.0"
+ npm-run-path "^2.0.0"
+ p-finally "^1.0.0"
+ signal-exit "^3.0.0"
+ strip-eof "^1.0.0"
+
+exit@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c"
+ integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=
+
+expand-brackets@^2.1.4:
+ version "2.1.4"
+ resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622"
+ integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI=
+ dependencies:
+ debug "^2.3.3"
+ define-property "^0.2.5"
+ extend-shallow "^2.0.1"
+ posix-character-classes "^0.1.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
+expand-tilde@^2.0.0, expand-tilde@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502"
+ integrity sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=
+ dependencies:
+ homedir-polyfill "^1.0.1"
+
+expect@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/expect/-/expect-24.9.0.tgz#b75165b4817074fa4a157794f46fe9f1ba15b6ca"
+ integrity sha512-wvVAx8XIol3Z5m9zvZXiyZOQ+sRJqNTIm6sGjdWlaZIeupQGO3WbYI+15D/AmEwZywL6wtJkbAbJtzkOfBuR0Q==
+ dependencies:
+ "@jest/types" "^24.9.0"
+ ansi-styles "^3.2.0"
+ jest-get-type "^24.9.0"
+ jest-matcher-utils "^24.9.0"
+ jest-message-util "^24.9.0"
+ jest-regex-util "^24.9.0"
+
+ext@^1.1.2:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/ext/-/ext-1.4.0.tgz#89ae7a07158f79d35517882904324077e4379244"
+ integrity sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==
+ dependencies:
+ type "^2.0.0"
+
+extend-shallow@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
+ integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=
+ dependencies:
+ is-extendable "^0.1.0"
+
+extend-shallow@^3.0.0, extend-shallow@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8"
+ integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=
+ dependencies:
+ assign-symbols "^1.0.0"
+ is-extendable "^1.0.1"
+
+extend@~3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
+ integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
+
+extglob@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543"
+ integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==
+ dependencies:
+ array-unique "^0.3.2"
+ define-property "^1.0.0"
+ expand-brackets "^2.1.4"
+ extend-shallow "^2.0.1"
+ fragment-cache "^0.2.1"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
+extract-frustum-planes@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/extract-frustum-planes/-/extract-frustum-planes-1.0.0.tgz#97d5703ff0564c8c3c6838cac45f9e7bc52c9ef5"
+ integrity sha1-l9VwP/BWTIw8aDjKxF+ee8UsnvU=
+
+extsprintf@1.3.0, extsprintf@^1.2.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
+ integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=
+
+falafel@^2.1.0:
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/falafel/-/falafel-2.2.4.tgz#b5d86c060c2412a43166243cb1bce44d1abd2819"
+ integrity sha512-0HXjo8XASWRmsS0X1EkhwEMZaD3Qvp7FfURwjLKjG1ghfRm/MGZl2r4cWUTv41KdNghTw4OUMmVtdGQp3+H+uQ==
+ dependencies:
+ acorn "^7.1.1"
+ foreach "^2.0.5"
+ isarray "^2.0.1"
+ object-keys "^1.0.6"
+
+fast-deep-equal@^3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4"
+ integrity sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==
+
+fast-glob@^3.2.4:
+ version "3.2.4"
+ resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.4.tgz#d20aefbf99579383e7f3cc66529158c9b98554d3"
+ integrity sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==
+ dependencies:
+ "@nodelib/fs.stat" "^2.0.2"
+ "@nodelib/fs.walk" "^1.2.3"
+ glob-parent "^5.1.0"
+ merge2 "^1.3.0"
+ micromatch "^4.0.2"
+ picomatch "^2.2.1"
+
+fast-isnumeric@^1.1.3:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/fast-isnumeric/-/fast-isnumeric-1.1.4.tgz#e165786ff471c439e9ace2b8c8e66cceb47e2ea4"
+ integrity sha512-1mM8qOr2LYz8zGaUdmiqRDiuue00Dxjgcb1NQR7TnhLVh6sQyngP9xvLo7Sl7LZpP/sk5eb+bcyWXw530NTBZw==
+ dependencies:
+ is-string-blank "^1.0.1"
+
+fast-json-stable-stringify@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
+ integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
+
+fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
+ integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
+
+fastq@^1.6.0:
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.9.0.tgz#e16a72f338eaca48e91b5c23593bcc2ef66b7947"
+ integrity sha512-i7FVWL8HhVY+CTkwFxkN2mk3h+787ixS5S63eb78diVRc1MCssarHq3W5cj0av7YDSwmaV928RNag+U1etRQ7w==
+ dependencies:
+ reusify "^1.0.4"
+
+fb-watchman@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85"
+ integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==
+ dependencies:
+ bser "2.1.1"
+
+figgy-pudding@^3.5.1:
+ version "3.5.2"
+ resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e"
+ integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==
+
+figures@^3.0.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af"
+ integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==
+ dependencies:
+ escape-string-regexp "^1.0.5"
+
+file-entry-cache@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.0.tgz#7921a89c391c6d93efec2169ac6bf300c527ea0a"
+ integrity sha512-fqoO76jZ3ZnYrXLDRxBR1YvOvc0k844kcOg40bgsPrE25LAb/PDqTY+ho64Xh2c8ZXgIKldchCFHczG2UVRcWA==
+ dependencies:
+ flat-cache "^3.0.4"
+
+file-loader@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.0.0.tgz#97bbfaab7a2460c07bcbd72d3a6922407f67649f"
+ integrity sha512-/aMOAYEFXDdjG0wytpTL5YQLfZnnTmLNjn+AIrJ/6HVnTfDqLsVKUUwkDf4I4kgex36BvjuXEn/TX9B/1ESyqQ==
+ dependencies:
+ loader-utils "^2.0.0"
+ schema-utils "^2.6.5"
+
+file-uri-to-path@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd"
+ integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==
+
+fill-range@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7"
+ integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=
+ dependencies:
+ extend-shallow "^2.0.1"
+ is-number "^3.0.0"
+ repeat-string "^1.6.1"
+ to-regex-range "^2.1.0"
+
+fill-range@^7.0.1:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
+ integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
+ dependencies:
+ to-regex-range "^5.0.1"
+
+filtered-vector@^1.2.1:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/filtered-vector/-/filtered-vector-1.2.4.tgz#56453c034df4302d293ca8ecdeac3f90abc678d3"
+ integrity sha1-VkU8A030MC0pPKjs3qw/kKvGeNM=
+ dependencies:
+ binary-search-bounds "^1.0.0"
+ cubic-hermite "^1.0.0"
+
+find-babel-config@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/find-babel-config/-/find-babel-config-1.2.0.tgz#a9b7b317eb5b9860cda9d54740a8c8337a2283a2"
+ integrity sha512-jB2CHJeqy6a820ssiqwrKMeyC6nNdmrcgkKWJWmpoxpE8RKciYJXCcXRq1h2AzCo5I5BJeN2tkGEO3hLTuePRA==
+ dependencies:
+ json5 "^0.5.1"
+ path-exists "^3.0.0"
+
+find-cache-dir@^2.0.0, find-cache-dir@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7"
+ integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==
+ dependencies:
+ commondir "^1.0.1"
+ make-dir "^2.0.0"
+ pkg-dir "^3.0.0"
+
+find-up@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
+ integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c=
+ dependencies:
+ locate-path "^2.0.0"
+
+find-up@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73"
+ integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==
+ dependencies:
+ locate-path "^3.0.0"
+
+find-up@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"
+ integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
+ dependencies:
+ locate-path "^5.0.0"
+ path-exists "^4.0.0"
+
+findup-sync@3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1"
+ integrity sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==
+ dependencies:
+ detect-file "^1.0.0"
+ is-glob "^4.0.0"
+ micromatch "^3.0.4"
+ resolve-dir "^1.0.1"
+
+flat-cache@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11"
+ integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==
+ dependencies:
+ flatted "^3.1.0"
+ rimraf "^3.0.2"
+
+flatted@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.0.tgz#a5d06b4a8b01e3a63771daa5cb7a1903e2e57067"
+ integrity sha512-tW+UkmtNg/jv9CSofAKvgVcO7c2URjhTdW1ZTkcAritblu8tajiYy7YisnIflEwtKssCtOxpnBRoCB7iap0/TA==
+
+flatten-vertex-data@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/flatten-vertex-data/-/flatten-vertex-data-1.0.2.tgz#889fd60bea506006ca33955ee1105175fb620219"
+ integrity sha512-BvCBFK2NZqerFTdMDgqfHBwxYWnxeCkwONsw6PvBMcUXqo8U/KDWwmXhqx1x2kLIg7DqIsJfOaJFOmlua3Lxuw==
+ dependencies:
+ dtype "^2.0.0"
+
+flip-pixels@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/flip-pixels/-/flip-pixels-1.0.2.tgz#aad7b7d9fc65932d5f27e2e4dac4b494140845e4"
+ integrity sha512-oXbJGbjDnfJRWPC7Va38EFhd+A8JWE5/hCiKcK8qjCdbLj9DTpsq6MEudwpRTH+V4qq+Jw7d3pUgQdSr3x3mTA==
+
+flow-parser@0.*:
+ version "0.139.0"
+ resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.139.0.tgz#c046779114487175f2b1e8aa639bf977d4c7dd9f"
+ integrity sha512-yEh5wJIi/BG7JZvWAWxTdfZ1uoh/W3oefJOuvUDosKFIE5H7ad8Eu6k9ba1yr83Lxn5vY6kZMG1IaiiiA/5scg==
+
+flush-write-stream@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8"
+ integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==
+ dependencies:
+ inherits "^2.0.3"
+ readable-stream "^2.3.6"
+
+follow-redirects@1.5.10:
+ version "1.5.10"
+ resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a"
+ integrity sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==
+ dependencies:
+ debug "=3.1.0"
+
+font-atlas@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/font-atlas/-/font-atlas-2.1.0.tgz#aa2d6dcf656a6c871d66abbd3dfbea2f77178348"
+ integrity sha512-kP3AmvX+HJpW4w3d+PiPR2X6E1yvsBXt2yhuCw+yReO9F1WYhvZwx3c95DGZGwg9xYzDGrgJYa885xmVA+28Cg==
+ dependencies:
+ css-font "^1.0.0"
+
+font-awesome@^4.7.0:
+ version "4.7.0"
+ resolved "https://registry.yarnpkg.com/font-awesome/-/font-awesome-4.7.0.tgz#8fa8cf0411a1a31afd07b06d2902bb9fc815a133"
+ integrity sha1-j6jPBBGhoxr9B7BtKQK7n8gVoTM=
+
+font-measure@^1.2.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/font-measure/-/font-measure-1.2.2.tgz#41dbdac5d230dbf4db08865f54da28a475e83026"
+ integrity sha512-mRLEpdrWzKe9hbfaF3Qpr06TAjquuBVP5cHy4b3hyeNdjc9i0PO6HniGsX5vjL5OWv7+Bd++NiooNpT/s8BvIA==
+ dependencies:
+ css-font "^1.2.0"
+
+for-each@~0.3.3:
+ version "0.3.3"
+ resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e"
+ integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==
+ dependencies:
+ is-callable "^1.1.3"
+
+for-in@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
+ integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=
+
+foreach@^2.0.5:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99"
+ integrity sha1-C+4AUBiusmDQo6865ljdATbsG5k=
+
+forever-agent@~0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
+ integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=
+
+form-data@~2.3.2:
+ version "2.3.3"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6"
+ integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==
+ dependencies:
+ asynckit "^0.4.0"
+ combined-stream "^1.0.6"
+ mime-types "^2.1.12"
+
+fragment-cache@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19"
+ integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=
+ dependencies:
+ map-cache "^0.2.2"
+
+from2@^2.1.0, from2@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af"
+ integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=
+ dependencies:
+ inherits "^2.0.1"
+ readable-stream "^2.0.0"
+
+fs-extra@^9.0.1:
+ version "9.0.1"
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc"
+ integrity sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==
+ dependencies:
+ at-least-node "^1.0.0"
+ graceful-fs "^4.2.0"
+ jsonfile "^6.0.1"
+ universalify "^1.0.0"
+
+fs-minipass@^1.2.5:
+ version "1.2.7"
+ resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7"
+ integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==
+ dependencies:
+ minipass "^2.6.0"
+
+fs-readdir-recursive@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27"
+ integrity sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==
+
+fs-write-stream-atomic@^1.0.8:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9"
+ integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=
+ dependencies:
+ graceful-fs "^4.1.2"
+ iferr "^0.1.5"
+ imurmurhash "^0.1.4"
+ readable-stream "1 || 2"
+
+fs.realpath@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+ integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
+
+fsevents@^1.2.7:
+ version "1.2.12"
+ resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.12.tgz#db7e0d8ec3b0b45724fd4d83d43554a8f1f0de5c"
+ integrity sha512-Ggd/Ktt7E7I8pxZRbGIs7vwqAPscSESMrCSkx2FtWeqmheJgCo2R74fTsZFCifr0VTPwqRpPv17+6b8Zp7th0Q==
+ dependencies:
+ bindings "^1.5.0"
+ nan "^2.12.1"
+
+function-bind@^1.1.1, function-bind@~1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
+ integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
+
+function.prototype.name@^1.1.1, function.prototype.name@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.2.tgz#5cdf79d7c05db401591dfde83e3b70c5123e9a45"
+ integrity sha512-C8A+LlHBJjB2AdcRPorc5JvJ5VUoWlXdEHLOJdCI7kjHEtGTpHQUiqMvCIKUwIsGwZX2jZJy761AXsn356bJQg==
+ dependencies:
+ define-properties "^1.1.3"
+ es-abstract "^1.17.0-next.1"
+ functions-have-names "^1.2.0"
+
+functional-red-black-tree@^1.0.0, functional-red-black-tree@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
+ integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=
+
+functions-have-names@^1.2.0:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.1.tgz#a981ac397fa0c9964551402cdc5533d7a4d52f91"
+ integrity sha512-j48B/ZI7VKs3sgeI2cZp7WXWmZXu7Iq5pl5/vptV5N2mq+DGFuS/ulaDjtaoLpYzuD6u8UgrUKHfgo7fDTSiBA==
+
+gamma@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/gamma/-/gamma-0.1.0.tgz#3315643403bf27906ca80ab37c36ece9440ef330"
+ integrity sha1-MxVkNAO/J5BsqAqzfDbs6UQO8zA=
+
+gauge@~2.7.3:
+ version "2.7.4"
+ resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
+ integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=
+ dependencies:
+ aproba "^1.0.3"
+ console-control-strings "^1.0.0"
+ has-unicode "^2.0.0"
+ object-assign "^4.1.0"
+ signal-exit "^3.0.0"
+ string-width "^1.0.1"
+ strip-ansi "^3.0.1"
+ wide-align "^1.1.0"
+
+gensync@^1.0.0-beta.1:
+ version "1.0.0-beta.1"
+ resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269"
+ integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==
+
+geojson-vt@^3.2.1:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/geojson-vt/-/geojson-vt-3.2.1.tgz#f8adb614d2c1d3f6ee7c4265cad4bbf3ad60c8b7"
+ integrity sha512-EvGQQi/zPrDA6zr6BnJD/YhwAkBP8nnJ9emh3EnHQKVMfg/MRVtPbMYdgVy/IaEmn4UfagD2a6fafPDL5hbtwg==
+
+get-caller-file@^2.0.1:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
+ integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
+
+get-canvas-context@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/get-canvas-context/-/get-canvas-context-1.0.2.tgz#d6e7b50bc4e4c86357cd39f22647a84b73601e93"
+ integrity sha1-1ue1C8TkyGNXzTnyJkeoS3NgHpM=
+
+get-package-type@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a"
+ integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==
+
+get-stream@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5"
+ integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==
+ dependencies:
+ pump "^3.0.0"
+
+get-value@^2.0.3, get-value@^2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28"
+ integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=
+
+getpass@^0.1.1:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
+ integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=
+ dependencies:
+ assert-plus "^1.0.0"
+
+gl-axes3d@^1.5.3:
+ version "1.5.3"
+ resolved "https://registry.yarnpkg.com/gl-axes3d/-/gl-axes3d-1.5.3.tgz#47e3dd6c21356a59349910ec01af58e28ea69fe9"
+ integrity sha512-KRYbguKQcDQ6PcB9g1pgqB8Ly4TY1DQODpPKiDTasyWJ8PxQk0t2Q7XoQQijNqvsguITCpVVCzNb5GVtIWiVlQ==
+ dependencies:
+ bit-twiddle "^1.0.2"
+ dup "^1.0.0"
+ extract-frustum-planes "^1.0.0"
+ gl-buffer "^2.1.2"
+ gl-mat4 "^1.2.0"
+ gl-shader "^4.2.1"
+ gl-state "^1.0.0"
+ gl-vao "^1.3.0"
+ gl-vec4 "^1.0.1"
+ glslify "^7.0.0"
+ robust-orientation "^1.1.3"
+ split-polygon "^1.0.0"
+ vectorize-text "^3.2.1"
+
+gl-buffer@^2.1.1, gl-buffer@^2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/gl-buffer/-/gl-buffer-2.1.2.tgz#2db8d9c1a5527fba0cdb91289c206e882b889cdb"
+ integrity sha1-LbjZwaVSf7oM25EonCBuiCuInNs=
+ dependencies:
+ ndarray "^1.0.15"
+ ndarray-ops "^1.1.0"
+ typedarray-pool "^1.0.0"
+
+gl-cone3d@^1.5.1, gl-cone3d@^1.5.2:
+ version "1.5.2"
+ resolved "https://registry.yarnpkg.com/gl-cone3d/-/gl-cone3d-1.5.2.tgz#66af5c33b7d5174034dfa3654a88e995998d92bc"
+ integrity sha512-1JNeHH4sUtUmDA4ZK7Om8/kShwb8IZVAsnxaaB7IPRJsNGciLj1sTpODrJGeMl41RNkex5kXD2SQFrzyEAR2Rw==
+ dependencies:
+ colormap "^2.3.1"
+ gl-buffer "^2.1.2"
+ gl-mat4 "^1.2.0"
+ gl-shader "^4.2.1"
+ gl-texture2d "^2.1.0"
+ gl-vao "^1.3.0"
+ gl-vec3 "^1.1.3"
+ glsl-inverse "^1.0.0"
+ glsl-out-of-range "^1.0.4"
+ glsl-specular-cook-torrance "^2.0.1"
+ glslify "^7.0.0"
+ ndarray "^1.0.18"
+
+gl-constants@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/gl-constants/-/gl-constants-1.0.0.tgz#597a504e364750ff50253aa35f8dea7af4a5d233"
+ integrity sha1-WXpQTjZHUP9QJTqjX43qevSl0jM=
+
+gl-contour2d@^1.1.6:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/gl-contour2d/-/gl-contour2d-1.1.7.tgz#ca330cf8449673a9ca0b3f6726c83f8d35c7a50c"
+ integrity sha512-GdebvJ9DtT3pJDpoE+eU2q+Wo9S3MijPpPz5arZbhK85w2bARmpFpVfPaDlZqWkB644W3BlH8TVyvAo1KE4Bhw==
+ dependencies:
+ binary-search-bounds "^2.0.4"
+ cdt2d "^1.0.0"
+ clean-pslg "^1.1.2"
+ gl-buffer "^2.1.2"
+ gl-shader "^4.2.1"
+ glslify "^7.0.0"
+ iota-array "^1.0.0"
+ ndarray "^1.0.18"
+ surface-nets "^1.0.2"
+
+gl-error3d@^1.0.15:
+ version "1.0.16"
+ resolved "https://registry.yarnpkg.com/gl-error3d/-/gl-error3d-1.0.16.tgz#88a94952f5303d9cf5cb86806789a360777c5446"
+ integrity sha512-TGJewnKSp7ZnqGgG3XCF9ldrDbxZrO+OWlx6oIet4OdOM//n8xJ5isArnIV/sdPJnFbhfoLxWrW9f5fxHFRQ1A==
+ dependencies:
+ gl-buffer "^2.1.2"
+ gl-shader "^4.2.1"
+ gl-vao "^1.3.0"
+ glsl-out-of-range "^1.0.4"
+ glslify "^7.0.0"
+
+gl-fbo@^2.0.5:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/gl-fbo/-/gl-fbo-2.0.5.tgz#0fa75a497cf787695530691c8f04abb6fb55fa22"
+ integrity sha1-D6daSXz3h2lVMGkcjwSrtvtV+iI=
+ dependencies:
+ gl-texture2d "^2.0.0"
+
+gl-format-compiler-error@^1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/gl-format-compiler-error/-/gl-format-compiler-error-1.0.3.tgz#0c79b1751899ce9732e86240f090aa41e98471a8"
+ integrity sha1-DHmxdRiZzpcy6GJA8JCqQemEcag=
+ dependencies:
+ add-line-numbers "^1.0.1"
+ gl-constants "^1.0.0"
+ glsl-shader-name "^1.0.0"
+ sprintf-js "^1.0.3"
+
+gl-heatmap2d@^1.0.5:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/gl-heatmap2d/-/gl-heatmap2d-1.0.6.tgz#d0a2d9e8f5975534224b3b2be2ffe683f6b7e961"
+ integrity sha512-+agzSv4R5vsaH+AGYVz5RVzBK10amqAa+Bwj205F13JjNSGS91M1L9Yb8zssCv2FIjpP+1Mp73cFBYrQFfS1Jg==
+ dependencies:
+ binary-search-bounds "^2.0.4"
+ gl-buffer "^2.1.2"
+ gl-shader "^4.2.1"
+ glslify "^7.0.0"
+ iota-array "^1.0.0"
+ typedarray-pool "^1.1.0"
+
+gl-line3d@1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/gl-line3d/-/gl-line3d-1.2.0.tgz#038d339b8986e602af90dd9663f83678db64247c"
+ integrity sha512-du9GDF87DMfllND2pBjySyHhFaza9upw4t2GMoXn11/I38atO6+saiznuhKmfxuDnyxGdmmZF6/HPauk0owKDA==
+ dependencies:
+ binary-search-bounds "^2.0.4"
+ gl-buffer "^2.1.2"
+ gl-shader "^4.2.1"
+ gl-texture2d "^2.1.0"
+ gl-vao "^1.3.0"
+ glsl-out-of-range "^1.0.4"
+ glslify "^7.0.0"
+ ndarray "^1.0.18"
+
+gl-mat2@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/gl-mat2/-/gl-mat2-1.0.1.tgz#142505730a5c2fe1e9f25d9ece3d0d6cc2710a30"
+ integrity sha1-FCUFcwpcL+Hp8l2ezj0NbMJxCjA=
+
+gl-mat3@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/gl-mat3/-/gl-mat3-1.0.0.tgz#89633219ca429379a16b9185d95d41713453b912"
+ integrity sha1-iWMyGcpCk3mha5GF2V1BcTRTuRI=
+
+gl-mat4@^1.0.0, gl-mat4@^1.0.1, gl-mat4@^1.0.2, gl-mat4@^1.0.3, gl-mat4@^1.1.2, gl-mat4@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/gl-mat4/-/gl-mat4-1.2.0.tgz#49d8a7636b70aa00819216635f4a3fd3f4669b26"
+ integrity sha512-sT5C0pwB1/e9G9AvAoLsoaJtbMGjfd/jfxo8jMCKqYYEnjZuFvqV5rehqar0538EmssjdDeiEWnKyBSTw7quoA==
+
+gl-matrix-invert@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/gl-matrix-invert/-/gl-matrix-invert-1.0.0.tgz#a36d7bde3654c4590a127ee7c68f6e13fea8c63d"
+ integrity sha1-o2173jZUxFkKEn7nxo9uE/6oxj0=
+ dependencies:
+ gl-mat2 "^1.0.0"
+ gl-mat3 "^1.0.0"
+ gl-mat4 "^1.0.0"
+
+gl-matrix@^3.0.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/gl-matrix/-/gl-matrix-3.3.0.tgz#232eef60b1c8b30a28cbbe75b2caf6c48fd6358b"
+ integrity sha512-COb7LDz+SXaHtl/h4LeaFcNdJdAQSDeVqjiIihSXNrkWObZLhDI4hIkZC11Aeqp7bcE72clzB0BnDXr2SmslRA==
+
+gl-mesh3d@^2.3.0:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/gl-mesh3d/-/gl-mesh3d-2.3.1.tgz#087a93c5431df923570ca51cfc691bab0d21a6b8"
+ integrity sha512-pXECamyGgu4/9HeAQSE5OEUuLBGS1aq9V4BCsTcxsND4fNLaajEkYKUz/WY2QSYElqKdsMBVsldGiKRKwlybqA==
+ dependencies:
+ barycentric "^1.0.1"
+ colormap "^2.3.1"
+ gl-buffer "^2.1.2"
+ gl-mat4 "^1.2.0"
+ gl-shader "^4.2.1"
+ gl-texture2d "^2.1.0"
+ gl-vao "^1.3.0"
+ glsl-out-of-range "^1.0.4"
+ glsl-specular-cook-torrance "^2.0.1"
+ glslify "^7.0.0"
+ ndarray "^1.0.18"
+ normals "^1.1.0"
+ polytope-closest-point "^1.0.0"
+ simplicial-complex-contour "^1.0.2"
+ typedarray-pool "^1.1.0"
+
+gl-plot2d@^1.4.3:
+ version "1.4.4"
+ resolved "https://registry.yarnpkg.com/gl-plot2d/-/gl-plot2d-1.4.4.tgz#2dbe40776051436baf0947f828ee2c8c303d2bdb"
+ integrity sha512-0UhKiiqeampLtydv6NMNrKEilc0Ui5oaJtvHLbLZ5u/1ttT1XjOY5Yk8LzfqozA/No4a9omxjSKnH+tvSn+rQQ==
+ dependencies:
+ binary-search-bounds "^2.0.4"
+ gl-buffer "^2.1.2"
+ gl-select-static "^2.0.6"
+ gl-shader "^4.2.1"
+ glsl-inverse "^1.0.0"
+ glslify "^7.0.0"
+ text-cache "^4.2.2"
+
+gl-plot3d@^2.4.4:
+ version "2.4.5"
+ resolved "https://registry.yarnpkg.com/gl-plot3d/-/gl-plot3d-2.4.5.tgz#962e99c3e55862e0ad77e99114566eadb28bf224"
+ integrity sha512-cKAqMXFRHTCFxH8r1/ACdk5hyfnA9djfiAM8zVQrqu0qLEttUu0i1fq0pr+d5m0HPuNcK8wEc4F3VjL2hrDcGQ==
+ dependencies:
+ "3d-view" "^2.0.0"
+ a-big-triangle "^1.0.3"
+ gl-axes3d "^1.5.3"
+ gl-fbo "^2.0.5"
+ gl-mat4 "^1.2.0"
+ gl-select-static "^2.0.6"
+ gl-shader "^4.2.1"
+ gl-spikes3d "^1.0.10"
+ glslify "^7.0.0"
+ has-passive-events "^1.0.0"
+ is-mobile "^2.2.1"
+ mouse-change "^1.4.0"
+ mouse-event-offset "^3.0.2"
+ mouse-wheel "^1.2.0"
+ ndarray "^1.0.18"
+ right-now "^1.0.0"
+
+gl-pointcloud2d@^1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/gl-pointcloud2d/-/gl-pointcloud2d-1.0.3.tgz#f37e215f21ccb2e17f0604664e99fc3d6a4e611d"
+ integrity sha512-OS2e1irvJXVRpg/GziXj10xrFJm9kkRfFoB6BLUvkjCQV7ZRNNcs2CD+YSK1r0gvMwTg2T3lfLM3UPwNtz+4Xw==
+ dependencies:
+ gl-buffer "^2.1.2"
+ gl-shader "^4.2.1"
+ glslify "^7.0.0"
+ typedarray-pool "^1.1.0"
+
+gl-quat@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/gl-quat/-/gl-quat-1.0.0.tgz#0945ec923386f45329be5dc357b1c8c2d47586c5"
+ integrity sha1-CUXskjOG9FMpvl3DV7HIwtR1hsU=
+ dependencies:
+ gl-mat3 "^1.0.0"
+ gl-vec3 "^1.0.3"
+ gl-vec4 "^1.0.0"
+
+gl-scatter3d@^1.2.2:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/gl-scatter3d/-/gl-scatter3d-1.2.3.tgz#83d63700ec2fe4e95b3d1cd613e86de9a6b5f603"
+ integrity sha512-nXqPlT1w5Qt51dTksj+DUqrZqwWAEWg0PocsKcoDnVNv0X8sGA+LBZ0Y+zrA+KNXUL0PPCX9WR9cF2uJAZl1Sw==
+ dependencies:
+ gl-buffer "^2.1.2"
+ gl-mat4 "^1.2.0"
+ gl-shader "^4.2.1"
+ gl-vao "^1.3.0"
+ glsl-out-of-range "^1.0.4"
+ glslify "^7.0.0"
+ is-string-blank "^1.0.1"
+ typedarray-pool "^1.1.0"
+ vectorize-text "^3.2.1"
+
+gl-select-box@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/gl-select-box/-/gl-select-box-1.0.4.tgz#47c11caa2b84f81e8bbfde08c6e39eeebb53d3d8"
+ integrity sha512-mKsCnglraSKyBbQiGq0Ila0WF+m6Tr+EWT2yfaMn/Sh9aMHq5Wt0F/l6Cf/Ed3CdERq5jHWAY5yxLviZteYu2w==
+ dependencies:
+ gl-buffer "^2.1.2"
+ gl-shader "^4.2.1"
+ glslify "^7.0.0"
+
+gl-select-static@^2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/gl-select-static/-/gl-select-static-2.0.6.tgz#43194a348613a693d4097e5ab9ceb0685003f036"
+ integrity sha512-p4DmBG1DMo/47/fV3oqPcU6uTqHy0eI1vATH1fm8OVDqlzWnLv3786tdEunZWG6Br7DUdH6NgWhuy4gAlt+TAQ==
+ dependencies:
+ bit-twiddle "^1.0.2"
+ cwise "^1.0.10"
+ gl-fbo "^2.0.5"
+ ndarray "^1.0.18"
+ typedarray-pool "^1.1.0"
+
+gl-shader@^4.2.1:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/gl-shader/-/gl-shader-4.2.1.tgz#bc9b808e9293c51b668e88de615b0c113708dc2f"
+ integrity sha1-vJuAjpKTxRtmjojeYVsMETcI3C8=
+ dependencies:
+ gl-format-compiler-error "^1.0.2"
+ weakmap-shim "^1.1.0"
+
+gl-spikes2d@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/gl-spikes2d/-/gl-spikes2d-1.0.2.tgz#ef8dbcff6c7451dec2b751d7a3c593d09ad5457f"
+ integrity sha512-QVeOZsi9nQuJJl7NB3132CCv5KA10BWxAY2QgJNsKqbLsG53B/TrGJpjIAohnJftdZ4fT6b3ZojWgeaXk8bOOA==
+
+gl-spikes3d@^1.0.10:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/gl-spikes3d/-/gl-spikes3d-1.0.10.tgz#e3b2b677a6f51750f23c064447af4f093da79305"
+ integrity sha512-lT3xroowOFxMvlhT5Mof76B2TE02l5zt/NIWljhczV2FFHgIVhA4jMrd5dIv1so1RXMBDJIKu0uJI3QKliDVLg==
+ dependencies:
+ gl-buffer "^2.1.2"
+ gl-shader "^4.2.1"
+ gl-vao "^1.3.0"
+ glslify "^7.0.0"
+
+gl-state@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/gl-state/-/gl-state-1.0.0.tgz#262faa75835b0b9c532c12f38adc425d1d30cd17"
+ integrity sha1-Ji+qdYNbC5xTLBLzitxCXR0wzRc=
+ dependencies:
+ uniq "^1.0.0"
+
+gl-streamtube3d@^1.4.0:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/gl-streamtube3d/-/gl-streamtube3d-1.4.1.tgz#bd2b725e00aa96989ce34b06ebf66a76f93e35ae"
+ integrity sha512-rH02v00kgwgdpkXVo7KsSoPp38bIAYR9TE1iONjcQ4cQAlDhrGRauqT/P5sUaOIzs17A2DxWGcXM+EpNQs9pUA==
+ dependencies:
+ gl-cone3d "^1.5.2"
+ gl-vec3 "^1.1.3"
+ gl-vec4 "^1.0.1"
+ glsl-inverse "^1.0.0"
+ glsl-out-of-range "^1.0.4"
+ glsl-specular-cook-torrance "^2.0.1"
+ glslify "^7.0.0"
+
+gl-surface3d@^1.4.6:
+ version "1.5.2"
+ resolved "https://registry.yarnpkg.com/gl-surface3d/-/gl-surface3d-1.5.2.tgz#a283b98d3473fca4e8552f0f6ac40a6f0dc88b00"
+ integrity sha512-rWSQwEQDkB0T5CDEDFJwJc4VgwwJaAyFRSJ92NJlrTSwDlsEsWdzG9+APx6FWJMwkOpIoZGWqv+csswK2kMMLQ==
+ dependencies:
+ binary-search-bounds "^2.0.4"
+ bit-twiddle "^1.0.2"
+ colormap "^2.3.1"
+ dup "^1.0.0"
+ gl-buffer "^2.1.2"
+ gl-mat4 "^1.2.0"
+ gl-shader "^4.2.1"
+ gl-texture2d "^2.1.0"
+ gl-vao "^1.3.0"
+ glsl-out-of-range "^1.0.4"
+ glsl-specular-beckmann "^1.1.2"
+ glslify "^7.0.0"
+ ndarray "^1.0.18"
+ ndarray-gradient "^1.0.0"
+ ndarray-ops "^1.2.2"
+ ndarray-pack "^1.2.1"
+ ndarray-scratch "^1.2.0"
+ surface-nets "^1.0.2"
+ typedarray-pool "^1.1.0"
+
+gl-text@^1.1.8:
+ version "1.1.8"
+ resolved "https://registry.yarnpkg.com/gl-text/-/gl-text-1.1.8.tgz#67a19bec72915acc422300aad8f727a09f98b550"
+ integrity sha512-whnq9DEFYbW92C4ONwk2eT0YkzmVPHoADnEtuzMOmit87XhgAhBrNs3lK9EgGjU/MoWYvlF6RkI8Kl7Yuo1hUw==
+ dependencies:
+ bit-twiddle "^1.0.2"
+ color-normalize "^1.5.0"
+ css-font "^1.2.0"
+ detect-kerning "^2.1.2"
+ es6-weak-map "^2.0.3"
+ flatten-vertex-data "^1.0.2"
+ font-atlas "^2.1.0"
+ font-measure "^1.2.2"
+ gl-util "^3.1.2"
+ is-plain-obj "^1.1.0"
+ object-assign "^4.1.1"
+ parse-rect "^1.2.0"
+ parse-unit "^1.0.1"
+ pick-by-alias "^1.2.0"
+ regl "^1.3.11"
+ to-px "^1.0.1"
+ typedarray-pool "^1.1.0"
+
+gl-texture2d@^2.0.0, gl-texture2d@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/gl-texture2d/-/gl-texture2d-2.1.0.tgz#ff6824e7e7c31a8ba6fdcdbe9e5c695d7e2187c7"
+ integrity sha1-/2gk5+fDGoum/c2+nlxpXX4hh8c=
+ dependencies:
+ ndarray "^1.0.15"
+ ndarray-ops "^1.2.2"
+ typedarray-pool "^1.1.0"
+
+gl-util@^3.1.2:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/gl-util/-/gl-util-3.1.2.tgz#ddc884067fecdccf6fb9c96f5cb3ffc37d579406"
+ integrity sha512-8czWhGTGp/H4S35X1UxGbFlJ1hjtTFhm2mc85GcymEi1CDf633WJgtkCddEiSjIa4BnNxBrqOIhj6jlF6naPqw==
+ dependencies:
+ is-browser "^2.0.1"
+ is-firefox "^1.0.3"
+ is-plain-obj "^1.1.0"
+ number-is-integer "^1.0.1"
+ object-assign "^4.1.0"
+ pick-by-alias "^1.2.0"
+ weak-map "^1.0.5"
+
+gl-vao@^1.2.0, gl-vao@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/gl-vao/-/gl-vao-1.3.0.tgz#e9e92aa95588cab9d5c2f04b693440c3df691923"
+ integrity sha1-6ekqqVWIyrnVwvBLaTRAw99pGSM=
+
+gl-vec3@^1.0.2, gl-vec3@^1.0.3, gl-vec3@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/gl-vec3/-/gl-vec3-1.1.3.tgz#a47c62f918774a06cbed1b65bcd0288ecbb03826"
+ integrity sha512-jduKUqT0SGH02l8Yl+mV1yVsDfYgQAJyXGxkJQGyxPLHRiW25DwVIRPt6uvhrEMHftJfqhqKthRcyZqNEl9Xdw==
+
+gl-vec4@^1.0.0, gl-vec4@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/gl-vec4/-/gl-vec4-1.0.1.tgz#97d96878281b14b532cbce101785dfd1cb340964"
+ integrity sha1-l9loeCgbFLUyy84QF4Xf0cs0CWQ=
+
+glob-parent@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae"
+ integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=
+ dependencies:
+ is-glob "^3.1.0"
+ path-dirname "^1.0.0"
+
+glob-parent@^5.0.0, glob-parent@^5.1.0:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229"
+ integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==
+ dependencies:
+ is-glob "^4.0.1"
+
+glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@~7.1.6:
+ version "7.1.6"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
+ integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
+ dependencies:
+ fs.realpath "^1.0.0"
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "^3.0.4"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+global-modules@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780"
+ integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==
+ dependencies:
+ global-prefix "^3.0.0"
+
+global-modules@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea"
+ integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==
+ dependencies:
+ global-prefix "^1.0.1"
+ is-windows "^1.0.1"
+ resolve-dir "^1.0.0"
+
+global-prefix@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe"
+ integrity sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=
+ dependencies:
+ expand-tilde "^2.0.2"
+ homedir-polyfill "^1.0.1"
+ ini "^1.3.4"
+ is-windows "^1.0.1"
+ which "^1.2.14"
+
+global-prefix@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97"
+ integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==
+ dependencies:
+ ini "^1.3.5"
+ kind-of "^6.0.2"
+ which "^1.3.1"
+
+globals@^11.1.0:
+ version "11.12.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
+ integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
+
+globals@^12.1.0:
+ version "12.4.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8"
+ integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==
+ dependencies:
+ type-fest "^0.8.1"
+
+glsl-inject-defines@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/glsl-inject-defines/-/glsl-inject-defines-1.0.3.tgz#dd1aacc2c17fcb2bd3fc32411c6633d0d7b60fd4"
+ integrity sha1-3RqswsF/yyvT/DJBHGYz0Ne2D9Q=
+ dependencies:
+ glsl-token-inject-block "^1.0.0"
+ glsl-token-string "^1.0.1"
+ glsl-tokenizer "^2.0.2"
+
+glsl-inverse@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/glsl-inverse/-/glsl-inverse-1.0.0.tgz#12c0b1d065f558444d1e6feaf79b5ddf8a918ae6"
+ integrity sha1-EsCx0GX1WERNHm/q95td34qRiuY=
+
+glsl-out-of-range@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/glsl-out-of-range/-/glsl-out-of-range-1.0.4.tgz#3d73d083bc9ecc73efd45dfc7063c29e92c9c873"
+ integrity sha512-fCcDu2LCQ39VBvfe1FbhuazXEf0CqMZI9OYXrYlL6uUARG48CTAbL04+tZBtVM0zo1Ljx4OLu2AxNquq++lxWQ==
+
+glsl-resolve@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/glsl-resolve/-/glsl-resolve-0.0.1.tgz#894bef73910d792c81b5143180035d0a78af76d3"
+ integrity sha1-iUvvc5ENeSyBtRQxgANdCnivdtM=
+ dependencies:
+ resolve "^0.6.1"
+ xtend "^2.1.2"
+
+glsl-shader-name@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/glsl-shader-name/-/glsl-shader-name-1.0.0.tgz#a2c30b3ba73499befb0cc7184d7c7733dd4b487d"
+ integrity sha1-osMLO6c0mb77DMcYTXx3M91LSH0=
+ dependencies:
+ atob-lite "^1.0.0"
+ glsl-tokenizer "^2.0.2"
+
+glsl-specular-beckmann@^1.1.1, glsl-specular-beckmann@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/glsl-specular-beckmann/-/glsl-specular-beckmann-1.1.2.tgz#fce9056933ecdf2456278376a54d082893e775f1"
+ integrity sha1-/OkFaTPs3yRWJ4N2pU0IKJPndfE=
+
+glsl-specular-cook-torrance@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/glsl-specular-cook-torrance/-/glsl-specular-cook-torrance-2.0.1.tgz#a891cc06c8c7b4f4728702b4824fdacbb967d78f"
+ integrity sha1-qJHMBsjHtPRyhwK0gk/ay7ln148=
+ dependencies:
+ glsl-specular-beckmann "^1.1.1"
+
+glsl-token-assignments@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/glsl-token-assignments/-/glsl-token-assignments-2.0.2.tgz#a5d82ab78499c2e8a6b83cb69495e6e665ce019f"
+ integrity sha1-pdgqt4SZwuimuDy2lJXm5mXOAZ8=
+
+glsl-token-defines@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/glsl-token-defines/-/glsl-token-defines-1.0.0.tgz#cb892aa959936231728470d4f74032489697fa9d"
+ integrity sha1-y4kqqVmTYjFyhHDU90AySJaX+p0=
+ dependencies:
+ glsl-tokenizer "^2.0.0"
+
+glsl-token-depth@^1.1.0, glsl-token-depth@^1.1.1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/glsl-token-depth/-/glsl-token-depth-1.1.2.tgz#23c5e30ee2bd255884b4a28bc850b8f791e95d84"
+ integrity sha1-I8XjDuK9JViEtKKLyFC495HpXYQ=
+
+glsl-token-descope@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/glsl-token-descope/-/glsl-token-descope-1.0.2.tgz#0fc90ab326186b82f597b2e77dc9e21efcd32076"
+ integrity sha1-D8kKsyYYa4L1l7LnfcniHvzTIHY=
+ dependencies:
+ glsl-token-assignments "^2.0.0"
+ glsl-token-depth "^1.1.0"
+ glsl-token-properties "^1.0.0"
+ glsl-token-scope "^1.1.0"
+
+glsl-token-inject-block@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/glsl-token-inject-block/-/glsl-token-inject-block-1.1.0.tgz#e1015f5980c1091824adaa2625f1dfde8bd00034"
+ integrity sha1-4QFfWYDBCRgkraomJfHf3ovQADQ=
+
+glsl-token-properties@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/glsl-token-properties/-/glsl-token-properties-1.0.1.tgz#483dc3d839f0d4b5c6171d1591f249be53c28a9e"
+ integrity sha1-SD3D2Dnw1LXGFx0VkfJJvlPCip4=
+
+glsl-token-scope@^1.1.0, glsl-token-scope@^1.1.1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/glsl-token-scope/-/glsl-token-scope-1.1.2.tgz#a1728e78df24444f9cb93fd18ef0f75503a643b1"
+ integrity sha1-oXKOeN8kRE+cuT/RjvD3VQOmQ7E=
+
+glsl-token-string@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/glsl-token-string/-/glsl-token-string-1.0.1.tgz#59441d2f857de7c3449c945666021ece358e48ec"
+ integrity sha1-WUQdL4V958NEnJRWZgIezjWOSOw=
+
+glsl-token-whitespace-trim@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/glsl-token-whitespace-trim/-/glsl-token-whitespace-trim-1.0.0.tgz#46d1dfe98c75bd7d504c05d7d11b1b3e9cc93b10"
+ integrity sha1-RtHf6Yx1vX1QTAXX0RsbPpzJOxA=
+
+glsl-tokenizer@^2.0.0, glsl-tokenizer@^2.0.2:
+ version "2.1.5"
+ resolved "https://registry.yarnpkg.com/glsl-tokenizer/-/glsl-tokenizer-2.1.5.tgz#1c2e78c16589933c274ba278d0a63b370c5fee1a"
+ integrity sha512-XSZEJ/i4dmz3Pmbnpsy3cKh7cotvFlBiZnDOwnj/05EwNp2XrhQ4XKJxT7/pDt4kp4YcpRSKz8eTV7S+mwV6MA==
+ dependencies:
+ through2 "^0.6.3"
+
+glslify-bundle@^5.0.0:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/glslify-bundle/-/glslify-bundle-5.1.1.tgz#30d2ddf2e6b935bf44d1299321e3b729782c409a"
+ integrity sha512-plaAOQPv62M1r3OsWf2UbjN0hUYAB7Aph5bfH58VxJZJhloRNbxOL9tl/7H71K7OLJoSJ2ZqWOKk3ttQ6wy24A==
+ dependencies:
+ glsl-inject-defines "^1.0.1"
+ glsl-token-defines "^1.0.0"
+ glsl-token-depth "^1.1.1"
+ glsl-token-descope "^1.0.2"
+ glsl-token-scope "^1.1.1"
+ glsl-token-string "^1.0.1"
+ glsl-token-whitespace-trim "^1.0.0"
+ glsl-tokenizer "^2.0.2"
+ murmurhash-js "^1.0.0"
+ shallow-copy "0.0.1"
+
+glslify-deps@^1.2.5:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/glslify-deps/-/glslify-deps-1.3.1.tgz#dfa6962322454a91ecc4de25b5e710415b0c89ad"
+ integrity sha512-Ogm179MCazwIRyEqs3g3EOY4Y3XIAa0yl8J5RE9rJC6QH1w8weVOp2RZu0mvnYy/2xIas1w166YR2eZdDkWQxg==
+ dependencies:
+ "@choojs/findup" "^0.2.0"
+ events "^1.0.2"
+ glsl-resolve "0.0.1"
+ glsl-tokenizer "^2.0.0"
+ graceful-fs "^4.1.2"
+ inherits "^2.0.1"
+ map-limit "0.0.1"
+ resolve "^1.0.0"
+
+glslify@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/glslify/-/glslify-7.0.0.tgz#10d5db9541ee07c6548ea55c679edda20307653d"
+ integrity sha512-yw8jDQIe9FlSH5NiZEqSAsCPj9HI7nhXgXLAgSv2Nm9eBPsFJmyN9+rNwbiozJapcj9xtc/71rMYlN9cxp1B8Q==
+ dependencies:
+ bl "^1.0.0"
+ concat-stream "^1.5.2"
+ duplexify "^3.4.5"
+ falafel "^2.1.0"
+ from2 "^2.3.0"
+ glsl-resolve "0.0.1"
+ glsl-token-whitespace-trim "^1.0.0"
+ glslify-bundle "^5.0.0"
+ glslify-deps "^1.2.5"
+ minimist "^1.2.0"
+ resolve "^1.1.5"
+ stack-trace "0.0.9"
+ static-eval "^2.0.0"
+ through2 "^2.0.1"
+ xtend "^4.0.0"
+
+graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0:
+ version "4.2.3"
+ resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423"
+ integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==
+
+grid-index@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/grid-index/-/grid-index-1.1.0.tgz#97f8221edec1026c8377b86446a7c71e79522ea7"
+ integrity sha512-HZRwumpOGUrHyxO5bqKZL0B0GlUpwtCAzZ42sgxUPniu33R1LSFH5yrIcBCHjkctCAh3mtWKcKd9J4vDDdeVHA==
+
+growly@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081"
+ integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=
+
+har-schema@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
+ integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=
+
+har-validator@~5.1.3:
+ version "5.1.3"
+ resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080"
+ integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==
+ dependencies:
+ ajv "^6.5.5"
+ har-schema "^2.0.0"
+
+has-flag@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
+ integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
+
+has-flag@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
+ integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
+
+has-hover@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/has-hover/-/has-hover-1.0.1.tgz#3d97437aeb199c62b8ac08acbdc53d3bc52c17f7"
+ integrity sha1-PZdDeusZnGK4rAisvcU9O8UsF/c=
+ dependencies:
+ is-browser "^2.0.1"
+
+has-passive-events@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-passive-events/-/has-passive-events-1.0.0.tgz#75fc3dc6dada182c58f24ebbdc018276d1ea3515"
+ integrity sha512-2vSj6IeIsgvsRMyeQ0JaCX5Q3lX4zMn5HpoVc7MEhQ6pv8Iq9rsXjsp+E5ZwaT7T0xhMT0KmU8gtt1EFVdbJiw==
+ dependencies:
+ is-browser "^2.0.1"
+
+has-symbols@^1.0.0, has-symbols@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8"
+ integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==
+
+has-unicode@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
+ integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=
+
+has-value@^0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f"
+ integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=
+ dependencies:
+ get-value "^2.0.3"
+ has-values "^0.1.4"
+ isobject "^2.0.0"
+
+has-value@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177"
+ integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=
+ dependencies:
+ get-value "^2.0.6"
+ has-values "^1.0.0"
+ isobject "^3.0.0"
+
+has-values@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771"
+ integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E=
+
+has-values@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f"
+ integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=
+ dependencies:
+ is-number "^3.0.0"
+ kind-of "^4.0.0"
+
+has@^1.0.0, has@^1.0.3, has@~1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
+ integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
+ dependencies:
+ function-bind "^1.1.1"
+
+hash-base@^3.0.0:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918"
+ integrity sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=
+ dependencies:
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
+hash.js@^1.0.0, hash.js@^1.0.3:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42"
+ integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==
+ dependencies:
+ inherits "^2.0.3"
+ minimalistic-assert "^1.0.1"
+
+hmac-drbg@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1"
+ integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=
+ dependencies:
+ hash.js "^1.0.3"
+ minimalistic-assert "^1.0.0"
+ minimalistic-crypto-utils "^1.0.1"
+
+hoist-non-react-statics@^3.3.0:
+ version "3.3.2"
+ resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45"
+ integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==
+ dependencies:
+ react-is "^16.7.0"
+
+homedir-polyfill@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8"
+ integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==
+ dependencies:
+ parse-passwd "^1.0.0"
+
+hosted-git-info@^2.1.4:
+ version "2.8.8"
+ resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488"
+ integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==
+
+hsluv@^0.0.3:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/hsluv/-/hsluv-0.0.3.tgz#829107dafb4a9f8b52a1809ed02e091eade6754c"
+ integrity sha1-gpEH2vtKn4tSoYCe0C4JHq3mdUw=
+
+html-element-map@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/html-element-map/-/html-element-map-1.2.0.tgz#dfbb09efe882806af63d990cf6db37993f099f22"
+ integrity sha512-0uXq8HsuG1v2TmQ8QkIhzbrqeskE4kn52Q18QJ9iAA/SnHoEKXWiUxHQtclRsCFWEUD2So34X+0+pZZu862nnw==
+ dependencies:
+ array-filter "^1.0.0"
+
+html-encoding-sniffer@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8"
+ integrity sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==
+ dependencies:
+ whatwg-encoding "^1.0.1"
+
+html-escaper@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453"
+ integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==
+
+htmlparser2@^3.9.1:
+ version "3.10.1"
+ resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f"
+ integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==
+ dependencies:
+ domelementtype "^1.3.1"
+ domhandler "^2.3.0"
+ domutils "^1.5.1"
+ entities "^1.1.1"
+ inherits "^2.0.1"
+ readable-stream "^3.1.1"
+
+http-signature@~1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1"
+ integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=
+ dependencies:
+ assert-plus "^1.0.0"
+ jsprim "^1.2.2"
+ sshpk "^1.7.0"
+
+https-browserify@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73"
+ integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=
+
+iconv-lite@0.4.24, iconv-lite@^0.4.4:
+ version "0.4.24"
+ resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
+ integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
+ dependencies:
+ safer-buffer ">= 2.1.2 < 3"
+
+icss-utils@^4.0.0, icss-utils@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-4.1.1.tgz#21170b53789ee27447c2f47dd683081403f9a467"
+ integrity sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==
+ dependencies:
+ postcss "^7.0.14"
+
+ieee754@^1.1.12, ieee754@^1.1.4:
+ version "1.1.13"
+ resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84"
+ integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==
+
+iferr@^0.1.5:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501"
+ integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE=
+
+ignore-walk@^3.0.1:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37"
+ integrity sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==
+ dependencies:
+ minimatch "^3.0.4"
+
+ignore@^4.0.6:
+ version "4.0.6"
+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"
+ integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==
+
+image-palette@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/image-palette/-/image-palette-2.1.0.tgz#d976525a1df75964ca125d2dba2741e92905547f"
+ integrity sha512-3ImSEWD26+xuQFdP0RWR4WSXadZwvgrFhjGNpMEapTG1tf2XrBFS2dlKK5hNgH4UIaSQlSUFRn1NeA+zULIWbQ==
+ dependencies:
+ color-id "^1.1.0"
+ pxls "^2.0.0"
+ quantize "^1.0.2"
+
+image-size@~0.5.0:
+ version "0.5.5"
+ resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c"
+ integrity sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=
+
+immutability-helper@^2.3.1:
+ version "2.9.1"
+ resolved "https://registry.yarnpkg.com/immutability-helper/-/immutability-helper-2.9.1.tgz#71c423ba387e67b6c6ceba0650572f2a2a6727df"
+ integrity sha512-r/RmRG8xO06s/k+PIaif2r5rGc3j4Yhc01jSBfwPCXDLYZwp/yxralI37Df1mwmuzcCsen/E/ITKcTEvc1PQmQ==
+ dependencies:
+ invariant "^2.2.0"
+
+import-fresh@^3.0.0, import-fresh@^3.2.1:
+ version "3.2.2"
+ resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.2.tgz#fc129c160c5d68235507f4331a6baad186bdbc3e"
+ integrity sha512-cTPNrlvJT6twpYy+YmKUKrTSjWFs3bjYjAhCwm+z4EOCubZxAuO+hHpRN64TqjEaYSHs7tJAE0w1CKMGmsG/lw==
+ dependencies:
+ parent-module "^1.0.0"
+ resolve-from "^4.0.0"
+
+import-local@2.0.0, import-local@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d"
+ integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==
+ dependencies:
+ pkg-dir "^3.0.0"
+ resolve-cwd "^2.0.0"
+
+imurmurhash@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
+ integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=
+
+incremental-convex-hull@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/incremental-convex-hull/-/incremental-convex-hull-1.0.1.tgz#51428c14cb9d9a6144bfe69b2851fb377334be1e"
+ integrity sha1-UUKMFMudmmFEv+abKFH7N3M0vh4=
+ dependencies:
+ robust-orientation "^1.1.2"
+ simplicial-complex "^1.0.0"
+
+indexes-of@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607"
+ integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc=
+
+infer-owner@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467"
+ integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==
+
+inflight@^1.0.4:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+ integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
+ dependencies:
+ once "^1.3.0"
+ wrappy "1"
+
+inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3, inherits@~2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
+ integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
+
+inherits@2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1"
+ integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=
+
+inherits@2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
+ integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
+
+ini@^1.3.4, ini@^1.3.5, ini@~1.3.0:
+ version "1.3.5"
+ resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927"
+ integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==
+
+interpret@1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296"
+ integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==
+
+interval-tree-1d@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/interval-tree-1d/-/interval-tree-1d-1.0.3.tgz#8fdbde02b6b2c7dbdead636bcbed8e08710d85c1"
+ integrity sha1-j9veArayx9verWNry+2OCHENhcE=
+ dependencies:
+ binary-search-bounds "^1.0.0"
+
+invariant@^2.2.0, invariant@^2.2.2, invariant@^2.2.4:
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6"
+ integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==
+ dependencies:
+ loose-envify "^1.0.0"
+
+invert-kv@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02"
+ integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==
+
+invert-permutation@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/invert-permutation/-/invert-permutation-1.0.0.tgz#a0a78042eadb36bc17551e787efd1439add54933"
+ integrity sha1-oKeAQurbNrwXVR54fv0UOa3VSTM=
+
+iota-array@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/iota-array/-/iota-array-1.0.0.tgz#81ef57fe5d05814cd58c2483632a99c30a0e8087"
+ integrity sha1-ge9X/l0FgUzVjCSDYyqZwwoOgIc=
+
+is-absolute@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-1.0.0.tgz#395e1ae84b11f26ad1795e73c17378e48a301576"
+ integrity sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==
+ dependencies:
+ is-relative "^1.0.0"
+ is-windows "^1.0.1"
+
+is-accessor-descriptor@^0.1.6:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6"
+ integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=
+ dependencies:
+ kind-of "^3.0.2"
+
+is-accessor-descriptor@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656"
+ integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==
+ dependencies:
+ kind-of "^6.0.0"
+
+is-arguments@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.0.4.tgz#3faf966c7cba0ff437fb31f6250082fcf0448cf3"
+ integrity sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==
+
+is-arrayish@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
+ integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=
+
+is-base64@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/is-base64/-/is-base64-0.1.0.tgz#a6f20610c6ef4863a51cba32bc0222544b932622"
+ integrity sha512-WRRyllsGXJM7ZN7gPTCCQ/6wNPTRDwiWdPK66l5sJzcU/oOzcIcRRf0Rux8bkpox/1yjt0F6VJRsQOIG2qz5sg==
+
+is-binary-path@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898"
+ integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=
+ dependencies:
+ binary-extensions "^1.0.0"
+
+is-blob@^2.0.1:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-blob/-/is-blob-2.1.0.tgz#e36cd82c90653f1e1b930f11baf9c64216a05385"
+ integrity sha512-SZ/fTft5eUhQM6oF/ZaASFDEdbFVe89Imltn9uZr03wdKMcWNVYSMjQPFtg05QuNkt5l5c135ElvXEQG0rk4tw==
+
+is-boolean-object@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.0.1.tgz#10edc0900dd127697a92f6f9807c7617d68ac48e"
+ integrity sha512-TqZuVwa/sppcrhUCAYkGBk7w0yxfQQnxq28fjkO53tnK9FQXmdwz2JS5+GjsWQ6RByES1K40nI+yDic5c9/aAQ==
+
+is-browser@^2.0.1, is-browser@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-browser/-/is-browser-2.1.0.tgz#fc084d59a5fced307d6708c59356bad7007371a9"
+ integrity sha512-F5rTJxDQ2sW81fcfOR1GnCXT6sVJC104fCyfj+mjpwNEwaPYSn5fte5jiHmBg3DHsIoL/l8Kvw5VN5SsTRcRFQ==
+
+is-buffer@^1.0.2, is-buffer@^1.1.5:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
+ integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
+
+is-buffer@^2.0.3:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.4.tgz#3e572f23c8411a5cfd9557c849e3665e0b290623"
+ integrity sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==
+
+is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.1.5:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.5.tgz#f7e46b596890456db74e7f6e976cb3273d06faab"
+ integrity sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==
+
+is-ci@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c"
+ integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==
+ dependencies:
+ ci-info "^2.0.0"
+
+is-data-descriptor@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56"
+ integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=
+ dependencies:
+ kind-of "^3.0.2"
+
+is-data-descriptor@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7"
+ integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==
+ dependencies:
+ kind-of "^6.0.0"
+
+is-date-object@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e"
+ integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==
+
+is-descriptor@^0.1.0:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca"
+ integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==
+ dependencies:
+ is-accessor-descriptor "^0.1.6"
+ is-data-descriptor "^0.1.4"
+ kind-of "^5.0.0"
+
+is-descriptor@^1.0.0, is-descriptor@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec"
+ integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==
+ dependencies:
+ is-accessor-descriptor "^1.0.0"
+ is-data-descriptor "^1.0.0"
+ kind-of "^6.0.2"
+
+is-extendable@^0.1.0, is-extendable@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
+ integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=
+
+is-extendable@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4"
+ integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==
+ dependencies:
+ is-plain-object "^2.0.4"
+
+is-extglob@^2.1.0, is-extglob@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
+ integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=
+
+is-finite@^1.0.1:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3"
+ integrity sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==
+
+is-firefox@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/is-firefox/-/is-firefox-1.0.3.tgz#2a2a1567783a417f6e158323108f3861b0918562"
+ integrity sha1-KioVZ3g6QX9uFYMjEI84YbCRhWI=
+
+is-float-array@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-float-array/-/is-float-array-1.0.0.tgz#96d67b1cbadf47ab1e05be208933acd386978a09"
+ integrity sha512-4ew1Sx6B6kEAl3T3NOM0yB94J3NZnBdNt4paw0e8nY73yHHTeTEhyQ3Lj7EQEnv5LD+GxNTaT4L46jcKjjpLiQ==
+
+is-fullwidth-code-point@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
+ integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs=
+ dependencies:
+ number-is-nan "^1.0.0"
+
+is-fullwidth-code-point@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
+ integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=
+
+is-fullwidth-code-point@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
+ integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
+
+is-generator-fn@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118"
+ integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==
+
+is-glob@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a"
+ integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=
+ dependencies:
+ is-extglob "^2.1.0"
+
+is-glob@^4.0.0, is-glob@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc"
+ integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==
+ dependencies:
+ is-extglob "^2.1.1"
+
+is-iexplorer@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-iexplorer/-/is-iexplorer-1.0.0.tgz#1d72bc66d3fe22eaf6170dda8cf10943248cfc76"
+ integrity sha1-HXK8ZtP+Iur2Fw3ajPEJQySM/HY=
+
+is-mobile@^2.2.0, is-mobile@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/is-mobile/-/is-mobile-2.2.1.tgz#10f2320012c410cc285feecb13406bd586f1b2f8"
+ integrity sha512-6zELsfVFr326eq2CI53yvqq6YBanOxKBybwDT+MbMS2laBnK6Ez8m5XHSuTQQbnKRfpDzCod1CMWW5q3wZYMvA==
+
+is-negated-glob@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-negated-glob/-/is-negated-glob-1.0.0.tgz#6910bca5da8c95e784b5751b976cf5a10fee36d2"
+ integrity sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI=
+
+is-number-object@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.4.tgz#36ac95e741cf18b283fc1ddf5e83da798e3ec197"
+ integrity sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==
+
+is-number@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
+ integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=
+ dependencies:
+ kind-of "^3.0.2"
+
+is-number@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
+ integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
+
+is-obj@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
+ integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8=
+
+is-plain-obj@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e"
+ integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4=
+
+is-plain-object@^2.0.3, is-plain-object@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
+ integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==
+ dependencies:
+ isobject "^3.0.1"
+
+is-regex@^1.0.4, is-regex@^1.0.5, is-regex@~1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.5.tgz#39d589a358bf18967f726967120b8fc1aed74eae"
+ integrity sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==
+ dependencies:
+ has "^1.0.3"
+
+is-relative@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-1.0.0.tgz#a1bb6935ce8c5dba1e8b9754b9b2dcc020e2260d"
+ integrity sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==
+ dependencies:
+ is-unc-path "^1.0.0"
+
+is-stream@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
+ integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ=
+
+is-string-blank@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-string-blank/-/is-string-blank-1.0.1.tgz#866dca066d41d2894ebdfd2d8fe93e586e583a03"
+ integrity sha512-9H+ZBCVs3L9OYqv8nuUAzpcT9OTgMD1yAWrG7ihlnibdkbtB850heAmYWxHuXc4CHy4lKeK69tN+ny1K7gBIrw==
+
+is-string@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6"
+ integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==
+
+is-subset@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/is-subset/-/is-subset-0.1.1.tgz#8a59117d932de1de00f245fcdd39ce43f1e939a6"
+ integrity sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY=
+
+is-svg-path@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-svg-path/-/is-svg-path-1.0.2.tgz#77ab590c12b3d20348e5c7a13d0040c87784dda0"
+ integrity sha1-d6tZDBKz0gNI5cehPQBAyHeE3aA=
+
+is-symbol@^1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937"
+ integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==
+ dependencies:
+ has-symbols "^1.0.1"
+
+is-typedarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
+ integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
+
+is-unc-path@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-1.0.0.tgz#d731e8898ed090a12c352ad2eaed5095ad322c9d"
+ integrity sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==
+ dependencies:
+ unc-path-regex "^0.1.2"
+
+is-windows@^1.0.1, is-windows@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
+ integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==
+
+is-wsl@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d"
+ integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=
+
+isarray@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
+ integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=
+
+isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
+ integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
+
+isarray@^2.0.1:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723"
+ integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==
+
+isexe@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
+ integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
+
+isobject@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
+ integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=
+ dependencies:
+ isarray "1.0.0"
+
+isobject@^3.0.0, isobject@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
+ integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8=
+
+isstream@~0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
+ integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=
+
+istanbul-lib-coverage@^2.0.2, istanbul-lib-coverage@^2.0.5:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz#675f0ab69503fad4b1d849f736baaca803344f49"
+ integrity sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==
+
+istanbul-lib-coverage@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz#f5944a37c70b550b02a78a5c3b2055b280cec8ec"
+ integrity sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==
+
+istanbul-lib-instrument@^3.0.1, istanbul-lib-instrument@^3.3.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz#a5f63d91f0bbc0c3e479ef4c5de027335ec6d630"
+ integrity sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==
+ dependencies:
+ "@babel/generator" "^7.4.0"
+ "@babel/parser" "^7.4.3"
+ "@babel/template" "^7.4.0"
+ "@babel/traverse" "^7.4.3"
+ "@babel/types" "^7.4.0"
+ istanbul-lib-coverage "^2.0.5"
+ semver "^6.0.0"
+
+istanbul-lib-instrument@^4.0.0:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d"
+ integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==
+ dependencies:
+ "@babel/core" "^7.7.5"
+ "@istanbuljs/schema" "^0.1.2"
+ istanbul-lib-coverage "^3.0.0"
+ semver "^6.3.0"
+
+istanbul-lib-report@^2.0.4:
+ version "2.0.8"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz#5a8113cd746d43c4889eba36ab10e7d50c9b4f33"
+ integrity sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==
+ dependencies:
+ istanbul-lib-coverage "^2.0.5"
+ make-dir "^2.1.0"
+ supports-color "^6.1.0"
+
+istanbul-lib-source-maps@^3.0.1:
+ version "3.0.6"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz#284997c48211752ec486253da97e3879defba8c8"
+ integrity sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==
+ dependencies:
+ debug "^4.1.1"
+ istanbul-lib-coverage "^2.0.5"
+ make-dir "^2.1.0"
+ rimraf "^2.6.3"
+ source-map "^0.6.1"
+
+istanbul-reports@^2.2.6:
+ version "2.2.7"
+ resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-2.2.7.tgz#5d939f6237d7b48393cc0959eab40cd4fd056931"
+ integrity sha512-uu1F/L1o5Y6LzPVSVZXNOoD/KXpJue9aeLRd0sM9uMXfZvzomB0WxVamWb5ue8kA2vVWEmW7EG+A5n3f1kqHKg==
+ dependencies:
+ html-escaper "^2.0.0"
+
+jest-changed-files@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-24.9.0.tgz#08d8c15eb79a7fa3fc98269bc14b451ee82f8039"
+ integrity sha512-6aTWpe2mHF0DhL28WjdkO8LyGjs3zItPET4bMSeXU6T3ub4FPMw+mcOcbdGXQOAfmLcxofD23/5Bl9Z4AkFwqg==
+ dependencies:
+ "@jest/types" "^24.9.0"
+ execa "^1.0.0"
+ throat "^4.0.0"
+
+jest-cli@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-24.9.0.tgz#ad2de62d07472d419c6abc301fc432b98b10d2af"
+ integrity sha512-+VLRKyitT3BWoMeSUIHRxV/2g8y9gw91Jh5z2UmXZzkZKpbC08CSehVxgHUwTpy+HwGcns/tqafQDJW7imYvGg==
+ dependencies:
+ "@jest/core" "^24.9.0"
+ "@jest/test-result" "^24.9.0"
+ "@jest/types" "^24.9.0"
+ chalk "^2.0.1"
+ exit "^0.1.2"
+ import-local "^2.0.0"
+ is-ci "^2.0.0"
+ jest-config "^24.9.0"
+ jest-util "^24.9.0"
+ jest-validate "^24.9.0"
+ prompts "^2.0.1"
+ realpath-native "^1.1.0"
+ yargs "^13.3.0"
+
+jest-config@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-24.9.0.tgz#fb1bbc60c73a46af03590719efa4825e6e4dd1b5"
+ integrity sha512-RATtQJtVYQrp7fvWg6f5y3pEFj9I+H8sWw4aKxnDZ96mob5i5SD6ZEGWgMLXQ4LE8UurrjbdlLWdUeo+28QpfQ==
+ dependencies:
+ "@babel/core" "^7.1.0"
+ "@jest/test-sequencer" "^24.9.0"
+ "@jest/types" "^24.9.0"
+ babel-jest "^24.9.0"
+ chalk "^2.0.1"
+ glob "^7.1.1"
+ jest-environment-jsdom "^24.9.0"
+ jest-environment-node "^24.9.0"
+ jest-get-type "^24.9.0"
+ jest-jasmine2 "^24.9.0"
+ jest-regex-util "^24.3.0"
+ jest-resolve "^24.9.0"
+ jest-util "^24.9.0"
+ jest-validate "^24.9.0"
+ micromatch "^3.1.10"
+ pretty-format "^24.9.0"
+ realpath-native "^1.1.0"
+
+jest-diff@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-24.9.0.tgz#931b7d0d5778a1baf7452cb816e325e3724055da"
+ integrity sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ==
+ dependencies:
+ chalk "^2.0.1"
+ diff-sequences "^24.9.0"
+ jest-get-type "^24.9.0"
+ pretty-format "^24.9.0"
+
+jest-diff@^26.0.0:
+ version "26.6.2"
+ resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.6.2.tgz#1aa7468b52c3a68d7d5c5fdcdfcd5e49bd164394"
+ integrity sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==
+ dependencies:
+ chalk "^4.0.0"
+ diff-sequences "^26.6.2"
+ jest-get-type "^26.3.0"
+ pretty-format "^26.6.2"
+
+jest-docblock@^24.3.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-24.9.0.tgz#7970201802ba560e1c4092cc25cbedf5af5a8ce2"
+ integrity sha512-F1DjdpDMJMA1cN6He0FNYNZlo3yYmOtRUnktrT9Q37njYzC5WEaDdmbynIgy0L/IvXvvgsG8OsqhLPXTpfmZAA==
+ dependencies:
+ detect-newline "^2.1.0"
+
+jest-each@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-24.9.0.tgz#eb2da602e2a610898dbc5f1f6df3ba86b55f8b05"
+ integrity sha512-ONi0R4BvW45cw8s2Lrx8YgbeXL1oCQ/wIDwmsM3CqM/nlblNCPmnC3IPQlMbRFZu3wKdQ2U8BqM6lh3LJ5Bsog==
+ dependencies:
+ "@jest/types" "^24.9.0"
+ chalk "^2.0.1"
+ jest-get-type "^24.9.0"
+ jest-util "^24.9.0"
+ pretty-format "^24.9.0"
+
+jest-environment-jsdom@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-24.9.0.tgz#4b0806c7fc94f95edb369a69cc2778eec2b7375b"
+ integrity sha512-Zv9FV9NBRzLuALXjvRijO2351DRQeLYXtpD4xNvfoVFw21IOKNhZAEUKcbiEtjTkm2GsJ3boMVgkaR7rN8qetA==
+ dependencies:
+ "@jest/environment" "^24.9.0"
+ "@jest/fake-timers" "^24.9.0"
+ "@jest/types" "^24.9.0"
+ jest-mock "^24.9.0"
+ jest-util "^24.9.0"
+ jsdom "^11.5.1"
+
+jest-environment-node@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-24.9.0.tgz#333d2d2796f9687f2aeebf0742b519f33c1cbfd3"
+ integrity sha512-6d4V2f4nxzIzwendo27Tr0aFm+IXWa0XEUnaH6nU0FMaozxovt+sfRvh4J47wL1OvF83I3SSTu0XK+i4Bqe7uA==
+ dependencies:
+ "@jest/environment" "^24.9.0"
+ "@jest/fake-timers" "^24.9.0"
+ "@jest/types" "^24.9.0"
+ jest-mock "^24.9.0"
+ jest-util "^24.9.0"
+
+jest-get-type@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-24.9.0.tgz#1684a0c8a50f2e4901b6644ae861f579eed2ef0e"
+ integrity sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==
+
+jest-get-type@^26.3.0:
+ version "26.3.0"
+ resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-26.3.0.tgz#e97dc3c3f53c2b406ca7afaed4493b1d099199e0"
+ integrity sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==
+
+jest-haste-map@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-24.9.0.tgz#b38a5d64274934e21fa417ae9a9fbeb77ceaac7d"
+ integrity sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ==
+ dependencies:
+ "@jest/types" "^24.9.0"
+ anymatch "^2.0.0"
+ fb-watchman "^2.0.0"
+ graceful-fs "^4.1.15"
+ invariant "^2.2.4"
+ jest-serializer "^24.9.0"
+ jest-util "^24.9.0"
+ jest-worker "^24.9.0"
+ micromatch "^3.1.10"
+ sane "^4.0.3"
+ walker "^1.0.7"
+ optionalDependencies:
+ fsevents "^1.2.7"
+
+jest-jasmine2@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-24.9.0.tgz#1f7b1bd3242c1774e62acabb3646d96afc3be6a0"
+ integrity sha512-Cq7vkAgaYKp+PsX+2/JbTarrk0DmNhsEtqBXNwUHkdlbrTBLtMJINADf2mf5FkowNsq8evbPc07/qFO0AdKTzw==
+ dependencies:
+ "@babel/traverse" "^7.1.0"
+ "@jest/environment" "^24.9.0"
+ "@jest/test-result" "^24.9.0"
+ "@jest/types" "^24.9.0"
+ chalk "^2.0.1"
+ co "^4.6.0"
+ expect "^24.9.0"
+ is-generator-fn "^2.0.0"
+ jest-each "^24.9.0"
+ jest-matcher-utils "^24.9.0"
+ jest-message-util "^24.9.0"
+ jest-runtime "^24.9.0"
+ jest-snapshot "^24.9.0"
+ jest-util "^24.9.0"
+ pretty-format "^24.9.0"
+ throat "^4.0.0"
+
+jest-leak-detector@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-24.9.0.tgz#b665dea7c77100c5c4f7dfcb153b65cf07dcf96a"
+ integrity sha512-tYkFIDsiKTGwb2FG1w8hX9V0aUb2ot8zY/2nFg087dUageonw1zrLMP4W6zsRO59dPkTSKie+D4rhMuP9nRmrA==
+ dependencies:
+ jest-get-type "^24.9.0"
+ pretty-format "^24.9.0"
+
+jest-matcher-utils@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-24.9.0.tgz#f5b3661d5e628dffe6dd65251dfdae0e87c3a073"
+ integrity sha512-OZz2IXsu6eaiMAwe67c1T+5tUAtQyQx27/EMEkbFAGiw52tB9em+uGbzpcgYVpA8wl0hlxKPZxrly4CXU/GjHA==
+ dependencies:
+ chalk "^2.0.1"
+ jest-diff "^24.9.0"
+ jest-get-type "^24.9.0"
+ pretty-format "^24.9.0"
+
+jest-message-util@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-24.9.0.tgz#527f54a1e380f5e202a8d1149b0ec872f43119e3"
+ integrity sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw==
+ dependencies:
+ "@babel/code-frame" "^7.0.0"
+ "@jest/test-result" "^24.9.0"
+ "@jest/types" "^24.9.0"
+ "@types/stack-utils" "^1.0.1"
+ chalk "^2.0.1"
+ micromatch "^3.1.10"
+ slash "^2.0.0"
+ stack-utils "^1.0.1"
+
+jest-mock@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-24.9.0.tgz#c22835541ee379b908673ad51087a2185c13f1c6"
+ integrity sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w==
+ dependencies:
+ "@jest/types" "^24.9.0"
+
+jest-pnp-resolver@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.1.tgz#ecdae604c077a7fbc70defb6d517c3c1c898923a"
+ integrity sha512-pgFw2tm54fzgYvc/OHrnysABEObZCUNFnhjoRjaVOCN8NYc032/gVjPaHD4Aq6ApkSieWtfKAFQtmDKAmhupnQ==
+
+jest-regex-util@^24.3.0, jest-regex-util@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-24.9.0.tgz#c13fb3380bde22bf6575432c493ea8fe37965636"
+ integrity sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA==
+
+jest-resolve-dependencies@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-24.9.0.tgz#ad055198959c4cfba8a4f066c673a3f0786507ab"
+ integrity sha512-Fm7b6AlWnYhT0BXy4hXpactHIqER7erNgIsIozDXWl5dVm+k8XdGVe1oTg1JyaFnOxarMEbax3wyRJqGP2Pq+g==
+ dependencies:
+ "@jest/types" "^24.9.0"
+ jest-regex-util "^24.3.0"
+ jest-snapshot "^24.9.0"
+
+jest-resolve@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-24.9.0.tgz#dff04c7687af34c4dd7e524892d9cf77e5d17321"
+ integrity sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ==
+ dependencies:
+ "@jest/types" "^24.9.0"
+ browser-resolve "^1.11.3"
+ chalk "^2.0.1"
+ jest-pnp-resolver "^1.2.1"
+ realpath-native "^1.1.0"
+
+jest-runner@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-24.9.0.tgz#574fafdbd54455c2b34b4bdf4365a23857fcdf42"
+ integrity sha512-KksJQyI3/0mhcfspnxxEOBueGrd5E4vV7ADQLT9ESaCzz02WnbdbKWIf5Mkaucoaj7obQckYPVX6JJhgUcoWWg==
+ dependencies:
+ "@jest/console" "^24.7.1"
+ "@jest/environment" "^24.9.0"
+ "@jest/test-result" "^24.9.0"
+ "@jest/types" "^24.9.0"
+ chalk "^2.4.2"
+ exit "^0.1.2"
+ graceful-fs "^4.1.15"
+ jest-config "^24.9.0"
+ jest-docblock "^24.3.0"
+ jest-haste-map "^24.9.0"
+ jest-jasmine2 "^24.9.0"
+ jest-leak-detector "^24.9.0"
+ jest-message-util "^24.9.0"
+ jest-resolve "^24.9.0"
+ jest-runtime "^24.9.0"
+ jest-util "^24.9.0"
+ jest-worker "^24.6.0"
+ source-map-support "^0.5.6"
+ throat "^4.0.0"
+
+jest-runtime@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-24.9.0.tgz#9f14583af6a4f7314a6a9d9f0226e1a781c8e4ac"
+ integrity sha512-8oNqgnmF3v2J6PVRM2Jfuj8oX3syKmaynlDMMKQ4iyzbQzIG6th5ub/lM2bCMTmoTKM3ykcUYI2Pw9xwNtjMnw==
+ dependencies:
+ "@jest/console" "^24.7.1"
+ "@jest/environment" "^24.9.0"
+ "@jest/source-map" "^24.3.0"
+ "@jest/transform" "^24.9.0"
+ "@jest/types" "^24.9.0"
+ "@types/yargs" "^13.0.0"
+ chalk "^2.0.1"
+ exit "^0.1.2"
+ glob "^7.1.3"
+ graceful-fs "^4.1.15"
+ jest-config "^24.9.0"
+ jest-haste-map "^24.9.0"
+ jest-message-util "^24.9.0"
+ jest-mock "^24.9.0"
+ jest-regex-util "^24.3.0"
+ jest-resolve "^24.9.0"
+ jest-snapshot "^24.9.0"
+ jest-util "^24.9.0"
+ jest-validate "^24.9.0"
+ realpath-native "^1.1.0"
+ slash "^2.0.0"
+ strip-bom "^3.0.0"
+ yargs "^13.3.0"
+
+jest-serializer@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-24.9.0.tgz#e6d7d7ef96d31e8b9079a714754c5d5c58288e73"
+ integrity sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ==
+
+jest-snapshot@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-24.9.0.tgz#ec8e9ca4f2ec0c5c87ae8f925cf97497b0e951ba"
+ integrity sha512-uI/rszGSs73xCM0l+up7O7a40o90cnrk429LOiK3aeTvfC0HHmldbd81/B7Ix81KSFe1lwkbl7GnBGG4UfuDew==
+ dependencies:
+ "@babel/types" "^7.0.0"
+ "@jest/types" "^24.9.0"
+ chalk "^2.0.1"
+ expect "^24.9.0"
+ jest-diff "^24.9.0"
+ jest-get-type "^24.9.0"
+ jest-matcher-utils "^24.9.0"
+ jest-message-util "^24.9.0"
+ jest-resolve "^24.9.0"
+ mkdirp "^0.5.1"
+ natural-compare "^1.4.0"
+ pretty-format "^24.9.0"
+ semver "^6.2.0"
+
+jest-util@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-24.9.0.tgz#7396814e48536d2e85a37de3e4c431d7cb140162"
+ integrity sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg==
+ dependencies:
+ "@jest/console" "^24.9.0"
+ "@jest/fake-timers" "^24.9.0"
+ "@jest/source-map" "^24.9.0"
+ "@jest/test-result" "^24.9.0"
+ "@jest/types" "^24.9.0"
+ callsites "^3.0.0"
+ chalk "^2.0.1"
+ graceful-fs "^4.1.15"
+ is-ci "^2.0.0"
+ mkdirp "^0.5.1"
+ slash "^2.0.0"
+ source-map "^0.6.0"
+
+jest-validate@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-24.9.0.tgz#0775c55360d173cd854e40180756d4ff52def8ab"
+ integrity sha512-HPIt6C5ACwiqSiwi+OfSSHbK8sG7akG8eATl+IPKaeIjtPOeBUd/g3J7DghugzxrGjI93qS/+RPKe1H6PqvhRQ==
+ dependencies:
+ "@jest/types" "^24.9.0"
+ camelcase "^5.3.1"
+ chalk "^2.0.1"
+ jest-get-type "^24.9.0"
+ leven "^3.1.0"
+ pretty-format "^24.9.0"
+
+jest-watcher@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-24.9.0.tgz#4b56e5d1ceff005f5b88e528dc9afc8dd4ed2b3b"
+ integrity sha512-+/fLOfKPXXYJDYlks62/4R4GoT+GU1tYZed99JSCOsmzkkF7727RqKrjNAxtfO4YpGv11wybgRvCjR73lK2GZw==
+ dependencies:
+ "@jest/test-result" "^24.9.0"
+ "@jest/types" "^24.9.0"
+ "@types/yargs" "^13.0.0"
+ ansi-escapes "^3.0.0"
+ chalk "^2.0.1"
+ jest-util "^24.9.0"
+ string-length "^2.0.0"
+
+jest-worker@^24.0.0, jest-worker@^24.6.0, jest-worker@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.9.0.tgz#5dbfdb5b2d322e98567898238a9697bcce67b3e5"
+ integrity sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==
+ dependencies:
+ merge-stream "^2.0.0"
+ supports-color "^6.1.0"
+
+jest@^24.1.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest/-/jest-24.9.0.tgz#987d290c05a08b52c56188c1002e368edb007171"
+ integrity sha512-YvkBL1Zm7d2B1+h5fHEOdyjCG+sGMz4f8D86/0HiqJ6MB4MnDc8FgP5vdWsGnemOQro7lnYo8UakZ3+5A0jxGw==
+ dependencies:
+ import-local "^2.0.0"
+ jest-cli "^24.9.0"
+
+"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
+ integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
+
+js-yaml@^3.13.1:
+ version "3.14.0"
+ resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482"
+ integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==
+ dependencies:
+ argparse "^1.0.7"
+ esprima "^4.0.0"
+
+jsbn@~0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
+ integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM=
+
+jscodeshift@^0.6.3:
+ version "0.6.4"
+ resolved "https://registry.yarnpkg.com/jscodeshift/-/jscodeshift-0.6.4.tgz#e19ab86214edac86a75c4557fc88b3937d558a8e"
+ integrity sha512-+NF/tlNbc2WEhXUuc4WEJLsJumF84tnaMUZW2hyJw3jThKKRvsPX4sPJVgO1lPE28z0gNL+gwniLG9d8mYvQCQ==
+ dependencies:
+ "@babel/core" "^7.1.6"
+ "@babel/parser" "^7.1.6"
+ "@babel/plugin-proposal-class-properties" "^7.1.0"
+ "@babel/plugin-proposal-object-rest-spread" "^7.0.0"
+ "@babel/preset-env" "^7.1.6"
+ "@babel/preset-flow" "^7.0.0"
+ "@babel/preset-typescript" "^7.1.0"
+ "@babel/register" "^7.0.0"
+ babel-core "^7.0.0-bridge.0"
+ colors "^1.1.2"
+ flow-parser "0.*"
+ graceful-fs "^4.1.11"
+ micromatch "^3.1.10"
+ neo-async "^2.5.0"
+ node-dir "^0.1.17"
+ recast "^0.16.1"
+ temp "^0.8.1"
+ write-file-atomic "^2.3.0"
+
+jscodeshift@^0.7.0:
+ version "0.7.1"
+ resolved "https://registry.yarnpkg.com/jscodeshift/-/jscodeshift-0.7.1.tgz#0236ad475d6f0770ca998a0160925d62b57d2507"
+ integrity sha512-YMkZSyoc8zg5woZL23cmWlnFLPH/mHilonGA7Qbzs7H6M4v4PH0Qsn4jeDyw+CHhVoAnm9UxQyB0Yw1OT+mktA==
+ dependencies:
+ "@babel/core" "^7.1.6"
+ "@babel/parser" "^7.1.6"
+ "@babel/plugin-proposal-class-properties" "^7.1.0"
+ "@babel/plugin-proposal-object-rest-spread" "^7.0.0"
+ "@babel/preset-env" "^7.1.6"
+ "@babel/preset-flow" "^7.0.0"
+ "@babel/preset-typescript" "^7.1.0"
+ "@babel/register" "^7.0.0"
+ babel-core "^7.0.0-bridge.0"
+ colors "^1.1.2"
+ flow-parser "0.*"
+ graceful-fs "^4.1.11"
+ micromatch "^3.1.10"
+ neo-async "^2.5.0"
+ node-dir "^0.1.17"
+ recast "^0.18.1"
+ temp "^0.8.1"
+ write-file-atomic "^2.3.0"
+
+jsdom@^11.5.1:
+ version "11.12.0"
+ resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.12.0.tgz#1a80d40ddd378a1de59656e9e6dc5a3ba8657bc8"
+ integrity sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==
+ dependencies:
+ abab "^2.0.0"
+ acorn "^5.5.3"
+ acorn-globals "^4.1.0"
+ array-equal "^1.0.0"
+ cssom ">= 0.3.2 < 0.4.0"
+ cssstyle "^1.0.0"
+ data-urls "^1.0.0"
+ domexception "^1.0.1"
+ escodegen "^1.9.1"
+ html-encoding-sniffer "^1.0.2"
+ left-pad "^1.3.0"
+ nwsapi "^2.0.7"
+ parse5 "4.0.0"
+ pn "^1.1.0"
+ request "^2.87.0"
+ request-promise-native "^1.0.5"
+ sax "^1.2.4"
+ symbol-tree "^3.2.2"
+ tough-cookie "^2.3.4"
+ w3c-hr-time "^1.0.1"
+ webidl-conversions "^4.0.2"
+ whatwg-encoding "^1.0.3"
+ whatwg-mimetype "^2.1.0"
+ whatwg-url "^6.4.1"
+ ws "^5.2.0"
+ xml-name-validator "^3.0.0"
+
+jsesc@^2.5.1:
+ version "2.5.2"
+ resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4"
+ integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==
+
+jsesc@~0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d"
+ integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=
+
+json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9"
+ integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==
+
+json-schema-traverse@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
+ integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
+
+json-schema@0.2.3:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
+ integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=
+
+json-stable-stringify-without-jsonify@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
+ integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=
+
+json-stringify-safe@~5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
+ integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
+
+json5-writer@^0.1.8:
+ version "0.1.8"
+ resolved "https://registry.yarnpkg.com/json5-writer/-/json5-writer-0.1.8.tgz#98e1934ef6002f8ac12f36438e2b39c49af213fd"
+ integrity sha512-h5sqkk/vSKvESOUTBniGWs8p8nTzHsoDrxPS9enJfQVINqXv3lm+FAyizLwbrCwCn0q7NXqDBb+r8AdUdK3XZw==
+ dependencies:
+ jscodeshift "^0.6.3"
+
+json5@^0.5.1:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821"
+ integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=
+
+json5@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe"
+ integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==
+ dependencies:
+ minimist "^1.2.0"
+
+json5@^2.1.1, json5@^2.1.2:
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43"
+ integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==
+ dependencies:
+ minimist "^1.2.5"
+
+jsonfile@^6.0.1:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae"
+ integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==
+ dependencies:
+ universalify "^2.0.0"
+ optionalDependencies:
+ graceful-fs "^4.1.6"
+
+jsprim@^1.2.2:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
+ integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=
+ dependencies:
+ assert-plus "1.0.0"
+ extsprintf "1.3.0"
+ json-schema "0.2.3"
+ verror "1.10.0"
+
+kdbush@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/kdbush/-/kdbush-3.0.0.tgz#f8484794d47004cc2d85ed3a79353dbe0abc2bf0"
+ integrity sha512-hRkd6/XW4HTsA9vjVpY9tuXJYLSlelnkTmVFu4M9/7MIYQtFcHpbugAU7UbOfjOiVSVYl2fqgBuJ32JUmRo5Ew==
+
+kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0:
+ version "3.2.2"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
+ integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=
+ dependencies:
+ is-buffer "^1.1.5"
+
+kind-of@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57"
+ integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc=
+ dependencies:
+ is-buffer "^1.1.5"
+
+kind-of@^5.0.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d"
+ integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==
+
+kind-of@^6.0.0, kind-of@^6.0.2:
+ version "6.0.3"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
+ integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
+
+kleur@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e"
+ integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==
+
+lazy-cache@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e"
+ integrity sha1-odePw6UEdMuAhF07O24dpJpEbo4=
+
+lcid@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf"
+ integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==
+ dependencies:
+ invert-kv "^2.0.0"
+
+leaflet-fullscreen@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/leaflet-fullscreen/-/leaflet-fullscreen-1.0.2.tgz#09c61c4bac45f63b2ee126afd87e5cd97650fc1b"
+ integrity sha1-CcYcS6xF9jsu4Sav2H5c2XZQ/Bs=
+
+leaflet.markercluster@^1.1.0:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/leaflet.markercluster/-/leaflet.markercluster-1.4.1.tgz#b53f2c4f2ca7306ddab1dbb6f1861d5e8aa6c5e5"
+ integrity sha512-ZSEpE/EFApR0bJ1w/dUGwTSUvWlpalKqIzkaYdYB7jaftQA/Y2Jav+eT4CMtEYFj+ZK4mswP13Q2acnPBnhGOw==
+
+leaflet@^1.2.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/leaflet/-/leaflet-1.6.0.tgz#aecbb044b949ec29469eeb31c77a88e2f448f308"
+ integrity sha512-CPkhyqWUKZKFJ6K8umN5/D2wrJ2+/8UIpXppY7QDnUZW5bZL5+SEI2J7GBpwh4LIupOKqbNSQXgqmrEJopHVNQ==
+
+left-pad@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e"
+ integrity sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==
+
+lerp@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/lerp/-/lerp-1.0.3.tgz#a18c8968f917896de15ccfcc28d55a6b731e776e"
+ integrity sha1-oYyJaPkXiW3hXM/MKNVaa3Med24=
+
+less-loader@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/less-loader/-/less-loader-5.0.0.tgz#498dde3a6c6c4f887458ee9ed3f086a12ad1b466"
+ integrity sha512-bquCU89mO/yWLaUq0Clk7qCsKhsF/TZpJUzETRvJa9KSVEL9SO3ovCvdEHISBhrC81OwC8QSVX7E0bzElZj9cg==
+ dependencies:
+ clone "^2.1.1"
+ loader-utils "^1.1.0"
+ pify "^4.0.1"
+
+less-plugin-autoprefix@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/less-plugin-autoprefix/-/less-plugin-autoprefix-2.0.0.tgz#778e6f2fe56884381c4fc3c747b0879e944f8481"
+ integrity sha512-UktaMtHAhCVTIQxjlceo1MiiQiUZws7gi3hfcpxkCLn1CJdVdlRGCb4n1/M64hniw2DLd7YzOl7ojshs1tWYcQ==
+ dependencies:
+ autoprefixer "^8.6.3"
+ postcss "^6.0.22"
+
+less@^3.11.1:
+ version "3.11.1"
+ resolved "https://registry.yarnpkg.com/less/-/less-3.11.1.tgz#c6bf08e39e02404fe6b307a3dfffafdc55bd36e2"
+ integrity sha512-tlWX341RECuTOvoDIvtFqXsKj072hm3+9ymRBe76/mD6O5ZZecnlAOVDlWAleF2+aohFrxNidXhv2773f6kY7g==
+ dependencies:
+ clone "^2.1.2"
+ tslib "^1.10.0"
+ optionalDependencies:
+ errno "^0.1.1"
+ graceful-fs "^4.1.2"
+ image-size "~0.5.0"
+ mime "^1.4.1"
+ mkdirp "^0.5.0"
+ promise "^7.1.1"
+ request "^2.83.0"
+ source-map "~0.6.0"
+
+leven@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2"
+ integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==
+
+levenary@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/levenary/-/levenary-1.1.1.tgz#842a9ee98d2075aa7faeedbe32679e9205f46f77"
+ integrity sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ==
+ dependencies:
+ leven "^3.1.0"
+
+levn@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade"
+ integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==
+ dependencies:
+ prelude-ls "^1.2.1"
+ type-check "~0.4.0"
+
+levn@~0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
+ integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=
+ dependencies:
+ prelude-ls "~1.1.2"
+ type-check "~0.3.2"
+
+load-json-file@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b"
+ integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs=
+ dependencies:
+ graceful-fs "^4.1.2"
+ parse-json "^4.0.0"
+ pify "^3.0.0"
+ strip-bom "^3.0.0"
+
+loader-runner@^2.4.0:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357"
+ integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==
+
+loader-utils@1.2.3:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7"
+ integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==
+ dependencies:
+ big.js "^5.2.2"
+ emojis-list "^2.0.0"
+ json5 "^1.0.1"
+
+loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613"
+ integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==
+ dependencies:
+ big.js "^5.2.2"
+ emojis-list "^3.0.0"
+ json5 "^1.0.1"
+
+loader-utils@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.0.tgz#e4cace5b816d425a166b5f097e10cd12b36064b0"
+ integrity sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==
+ dependencies:
+ big.js "^5.2.2"
+ emojis-list "^3.0.0"
+ json5 "^2.1.2"
+
+locate-path@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
+ integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=
+ dependencies:
+ p-locate "^2.0.0"
+ path-exists "^3.0.0"
+
+locate-path@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e"
+ integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==
+ dependencies:
+ p-locate "^3.0.0"
+ path-exists "^3.0.0"
+
+locate-path@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0"
+ integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==
+ dependencies:
+ p-locate "^4.1.0"
+
+lodash.escape@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-4.0.1.tgz#c9044690c21e04294beaa517712fded1fa88de98"
+ integrity sha1-yQRGkMIeBClL6qUXcS/e0fqI3pg=
+
+lodash.flattendeep@^4.4.0:
+ version "4.4.0"
+ resolved "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2"
+ integrity sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=
+
+lodash.isequal@^4.5.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0"
+ integrity sha1-QVxEePK8wwEgwizhDtMib30+GOA=
+
+lodash.sortby@^4.7.0:
+ version "4.7.0"
+ resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438"
+ integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=
+
+lodash@^4.15.0, lodash@^4.17.10, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19:
+ version "4.17.19"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b"
+ integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==
+
+log-update@^3.3.0:
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/log-update/-/log-update-3.4.0.tgz#3b9a71e00ac5b1185cc193a36d654581c48f97b9"
+ integrity sha512-ILKe88NeMt4gmDvk/eb615U/IVn7K9KWGkoYbdatQ69Z65nj1ZzjM6fHXfcs0Uge+e+EGnMW7DY4T9yko8vWFg==
+ dependencies:
+ ansi-escapes "^3.2.0"
+ cli-cursor "^2.1.0"
+ wrap-ansi "^5.0.0"
+
+longest@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097"
+ integrity sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=
+
+loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
+ integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
+ dependencies:
+ js-tokens "^3.0.0 || ^4.0.0"
+
+lru-cache@^5.1.1:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920"
+ integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==
+ dependencies:
+ yallist "^3.0.2"
+
+lru-cache@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
+ integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
+ dependencies:
+ yallist "^4.0.0"
+
+magic-string@^0.25.3:
+ version "0.25.7"
+ resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051"
+ integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==
+ dependencies:
+ sourcemap-codec "^1.4.4"
+
+make-dir@^2.0.0, make-dir@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5"
+ integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==
+ dependencies:
+ pify "^4.0.1"
+ semver "^5.6.0"
+
+makeerror@1.0.x:
+ version "1.0.11"
+ resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c"
+ integrity sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=
+ dependencies:
+ tmpl "1.0.x"
+
+map-age-cleaner@^0.1.1:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a"
+ integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==
+ dependencies:
+ p-defer "^1.0.0"
+
+map-cache@^0.2.2:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"
+ integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=
+
+map-limit@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/map-limit/-/map-limit-0.0.1.tgz#eb7961031c0f0e8d001bf2d56fab685d58822f38"
+ integrity sha1-63lhAxwPDo0AG/LVb6toXViCLzg=
+ dependencies:
+ once "~1.3.0"
+
+map-visit@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f"
+ integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=
+ dependencies:
+ object-visit "^1.0.0"
+
+mapbox-gl@1.3.2:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/mapbox-gl/-/mapbox-gl-1.3.2.tgz#6e9197485de7c0c71b1fd30e5e8e7e3824bc35dd"
+ integrity sha512-6Ro7GbTMWxcbc836m6rbBNkesgTncbE1yXWeuHlr89esSqaItKr0+ntOu8rZie3fv+GtitkbODysXzIGCA7G+w==
+ dependencies:
+ "@mapbox/geojson-rewind" "^0.4.0"
+ "@mapbox/geojson-types" "^1.0.2"
+ "@mapbox/jsonlint-lines-primitives" "^2.0.2"
+ "@mapbox/mapbox-gl-supported" "^1.4.0"
+ "@mapbox/point-geometry" "^0.1.0"
+ "@mapbox/tiny-sdf" "^1.1.0"
+ "@mapbox/unitbezier" "^0.0.0"
+ "@mapbox/vector-tile" "^1.3.1"
+ "@mapbox/whoots-js" "^3.1.0"
+ csscolorparser "~1.0.2"
+ earcut "^2.1.5"
+ geojson-vt "^3.2.1"
+ gl-matrix "^3.0.0"
+ grid-index "^1.1.0"
+ minimist "0.0.8"
+ murmurhash-js "^1.0.0"
+ pbf "^3.0.5"
+ potpack "^1.0.1"
+ quickselect "^2.0.0"
+ rw "^1.3.3"
+ supercluster "^6.0.1"
+ tinyqueue "^2.0.0"
+ vt-pbf "^3.1.1"
+
+marching-simplex-table@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/marching-simplex-table/-/marching-simplex-table-1.0.0.tgz#bc16256e0f8f9b558aa9b2872f8832d9433f52ea"
+ integrity sha1-vBYlbg+Pm1WKqbKHL4gy2UM/Uuo=
+ dependencies:
+ convex-hull "^1.0.3"
+
+mat4-decompose@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/mat4-decompose/-/mat4-decompose-1.0.4.tgz#65eb4fe39d70878f7a444eb4624d52f7e7eb2faf"
+ integrity sha1-ZetP451wh496RE60Yk1S9+frL68=
+ dependencies:
+ gl-mat4 "^1.0.1"
+ gl-vec3 "^1.0.2"
+
+mat4-interpolate@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/mat4-interpolate/-/mat4-interpolate-1.0.4.tgz#55ffe9eb3c35295e2c0d5a9f7725d9068a89ff74"
+ integrity sha1-Vf/p6zw1KV4sDVqfdyXZBoqJ/3Q=
+ dependencies:
+ gl-mat4 "^1.0.1"
+ gl-vec3 "^1.0.2"
+ mat4-decompose "^1.0.3"
+ mat4-recompose "^1.0.3"
+ quat-slerp "^1.0.0"
+
+mat4-recompose@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/mat4-recompose/-/mat4-recompose-1.0.4.tgz#3953c230ff2473dc772ee014a52c925cf81b0e4d"
+ integrity sha1-OVPCMP8kc9x3LuAUpSySXPgbDk0=
+ dependencies:
+ gl-mat4 "^1.0.1"
+
+math-log2@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/math-log2/-/math-log2-1.0.1.tgz#fb8941be5f5ebe8979e718e6273b178e58694565"
+ integrity sha1-+4lBvl9evol55xjmJzsXjlhpRWU=
+
+matrix-camera-controller@^2.1.1, matrix-camera-controller@^2.1.3:
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/matrix-camera-controller/-/matrix-camera-controller-2.1.3.tgz#35e5260cc1cd550962ba799f2d8d4e94b1a39370"
+ integrity sha1-NeUmDMHNVQliunmfLY1OlLGjk3A=
+ dependencies:
+ binary-search-bounds "^1.0.0"
+ gl-mat4 "^1.1.2"
+ gl-vec3 "^1.0.3"
+ mat4-interpolate "^1.0.3"
+
+md5.js@^1.3.4:
+ version "1.3.5"
+ resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f"
+ integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==
+ dependencies:
+ hash-base "^3.0.0"
+ inherits "^2.0.1"
+ safe-buffer "^5.1.2"
+
+mem@^4.0.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178"
+ integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==
+ dependencies:
+ map-age-cleaner "^0.1.1"
+ mimic-fn "^2.0.0"
+ p-is-promise "^2.0.0"
+
+memory-fs@^0.4.0, memory-fs@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552"
+ integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=
+ dependencies:
+ errno "^0.1.3"
+ readable-stream "^2.0.1"
+
+memory-fs@^0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c"
+ integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==
+ dependencies:
+ errno "^0.1.3"
+ readable-stream "^2.0.1"
+
+memorystream@^0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2"
+ integrity sha1-htcJCzDORV1j+64S3aUaR93K+bI=
+
+merge-stream@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
+ integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
+
+merge2@^1.3.0:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
+ integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
+
+micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4:
+ version "3.1.10"
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23"
+ integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==
+ dependencies:
+ arr-diff "^4.0.0"
+ array-unique "^0.3.2"
+ braces "^2.3.1"
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ extglob "^2.0.4"
+ fragment-cache "^0.2.1"
+ kind-of "^6.0.2"
+ nanomatch "^1.2.9"
+ object.pick "^1.3.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.2"
+
+micromatch@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259"
+ integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==
+ dependencies:
+ braces "^3.0.1"
+ picomatch "^2.0.5"
+
+miller-rabin@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d"
+ integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==
+ dependencies:
+ bn.js "^4.0.0"
+ brorand "^1.0.1"
+
+mime-db@1.43.0:
+ version "1.43.0"
+ resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.43.0.tgz#0a12e0502650e473d735535050e7c8f4eb4fae58"
+ integrity sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ==
+
+mime-types@^2.1.12, mime-types@~2.1.19:
+ version "2.1.26"
+ resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.26.tgz#9c921fc09b7e149a65dfdc0da4d20997200b0a06"
+ integrity sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==
+ dependencies:
+ mime-db "1.43.0"
+
+mime@^1.4.1:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
+ integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
+
+mimic-fn@^1.0.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022"
+ integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==
+
+mimic-fn@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
+ integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
+
+minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"
+ integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==
+
+minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
+ integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=
+
+minimatch@^3.0.2, minimatch@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
+ integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
+ dependencies:
+ brace-expansion "^1.1.7"
+
+minimist@0.0.5:
+ version "0.0.5"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.5.tgz#d7aa327bcecf518f9106ac6b8f003fa3bcea8566"
+ integrity sha1-16oye87PUY+RBqxrjwA/o7zqhWY=
+
+minimist@0.0.8:
+ version "0.0.8"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
+ integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=
+
+minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5, minimist@~1.2.0:
+ version "1.2.5"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
+ integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
+
+minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0:
+ version "2.9.0"
+ resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6"
+ integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==
+ dependencies:
+ safe-buffer "^5.1.2"
+ yallist "^3.0.0"
+
+minizlib@^1.2.1:
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d"
+ integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==
+ dependencies:
+ minipass "^2.9.0"
+
+mississippi@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022"
+ integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==
+ dependencies:
+ concat-stream "^1.5.0"
+ duplexify "^3.4.2"
+ end-of-stream "^1.1.0"
+ flush-write-stream "^1.0.0"
+ from2 "^2.1.0"
+ parallel-transform "^1.1.0"
+ pump "^3.0.0"
+ pumpify "^1.3.3"
+ stream-each "^1.1.0"
+ through2 "^2.0.0"
+
+mixin-deep@^1.2.0:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566"
+ integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==
+ dependencies:
+ for-in "^1.0.2"
+ is-extendable "^1.0.1"
+
+mkdirp@^0.5.0:
+ version "0.5.3"
+ resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.3.tgz#5a514b7179259287952881e94410ec5465659f8c"
+ integrity sha512-P+2gwrFqx8lhew375MQHHeTlY8AuOJSrGf0R5ddkEndUkmwpgUob/vQuBD1V22/Cw1/lJr4x+EjllSezBThzBg==
+ dependencies:
+ minimist "^1.2.5"
+
+mkdirp@^0.5.1, mkdirp@^0.5.3:
+ version "0.5.5"
+ resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def"
+ integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==
+ dependencies:
+ minimist "^1.2.5"
+
+moment@^2.19.3:
+ version "2.24.0"
+ resolved "https://registry.yarnpkg.com/moment/-/moment-2.24.0.tgz#0d055d53f5052aa653c9f6eb68bb5d12bf5c2b5b"
+ integrity sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==
+
+monotone-convex-hull-2d@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/monotone-convex-hull-2d/-/monotone-convex-hull-2d-1.0.1.tgz#47f5daeadf3c4afd37764baa1aa8787a40eee08c"
+ integrity sha1-R/Xa6t88Sv03dkuqGqh4ekDu4Iw=
+ dependencies:
+ robust-orientation "^1.1.3"
+
+moo@^0.5.0:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/moo/-/moo-0.5.1.tgz#7aae7f384b9b09f620b6abf6f74ebbcd1b65dbc4"
+ integrity sha512-I1mnb5xn4fO80BH9BLcF0yLypy2UKl+Cb01Fu0hJRkJjlCRtxZMWkTdAtDd5ZqCOxtCkhmRwyI57vWT+1iZ67w==
+
+mouse-change@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/mouse-change/-/mouse-change-1.4.0.tgz#c2b77e5bfa34a43ce1445c8157a4e4dc9895c14f"
+ integrity sha1-wrd+W/o0pDzhRFyBV6Tk3JiVwU8=
+ dependencies:
+ mouse-event "^1.0.0"
+
+mouse-event-offset@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/mouse-event-offset/-/mouse-event-offset-3.0.2.tgz#dfd86a6e248c6ba8cad53b905d5037a2063e9984"
+ integrity sha1-39hqbiSMa6jK1TuQXVA3ogY+mYQ=
+
+mouse-event@^1.0.0:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/mouse-event/-/mouse-event-1.0.5.tgz#b3789edb7109997d5a932d1d01daa1543a501732"
+ integrity sha1-s3ie23EJmX1aky0dAdqhVDpQFzI=
+
+mouse-wheel@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/mouse-wheel/-/mouse-wheel-1.2.0.tgz#6d2903b1ea8fb48e61f1b53b9036773f042cdb5c"
+ integrity sha1-bSkDseqPtI5h8bU7kDZ3PwQs21w=
+ dependencies:
+ right-now "^1.0.0"
+ signum "^1.0.0"
+ to-px "^1.0.1"
+
+move-concurrently@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92"
+ integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=
+ dependencies:
+ aproba "^1.1.1"
+ copy-concurrently "^1.0.0"
+ fs-write-stream-atomic "^1.0.8"
+ mkdirp "^0.5.1"
+ rimraf "^2.5.4"
+ run-queue "^1.0.3"
+
+ms@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
+ integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
+
+ms@2.1.2, ms@^2.1.1:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
+ integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
+
+multimatch@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-4.0.0.tgz#8c3c0f6e3e8449ada0af3dd29efb491a375191b3"
+ integrity sha512-lDmx79y1z6i7RNx0ZGCPq1bzJ6ZoDDKbvh7jxr9SJcWLkShMzXrHbYVpTdnhNM5MXpDUxCQ4DgqVttVXlBgiBQ==
+ dependencies:
+ "@types/minimatch" "^3.0.3"
+ array-differ "^3.0.0"
+ array-union "^2.1.0"
+ arrify "^2.0.1"
+ minimatch "^3.0.4"
+
+mumath@^3.3.4:
+ version "3.3.4"
+ resolved "https://registry.yarnpkg.com/mumath/-/mumath-3.3.4.tgz#48d4a0f0fd8cad4e7b32096ee89b161a63d30bbf"
+ integrity sha1-SNSg8P2MrU57Mglu6JsWGmPTC78=
+ dependencies:
+ almost-equal "^1.1.0"
+
+murmurhash-js@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/murmurhash-js/-/murmurhash-js-1.0.0.tgz#b06278e21fc6c37fa5313732b0412bcb6ae15f51"
+ integrity sha1-sGJ44h/Gw3+lMTcysEEry2rhX1E=
+
+nan@^2.12.1:
+ version "2.14.0"
+ resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c"
+ integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==
+
+nanomatch@^1.2.9:
+ version "1.2.13"
+ resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119"
+ integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==
+ dependencies:
+ arr-diff "^4.0.0"
+ array-unique "^0.3.2"
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ fragment-cache "^0.2.1"
+ is-windows "^1.0.2"
+ kind-of "^6.0.2"
+ object.pick "^1.3.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
+natural-compare@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
+ integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
+
+ndarray-extract-contour@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/ndarray-extract-contour/-/ndarray-extract-contour-1.0.1.tgz#0aee113a3a33b226b90c4888cf877bf4751305e4"
+ integrity sha1-Cu4ROjozsia5DEiIz4d79HUTBeQ=
+ dependencies:
+ typedarray-pool "^1.0.0"
+
+ndarray-fill@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/ndarray-fill/-/ndarray-fill-1.0.2.tgz#a30a60f7188e0c9582fcdd58896acdcb522a1ed6"
+ integrity sha1-owpg9xiODJWC/N1YiWrNy1IqHtY=
+ dependencies:
+ cwise "^1.0.10"
+
+ndarray-gradient@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/ndarray-gradient/-/ndarray-gradient-1.0.0.tgz#b7491a515c6a649f19a62324fff6f27fc8c25393"
+ integrity sha1-t0kaUVxqZJ8ZpiMk//byf8jCU5M=
+ dependencies:
+ cwise-compiler "^1.0.0"
+ dup "^1.0.0"
+
+ndarray-homography@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/ndarray-homography/-/ndarray-homography-1.0.0.tgz#c35516ea86bc2862b4e804a236a2707309fe296b"
+ integrity sha1-w1UW6oa8KGK06ASiNqJwcwn+KWs=
+ dependencies:
+ gl-matrix-invert "^1.0.0"
+ ndarray-warp "^1.0.0"
+
+ndarray-linear-interpolate@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/ndarray-linear-interpolate/-/ndarray-linear-interpolate-1.0.0.tgz#78bc92b85b9abc15b6e67ee65828f9e2137ae72b"
+ integrity sha1-eLySuFuavBW25n7mWCj54hN65ys=
+
+ndarray-ops@^1.1.0, ndarray-ops@^1.2.1, ndarray-ops@^1.2.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/ndarray-ops/-/ndarray-ops-1.2.2.tgz#59e88d2c32a7eebcb1bc690fae141579557a614e"
+ integrity sha1-WeiNLDKn7ryxvGkPrhQVeVV6YU4=
+ dependencies:
+ cwise-compiler "^1.0.0"
+
+ndarray-pack@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/ndarray-pack/-/ndarray-pack-1.2.1.tgz#8caebeaaa24d5ecf70ff86020637977da8ee585a"
+ integrity sha1-jK6+qqJNXs9w/4YCBjeXfajuWFo=
+ dependencies:
+ cwise-compiler "^1.1.2"
+ ndarray "^1.0.13"
+
+ndarray-scratch@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/ndarray-scratch/-/ndarray-scratch-1.2.0.tgz#6304636d62eba93db4727ac13c693341dba50e01"
+ integrity sha1-YwRjbWLrqT20cnrBPGkzQdulDgE=
+ dependencies:
+ ndarray "^1.0.14"
+ ndarray-ops "^1.2.1"
+ typedarray-pool "^1.0.2"
+
+ndarray-sort@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/ndarray-sort/-/ndarray-sort-1.0.1.tgz#fea05b4cb834c7f4e0216a354f3ca751300dfd6a"
+ integrity sha1-/qBbTLg0x/TgIWo1TzynUTAN/Wo=
+ dependencies:
+ typedarray-pool "^1.0.0"
+
+ndarray-warp@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/ndarray-warp/-/ndarray-warp-1.0.1.tgz#a8a125aaabba0bebf93bd6ca83e6abd6822a34e0"
+ integrity sha1-qKElqqu6C+v5O9bKg+ar1oIqNOA=
+ dependencies:
+ cwise "^1.0.4"
+ ndarray-linear-interpolate "^1.0.0"
+
+ndarray@^1.0.11, ndarray@^1.0.13, ndarray@^1.0.14, ndarray@^1.0.15, ndarray@^1.0.18:
+ version "1.0.19"
+ resolved "https://registry.yarnpkg.com/ndarray/-/ndarray-1.0.19.tgz#6785b5f5dfa58b83e31ae5b2a058cfd1ab3f694e"
+ integrity sha512-B4JHA4vdyZU30ELBw3g7/p9bZupyew5a7tX1Y/gGeF2hafrPaQZhgrGQfsvgfYbgdFZjYwuEcnaobeM/WMW+HQ==
+ dependencies:
+ iota-array "^1.0.0"
+ is-buffer "^1.0.2"
+
+nearley@^2.7.10:
+ version "2.19.2"
+ resolved "https://registry.yarnpkg.com/nearley/-/nearley-2.19.2.tgz#40cafbf235121ae94b1aa1e585890d24fade182d"
+ integrity sha512-h6lygT0BWAGErDvoE2LfI+tDeY2+UUrqG5dcBPdCmjnjud9z1wE0P7ljb85iNbE93YA+xJLpoSYGMuUqhnSSSA==
+ dependencies:
+ commander "^2.19.0"
+ moo "^0.5.0"
+ railroad-diagrams "^1.0.0"
+ randexp "0.4.6"
+ semver "^5.4.1"
+
+needle@^2.2.1:
+ version "2.3.3"
+ resolved "https://registry.yarnpkg.com/needle/-/needle-2.3.3.tgz#a041ad1d04a871b0ebb666f40baaf1fb47867117"
+ integrity sha512-EkY0GeSq87rWp1hoq/sH/wnTWgFVhYlnIkbJ0YJFfRgEFlz2RraCjBpFQ+vrEgEdp0ThfyHADmkChEhcb7PKyw==
+ dependencies:
+ debug "^3.2.6"
+ iconv-lite "^0.4.4"
+ sax "^1.2.4"
+
+neo-async@^2.5.0, neo-async@^2.6.1:
+ version "2.6.1"
+ resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c"
+ integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==
+
+next-tick@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c"
+ integrity sha1-yobR/ogoFpsBICCOPchCS524NCw=
+
+nextafter@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/nextafter/-/nextafter-1.0.0.tgz#b7d77b535310e3e097e6025abb0a903477ec1a3a"
+ integrity sha1-t9d7U1MQ4+CX5gJauwqQNHfsGjo=
+ dependencies:
+ double-bits "^1.1.0"
+
+nice-try@^1.0.4:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
+ integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==
+
+node-dir@^0.1.17:
+ version "0.1.17"
+ resolved "https://registry.yarnpkg.com/node-dir/-/node-dir-0.1.17.tgz#5f5665d93351335caabef8f1c554516cf5f1e4e5"
+ integrity sha1-X1Zl2TNRM1yqvvjxxVRRbPXx5OU=
+ dependencies:
+ minimatch "^3.0.2"
+
+node-int64@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b"
+ integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=
+
+node-libs-browser@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425"
+ integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==
+ dependencies:
+ assert "^1.1.1"
+ browserify-zlib "^0.2.0"
+ buffer "^4.3.0"
+ console-browserify "^1.1.0"
+ constants-browserify "^1.0.0"
+ crypto-browserify "^3.11.0"
+ domain-browser "^1.1.1"
+ events "^3.0.0"
+ https-browserify "^1.0.0"
+ os-browserify "^0.3.0"
+ path-browserify "0.0.1"
+ process "^0.11.10"
+ punycode "^1.2.4"
+ querystring-es3 "^0.2.0"
+ readable-stream "^2.3.3"
+ stream-browserify "^2.0.1"
+ stream-http "^2.7.2"
+ string_decoder "^1.0.0"
+ timers-browserify "^2.0.4"
+ tty-browserify "0.0.0"
+ url "^0.11.0"
+ util "^0.11.0"
+ vm-browserify "^1.0.1"
+
+node-modules-regexp@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40"
+ integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=
+
+node-notifier@^5.4.2:
+ version "5.4.3"
+ resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.4.3.tgz#cb72daf94c93904098e28b9c590fd866e464bd50"
+ integrity sha512-M4UBGcs4jeOK9CjTsYwkvH6/MzuUmGCyTW+kCY7uO+1ZVr0+FHGdPdIf5CCLqAaxnRrWidyoQlNkMIIVwbKB8Q==
+ dependencies:
+ growly "^1.3.0"
+ is-wsl "^1.1.0"
+ semver "^5.5.0"
+ shellwords "^0.1.1"
+ which "^1.3.0"
+
+node-pre-gyp@*:
+ version "0.14.0"
+ resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.14.0.tgz#9a0596533b877289bcad4e143982ca3d904ddc83"
+ integrity sha512-+CvDC7ZttU/sSt9rFjix/P05iS43qHCOOGzcr3Ry99bXG7VX953+vFyEuph/tfqoYu8dttBkE86JSKBO2OzcxA==
+ dependencies:
+ detect-libc "^1.0.2"
+ mkdirp "^0.5.1"
+ needle "^2.2.1"
+ nopt "^4.0.1"
+ npm-packlist "^1.1.6"
+ npmlog "^4.0.2"
+ rc "^1.2.7"
+ rimraf "^2.6.1"
+ semver "^5.3.0"
+ tar "^4.4.2"
+
+node-releases@^1.1.53:
+ version "1.1.53"
+ resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.53.tgz#2d821bfa499ed7c5dffc5e2f28c88e78a08ee3f4"
+ integrity sha512-wp8zyQVwef2hpZ/dJH7SfSrIPD6YoJz6BDQDpGEkcA0s3LpAQoxBIYmfIq6QAhC1DhwsyCgTaTTcONwX8qzCuQ==
+
+nopt@^4.0.1:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48"
+ integrity sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==
+ dependencies:
+ abbrev "1"
+ osenv "^0.1.4"
+
+normalize-package-data@^2.3.2:
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8"
+ integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==
+ dependencies:
+ hosted-git-info "^2.1.4"
+ resolve "^1.10.0"
+ semver "2 || 3 || 4 || 5"
+ validate-npm-package-license "^3.0.1"
+
+normalize-path@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"
+ integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=
+ dependencies:
+ remove-trailing-separator "^1.0.1"
+
+normalize-path@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
+ integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
+
+normalize-range@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942"
+ integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=
+
+normalize-svg-path@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/normalize-svg-path/-/normalize-svg-path-1.0.1.tgz#6f729ad6b70bb4ca4eff2fe4b107489efe1d56fe"
+ integrity sha1-b3Ka1rcLtMpO/y/ksQdInv4dVv4=
+ dependencies:
+ svg-arc-to-cubic-bezier "^3.0.0"
+
+normalize-svg-path@~0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/normalize-svg-path/-/normalize-svg-path-0.1.0.tgz#456360e60ece75fbef7b5d7e160480e7ffd16fe5"
+ integrity sha1-RWNg5g7Odfvve11+FgSA5//Rb+U=
+
+normals@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/normals/-/normals-1.1.0.tgz#325b595ed34afe467a6c55a14fd9085787ff59c0"
+ integrity sha1-MltZXtNK/kZ6bFWhT9kIV4f/WcA=
+
+npm-bundled@^1.0.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.1.tgz#1edd570865a94cdb1bc8220775e29466c9fb234b"
+ integrity sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==
+ dependencies:
+ npm-normalize-package-bin "^1.0.1"
+
+npm-normalize-package-bin@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2"
+ integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==
+
+npm-packlist@^1.1.6:
+ version "1.4.8"
+ resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e"
+ integrity sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==
+ dependencies:
+ ignore-walk "^3.0.1"
+ npm-bundled "^1.0.1"
+ npm-normalize-package-bin "^1.0.1"
+
+npm-run-all@^4.1.5:
+ version "4.1.5"
+ resolved "https://registry.yarnpkg.com/npm-run-all/-/npm-run-all-4.1.5.tgz#04476202a15ee0e2e214080861bff12a51d98fba"
+ integrity sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==
+ dependencies:
+ ansi-styles "^3.2.1"
+ chalk "^2.4.1"
+ cross-spawn "^6.0.5"
+ memorystream "^0.3.1"
+ minimatch "^3.0.4"
+ pidtree "^0.3.0"
+ read-pkg "^3.0.0"
+ shell-quote "^1.6.1"
+ string.prototype.padend "^3.0.0"
+
+npm-run-path@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
+ integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=
+ dependencies:
+ path-key "^2.0.0"
+
+npmlog@^4.0.2:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
+ integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==
+ dependencies:
+ are-we-there-yet "~1.1.2"
+ console-control-strings "~1.1.0"
+ gauge "~2.7.3"
+ set-blocking "~2.0.0"
+
+nth-check@~1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c"
+ integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==
+ dependencies:
+ boolbase "~1.0.0"
+
+num2fraction@^1.2.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede"
+ integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=
+
+number-is-integer@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/number-is-integer/-/number-is-integer-1.0.1.tgz#e59bca172ffed27318e79c7ceb6cb72c095b2152"
+ integrity sha1-5ZvKFy/+0nMY55x862y3LAlbIVI=
+ dependencies:
+ is-finite "^1.0.1"
+
+number-is-nan@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
+ integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=
+
+numeral@^2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/numeral/-/numeral-2.0.6.tgz#4ad080936d443c2561aed9f2197efffe25f4e506"
+ integrity sha1-StCAk21EPCVhrtnyGX7//iX05QY=
+
+numeric@^1.2.6:
+ version "1.2.6"
+ resolved "https://registry.yarnpkg.com/numeric/-/numeric-1.2.6.tgz#765b02bef97988fcf880d4eb3f36b80fa31335aa"
+ integrity sha1-dlsCvvl5iPz4gNTrPza4D6MTNao=
+
+nwsapi@^2.0.7:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7"
+ integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==
+
+oauth-sign@~0.9.0:
+ version "0.9.0"
+ resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455"
+ integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==
+
+object-assign@^4.1.0, object-assign@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
+ integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
+
+object-copy@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c"
+ integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw=
+ dependencies:
+ copy-descriptor "^0.1.0"
+ define-property "^0.2.5"
+ kind-of "^3.0.3"
+
+object-inspect@^1.7.0, object-inspect@~1.7.0:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67"
+ integrity sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==
+
+object-inspect@~0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-0.4.0.tgz#f5157c116c1455b243b06ee97703392c5ad89fec"
+ integrity sha1-9RV8EWwUVbJDsG7pdwM5LFrYn+w=
+
+object-is@^1.0.1, object-is@^1.0.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.2.tgz#c5d2e87ff9e119f78b7a088441519e2eec1573b6"
+ integrity sha512-5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ==
+ dependencies:
+ define-properties "^1.1.3"
+ es-abstract "^1.17.5"
+
+object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.0.6, object-keys@^1.0.9, object-keys@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
+ integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
+
+object-keys@~0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336"
+ integrity sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=
+
+object-visit@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb"
+ integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=
+ dependencies:
+ isobject "^3.0.0"
+
+object.assign@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da"
+ integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==
+ dependencies:
+ define-properties "^1.1.2"
+ function-bind "^1.1.1"
+ has-symbols "^1.0.0"
+ object-keys "^1.0.11"
+
+object.entries@^1.1.0, object.entries@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.1.tgz#ee1cf04153de02bb093fec33683900f57ce5399b"
+ integrity sha512-ilqR7BgdyZetJutmDPfXCDffGa0/Yzl2ivVNpbx/g4UeWrCdRnFDUBrKJGLhGieRHDATnyZXWBeCb29k9CJysQ==
+ dependencies:
+ define-properties "^1.1.3"
+ es-abstract "^1.17.0-next.1"
+ function-bind "^1.1.1"
+ has "^1.0.3"
+
+object.fromentries@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.2.tgz#4a09c9b9bb3843dd0f89acdb517a794d4f355ac9"
+ integrity sha512-r3ZiBH7MQppDJVLx6fhD618GKNG40CZYH9wgwdhKxBDDbQgjeWGGd4AtkZad84d291YxvWe7bJGuE65Anh0dxQ==
+ dependencies:
+ define-properties "^1.1.3"
+ es-abstract "^1.17.0-next.1"
+ function-bind "^1.1.1"
+ has "^1.0.3"
+
+object.getownpropertydescriptors@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz#369bf1f9592d8ab89d712dced5cb81c7c5352649"
+ integrity sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==
+ dependencies:
+ define-properties "^1.1.3"
+ es-abstract "^1.17.0-next.1"
+
+object.pick@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747"
+ integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=
+ dependencies:
+ isobject "^3.0.1"
+
+object.values@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.1.tgz#68a99ecde356b7e9295a3c5e0ce31dc8c953de5e"
+ integrity sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==
+ dependencies:
+ define-properties "^1.1.3"
+ es-abstract "^1.17.0-next.1"
+ function-bind "^1.1.1"
+ has "^1.0.3"
+
+once@^1.3.0, once@^1.3.1, once@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
+ integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
+ dependencies:
+ wrappy "1"
+
+once@~1.3.0:
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20"
+ integrity sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=
+ dependencies:
+ wrappy "1"
+
+onetime@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4"
+ integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=
+ dependencies:
+ mimic-fn "^1.0.0"
+
+optionator@^0.8.1:
+ version "0.8.3"
+ resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495"
+ integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==
+ dependencies:
+ deep-is "~0.1.3"
+ fast-levenshtein "~2.0.6"
+ levn "~0.3.0"
+ prelude-ls "~1.1.2"
+ type-check "~0.3.2"
+ word-wrap "~1.2.3"
+
+optionator@^0.9.1:
+ version "0.9.1"
+ resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499"
+ integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==
+ dependencies:
+ deep-is "^0.1.3"
+ fast-levenshtein "^2.0.6"
+ levn "^0.4.1"
+ prelude-ls "^1.2.1"
+ type-check "^0.4.0"
+ word-wrap "^1.2.3"
+
+orbit-camera-controller@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/orbit-camera-controller/-/orbit-camera-controller-4.0.0.tgz#6e2b36f0e7878663c330f50da9b7ce686c277005"
+ integrity sha1-bis28OeHhmPDMPUNqbfOaGwncAU=
+ dependencies:
+ filtered-vector "^1.2.1"
+ gl-mat4 "^1.0.3"
+
+os-browserify@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27"
+ integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=
+
+os-homedir@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
+ integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M=
+
+os-homedir@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-2.0.0.tgz#a0c76bb001a8392a503cbd46e7e650b3423a923c"
+ integrity sha512-saRNz0DSC5C/I++gFIaJTXoFJMRwiP5zHar5vV3xQ2TkgEw6hDCcU5F272JjUylpiVgBrZNQHnfjkLabTfb92Q==
+
+os-locale@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a"
+ integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==
+ dependencies:
+ execa "^1.0.0"
+ lcid "^2.0.0"
+ mem "^4.0.0"
+
+os-tmpdir@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
+ integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
+
+osenv@^0.1.4:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410"
+ integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==
+ dependencies:
+ os-homedir "^1.0.0"
+ os-tmpdir "^1.0.0"
+
+p-defer@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c"
+ integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=
+
+p-each-series@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-1.0.0.tgz#930f3d12dd1f50e7434457a22cd6f04ac6ad7f71"
+ integrity sha1-kw89Et0fUOdDRFeiLNbwSsatf3E=
+ dependencies:
+ p-reduce "^1.0.0"
+
+p-finally@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
+ integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=
+
+p-is-promise@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e"
+ integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==
+
+p-limit@^1.1.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8"
+ integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==
+ dependencies:
+ p-try "^1.0.0"
+
+p-limit@^2.0.0, p-limit@^2.2.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
+ integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==
+ dependencies:
+ p-try "^2.0.0"
+
+p-locate@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"
+ integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=
+ dependencies:
+ p-limit "^1.1.0"
+
+p-locate@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4"
+ integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==
+ dependencies:
+ p-limit "^2.0.0"
+
+p-locate@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07"
+ integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==
+ dependencies:
+ p-limit "^2.2.0"
+
+p-reduce@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa"
+ integrity sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=
+
+p-try@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"
+ integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=
+
+p-try@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
+ integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
+
+pad-left@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/pad-left/-/pad-left-1.0.2.tgz#19e5735ea98395a26cedc6ab926ead10f3100d4c"
+ integrity sha1-GeVzXqmDlaJs7carkm6tEPMQDUw=
+ dependencies:
+ repeat-string "^1.3.0"
+
+pako@~1.0.5:
+ version "1.0.11"
+ resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf"
+ integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==
+
+parallel-transform@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc"
+ integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==
+ dependencies:
+ cyclist "^1.0.1"
+ inherits "^2.0.3"
+ readable-stream "^2.1.5"
+
+parent-module@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
+ integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==
+ dependencies:
+ callsites "^3.0.0"
+
+parenthesis@^3.1.5:
+ version "3.1.7"
+ resolved "https://registry.yarnpkg.com/parenthesis/-/parenthesis-3.1.7.tgz#01c89b603a2a6a262ec47554e74ed154a9be2aa6"
+ integrity sha512-iMtu+HCbLXVrpf6Ys/4YKhcFxbux3xK4ZVB9r+a2kMSqeeQWQoDNYlXIsOjwlT2ldYXZ3k5PVeBnYn7fbAo/Bg==
+
+parse-asn1@^5.0.0:
+ version "5.1.5"
+ resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.5.tgz#003271343da58dc94cace494faef3d2147ecea0e"
+ integrity sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==
+ dependencies:
+ asn1.js "^4.0.0"
+ browserify-aes "^1.0.0"
+ create-hash "^1.1.0"
+ evp_bytestokey "^1.0.0"
+ pbkdf2 "^3.0.3"
+ safe-buffer "^5.1.1"
+
+parse-json@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0"
+ integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=
+ dependencies:
+ error-ex "^1.3.1"
+ json-parse-better-errors "^1.0.1"
+
+parse-passwd@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6"
+ integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=
+
+parse-rect@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/parse-rect/-/parse-rect-1.2.0.tgz#e0a5b0dbaaaee637a0a1eb9779969e19399d8dec"
+ integrity sha512-4QZ6KYbnE6RTwg9E0HpLchUM9EZt6DnDxajFZZDSV4p/12ZJEvPO702DZpGvRYEPo00yKDys7jASi+/w7aO8LA==
+ dependencies:
+ pick-by-alias "^1.2.0"
+
+parse-svg-path@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/parse-svg-path/-/parse-svg-path-0.1.2.tgz#7a7ec0d1eb06fa5325c7d3e009b859a09b5d49eb"
+ integrity sha1-en7A0esG+lMlx9PgCbhZoJtdSes=
+
+parse-unit@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/parse-unit/-/parse-unit-1.0.1.tgz#7e1bb6d5bef3874c28e392526a2541170291eecf"
+ integrity sha1-fhu21b7zh0wo45JSaiVBFwKR7s8=
+
+parse5@4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608"
+ integrity sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==
+
+parse5@^3.0.1:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/parse5/-/parse5-3.0.3.tgz#042f792ffdd36851551cf4e9e066b3874ab45b5c"
+ integrity sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==
+ dependencies:
+ "@types/node" "*"
+
+pascalcase@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14"
+ integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=
+
+path-browserify@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a"
+ integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==
+
+path-dirname@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0"
+ integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=
+
+path-exists@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
+ integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=
+
+path-exists@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
+ integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
+
+path-is-absolute@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
+ integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
+
+path-key@^2.0.0, path-key@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
+ integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=
+
+path-key@^3.1.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
+ integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
+
+path-parse@^1.0.6:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"
+ integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==
+
+path-type@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f"
+ integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==
+ dependencies:
+ pify "^3.0.0"
+
+pbf@^3.0.5:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/pbf/-/pbf-3.2.1.tgz#b4c1b9e72af966cd82c6531691115cc0409ffe2a"
+ integrity sha512-ClrV7pNOn7rtmoQVF4TS1vyU0WhYRnP92fzbfF75jAIwpnzdJXf8iTd4CMEqO4yUenH6NDqLiwjqlh6QgZzgLQ==
+ dependencies:
+ ieee754 "^1.1.12"
+ resolve-protobuf-schema "^2.1.0"
+
+pbkdf2@^3.0.3:
+ version "3.0.17"
+ resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6"
+ integrity sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==
+ dependencies:
+ create-hash "^1.1.2"
+ create-hmac "^1.1.4"
+ ripemd160 "^2.0.1"
+ safe-buffer "^5.0.1"
+ sha.js "^2.4.8"
+
+performance-now@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
+ integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=
+
+permutation-parity@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/permutation-parity/-/permutation-parity-1.0.0.tgz#0174d51fca704b11b9a4b152b23d537fdc6b5ef4"
+ integrity sha1-AXTVH8pwSxG5pLFSsj1Tf9xrXvQ=
+ dependencies:
+ typedarray-pool "^1.0.0"
+
+permutation-rank@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/permutation-rank/-/permutation-rank-1.0.0.tgz#9fd98bbcecf08fbf5994b5eadc94a62e679483b5"
+ integrity sha1-n9mLvOzwj79ZlLXq3JSmLmeUg7U=
+ dependencies:
+ invert-permutation "^1.0.0"
+ typedarray-pool "^1.0.0"
+
+pick-by-alias@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/pick-by-alias/-/pick-by-alias-1.2.0.tgz#5f7cb2b1f21a6e1e884a0c87855aa4a37361107b"
+ integrity sha1-X3yysfIabh6ISgyHhVqko3NhEHs=
+
+picomatch@^2.0.5, picomatch@^2.2.1:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad"
+ integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==
+
+pidtree@^0.3.0:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.3.1.tgz#ef09ac2cc0533df1f3250ccf2c4d366b0d12114a"
+ integrity sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==
+
+pify@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
+ integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=
+
+pify@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231"
+ integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==
+
+pirates@^4.0.0, pirates@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87"
+ integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==
+ dependencies:
+ node-modules-regexp "^1.0.0"
+
+pkg-dir@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3"
+ integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==
+ dependencies:
+ find-up "^3.0.0"
+
+pkg-up@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-2.0.0.tgz#c819ac728059a461cab1c3889a2be3c49a004d7f"
+ integrity sha1-yBmscoBZpGHKscOImivjxJoATX8=
+ dependencies:
+ find-up "^2.1.0"
+
+pkg-up@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5"
+ integrity sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==
+ dependencies:
+ find-up "^3.0.0"
+
+planar-dual@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/planar-dual/-/planar-dual-1.0.2.tgz#b6a4235523b1b0cb79e5f926f8ea335dd982d563"
+ integrity sha1-tqQjVSOxsMt55fkm+OozXdmC1WM=
+ dependencies:
+ compare-angle "^1.0.0"
+ dup "^1.0.0"
+
+planar-graph-to-polyline@^1.0.0:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/planar-graph-to-polyline/-/planar-graph-to-polyline-1.0.5.tgz#882b8605199ba88bfd464c9553303556c52b988a"
+ integrity sha1-iCuGBRmbqIv9RkyVUzA1VsUrmIo=
+ dependencies:
+ edges-to-adjacency-list "^1.0.0"
+ planar-dual "^1.0.0"
+ point-in-big-polygon "^2.0.0"
+ robust-orientation "^1.0.1"
+ robust-sum "^1.0.0"
+ two-product "^1.0.0"
+ uniq "^1.0.0"
+
+plotly.js@1.52.3:
+ version "1.52.3"
+ resolved "https://registry.yarnpkg.com/plotly.js/-/plotly.js-1.52.3.tgz#2ae534811447d053765d9c2a8829878dc1f3c489"
+ integrity sha512-7szNqbVuhqn4ZgaTpJ9h4+9PzjoXJnSdzjnY5QwHddp/j0xu5kpHCGvkg+WmeF3brK3y8qwEHF/MIFBBa7i0ng==
+ dependencies:
+ "@plotly/d3-sankey" "0.7.2"
+ "@plotly/d3-sankey-circular" "0.33.1"
+ "@turf/area" "^6.0.1"
+ "@turf/bbox" "^6.0.1"
+ "@turf/centroid" "^6.0.2"
+ alpha-shape "^1.0.0"
+ canvas-fit "^1.5.0"
+ color-normalize "^1.5.0"
+ color-rgba "^2.1.1"
+ convex-hull "^1.0.3"
+ country-regex "^1.1.0"
+ d3 "^3.5.12"
+ d3-force "^1.0.6"
+ d3-hierarchy "^1.1.9"
+ d3-interpolate "^1.4.0"
+ delaunay-triangulate "^1.1.6"
+ es6-promise "^3.0.2"
+ fast-isnumeric "^1.1.3"
+ gl-cone3d "^1.5.1"
+ gl-contour2d "^1.1.6"
+ gl-error3d "^1.0.15"
+ gl-heatmap2d "^1.0.5"
+ gl-line3d "1.2.0"
+ gl-mat4 "^1.2.0"
+ gl-mesh3d "^2.3.0"
+ gl-plot2d "^1.4.3"
+ gl-plot3d "^2.4.4"
+ gl-pointcloud2d "^1.0.2"
+ gl-scatter3d "^1.2.2"
+ gl-select-box "^1.0.3"
+ gl-spikes2d "^1.0.2"
+ gl-streamtube3d "^1.4.0"
+ gl-surface3d "^1.4.6"
+ gl-text "^1.1.8"
+ glslify "^7.0.0"
+ has-hover "^1.0.1"
+ has-passive-events "^1.0.0"
+ is-mobile "^2.2.0"
+ mapbox-gl "1.3.2"
+ matrix-camera-controller "^2.1.3"
+ mouse-change "^1.4.0"
+ mouse-event-offset "^3.0.2"
+ mouse-wheel "^1.2.0"
+ ndarray "^1.0.18"
+ ndarray-fill "^1.0.2"
+ ndarray-homography "^1.0.0"
+ point-cluster "^3.1.8"
+ polybooljs "^1.2.0"
+ regl "^1.3.11"
+ regl-error2d "^2.0.8"
+ regl-line2d "^3.0.15"
+ regl-scatter2d "^3.1.7"
+ regl-splom "^1.0.8"
+ right-now "^1.0.0"
+ robust-orientation "^1.1.3"
+ sane-topojson "^4.0.0"
+ strongly-connected-components "^1.0.1"
+ superscript-text "^1.0.0"
+ svg-path-sdf "^1.1.3"
+ tinycolor2 "^1.4.1"
+ topojson-client "^2.1.0"
+ webgl-context "^2.2.0"
+ world-calendars "^1.0.3"
+
+pn@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb"
+ integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==
+
+point-cluster@^3.1.8:
+ version "3.1.8"
+ resolved "https://registry.yarnpkg.com/point-cluster/-/point-cluster-3.1.8.tgz#a63625fd8964f2a5b446025a1acf8bcac42500c0"
+ integrity sha512-7klIr45dpMeZuqjIK9+qBg3m2IhyZJNJkdqjJFw0Olq75FM8ojrTMjClVUrMjNYRVqtwztxCHH71Fyjhg+YwyQ==
+ dependencies:
+ array-bounds "^1.0.1"
+ array-normalize "^1.1.4"
+ binary-search-bounds "^2.0.4"
+ bubleify "^1.1.0"
+ clamp "^1.0.1"
+ defined "^1.0.0"
+ dtype "^2.0.0"
+ flatten-vertex-data "^1.0.2"
+ is-obj "^1.0.1"
+ math-log2 "^1.0.1"
+ parse-rect "^1.2.0"
+ pick-by-alias "^1.2.0"
+
+point-in-big-polygon@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/point-in-big-polygon/-/point-in-big-polygon-2.0.0.tgz#39b613ea6cf17d6b43e188f77f34c44c6b33ba55"
+ integrity sha1-ObYT6mzxfWtD4Yj3fzTETGszulU=
+ dependencies:
+ binary-search-bounds "^1.0.0"
+ interval-tree-1d "^1.0.1"
+ robust-orientation "^1.1.3"
+ slab-decomposition "^1.0.1"
+
+polybooljs@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/polybooljs/-/polybooljs-1.2.0.tgz#b4390c2e079d4c262d3b2504c6288d95ba7a4758"
+ integrity sha1-tDkMLgedTCYtOyUExiiNlbp6R1g=
+
+polytope-closest-point@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/polytope-closest-point/-/polytope-closest-point-1.0.0.tgz#e6e57f4081ab5e8c778b811ef06e2c48ae338c3f"
+ integrity sha1-5uV/QIGrXox3i4Ee8G4sSK4zjD8=
+ dependencies:
+ numeric "^1.2.6"
+
+posix-character-classes@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
+ integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=
+
+postcss-modules-extract-imports@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz#818719a1ae1da325f9832446b01136eeb493cd7e"
+ integrity sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==
+ dependencies:
+ postcss "^7.0.5"
+
+postcss-modules-local-by-default@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.2.tgz#e8a6561be914aaf3c052876377524ca90dbb7915"
+ integrity sha512-jM/V8eqM4oJ/22j0gx4jrp63GSvDH6v86OqyTHHUvk4/k1vceipZsaymiZ5PvocqZOl5SFHiFJqjs3la0wnfIQ==
+ dependencies:
+ icss-utils "^4.1.1"
+ postcss "^7.0.16"
+ postcss-selector-parser "^6.0.2"
+ postcss-value-parser "^4.0.0"
+
+postcss-modules-scope@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz#385cae013cc7743f5a7d7602d1073a89eaae62ee"
+ integrity sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==
+ dependencies:
+ postcss "^7.0.6"
+ postcss-selector-parser "^6.0.0"
+
+postcss-modules-values@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz#5b5000d6ebae29b4255301b4a3a54574423e7f10"
+ integrity sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==
+ dependencies:
+ icss-utils "^4.0.0"
+ postcss "^7.0.6"
+
+postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz#934cf799d016c83411859e09dcecade01286ec5c"
+ integrity sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==
+ dependencies:
+ cssesc "^3.0.0"
+ indexes-of "^1.0.1"
+ uniq "^1.0.1"
+
+postcss-value-parser@^3.2.3:
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281"
+ integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==
+
+postcss-value-parser@^4.0.0, postcss-value-parser@^4.0.3:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.0.3.tgz#651ff4593aa9eda8d5d0d66593a2417aeaeb325d"
+ integrity sha512-N7h4pG+Nnu5BEIzyeaaIYWs0LI5XC40OrRh5L60z0QjFsqGWcHcbkBvpe1WYpcIS9yQ8sOi/vIPt1ejQCrMVrg==
+
+postcss@^6.0.22, postcss@^6.0.23:
+ version "6.0.23"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324"
+ integrity sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==
+ dependencies:
+ chalk "^2.4.1"
+ source-map "^0.6.1"
+ supports-color "^5.4.0"
+
+postcss@^7.0.14, postcss@^7.0.16, postcss@^7.0.27, postcss@^7.0.5, postcss@^7.0.6:
+ version "7.0.27"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.27.tgz#cc67cdc6b0daa375105b7c424a85567345fc54d9"
+ integrity sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==
+ dependencies:
+ chalk "^2.4.2"
+ source-map "^0.6.1"
+ supports-color "^6.1.0"
+
+potpack@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/potpack/-/potpack-1.0.1.tgz#d1b1afd89e4c8f7762865ec30bd112ab767e2ebf"
+ integrity sha512-15vItUAbViaYrmaB/Pbw7z6qX2xENbFSTA7Ii4tgbPtasxm5v6ryKhKtL91tpWovDJzTiZqdwzhcFBCwiMVdVw==
+
+prelude-ls@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
+ integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==
+
+prelude-ls@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
+ integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=
+
+prettier@^1.19.1:
+ version "1.19.1"
+ resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb"
+ integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==
+
+pretty-format@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-24.9.0.tgz#12fac31b37019a4eea3c11aa9a959eb7628aa7c9"
+ integrity sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==
+ dependencies:
+ "@jest/types" "^24.9.0"
+ ansi-regex "^4.0.0"
+ ansi-styles "^3.2.0"
+ react-is "^16.8.4"
+
+pretty-format@^26.0.0, pretty-format@^26.6.2:
+ version "26.6.2"
+ resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93"
+ integrity sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==
+ dependencies:
+ "@jest/types" "^26.6.2"
+ ansi-regex "^5.0.0"
+ ansi-styles "^4.0.0"
+ react-is "^17.0.1"
+
+private@^0.1.8, private@~0.1.5:
+ version "0.1.8"
+ resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff"
+ integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==
+
+process-nextick-args@~2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
+ integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
+
+process@^0.11.10:
+ version "0.11.10"
+ resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
+ integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI=
+
+progress@^2.0.0:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
+ integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
+
+promise-inflight@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3"
+ integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM=
+
+promise@^7.1.1:
+ version "7.3.1"
+ resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf"
+ integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==
+ dependencies:
+ asap "~2.0.3"
+
+prompts@^2.0.1:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.3.2.tgz#480572d89ecf39566d2bd3fe2c9fccb7c4c0b068"
+ integrity sha512-Q06uKs2CkNYVID0VqwfAl9mipo99zkBv/n2JtWY89Yxa3ZabWSrs0e2KTudKVa3peLUvYXMefDqIleLPVUBZMA==
+ dependencies:
+ kleur "^3.0.3"
+ sisteransi "^1.0.4"
+
+prop-types-exact@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/prop-types-exact/-/prop-types-exact-1.2.0.tgz#825d6be46094663848237e3925a98c6e944e9869"
+ integrity sha512-K+Tk3Kd9V0odiXFP9fwDHUYRyvK3Nun3GVyPapSIs5OBkITAm15W0CPFD/YKTkMUAbc0b9CUwRQp2ybiBIq+eA==
+ dependencies:
+ has "^1.0.3"
+ object.assign "^4.1.0"
+ reflect.ownkeys "^0.2.0"
+
+prop-types@>=15.0.0, prop-types@^15.5.10, prop-types@^15.5.7, prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.7.2:
+ version "15.7.2"
+ resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5"
+ integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==
+ dependencies:
+ loose-envify "^1.4.0"
+ object-assign "^4.1.1"
+ react-is "^16.8.1"
+
+protocol-buffers-schema@^3.3.1:
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/protocol-buffers-schema/-/protocol-buffers-schema-3.4.0.tgz#2f0ea31ca96627d680bf2fefae7ebfa2b6453eae"
+ integrity sha512-G/2kcamPF2S49W5yaMGdIpkG6+5wZF0fzBteLKgEHjbNzqjZQ85aAs1iJGto31EJaSTkNvHs5IXuHSaTLWBAiA==
+
+prr@~1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476"
+ integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY=
+
+psl@^1.1.28:
+ version "1.8.0"
+ resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24"
+ integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==
+
+public-encrypt@^4.0.0:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0"
+ integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==
+ dependencies:
+ bn.js "^4.1.0"
+ browserify-rsa "^4.0.0"
+ create-hash "^1.1.0"
+ parse-asn1 "^5.0.0"
+ randombytes "^2.0.1"
+ safe-buffer "^5.1.2"
+
+pump@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909"
+ integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==
+ dependencies:
+ end-of-stream "^1.1.0"
+ once "^1.3.1"
+
+pump@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
+ integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
+ dependencies:
+ end-of-stream "^1.1.0"
+ once "^1.3.1"
+
+pumpify@^1.3.3:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce"
+ integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==
+ dependencies:
+ duplexify "^3.6.0"
+ inherits "^2.0.3"
+ pump "^2.0.0"
+
+punycode@1.3.2:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d"
+ integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=
+
+punycode@^1.2.4:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
+ integrity sha1-wNWmOycYgArY4esPpSachN1BhF4=
+
+punycode@^2.1.0, punycode@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
+ integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
+
+pxls@^2.0.0:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/pxls/-/pxls-2.3.2.tgz#79100d2cc95089fc6e00053a9d93c1ddddb2c7b4"
+ integrity sha512-pQkwgbLqWPcuES5iEmGa10OlCf5xG0blkIF3dg7PpRZShbTYcvAdfFfGL03SMrkaSUaa/V0UpN9HWg40O2AIIw==
+ dependencies:
+ arr-flatten "^1.1.0"
+ compute-dims "^1.1.0"
+ flip-pixels "^1.0.2"
+ is-browser "^2.1.0"
+ is-buffer "^2.0.3"
+ to-uint8 "^1.4.1"
+
+qs@~6.5.2:
+ version "6.5.2"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
+ integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==
+
+quantize@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/quantize/-/quantize-1.0.2.tgz#d25ac200a77b6d70f40127ca171a10e33c8546de"
+ integrity sha1-0lrCAKd7bXD0ASfKFxoQ4zyFRt4=
+
+quat-slerp@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/quat-slerp/-/quat-slerp-1.0.1.tgz#2baa15ce3a6bbdc3241d972eb17283139ed69f29"
+ integrity sha1-K6oVzjprvcMkHZcusXKDE57Wnyk=
+ dependencies:
+ gl-quat "^1.0.0"
+
+querystring-es3@^0.2.0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73"
+ integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=
+
+querystring@0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620"
+ integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=
+
+quickselect@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/quickselect/-/quickselect-2.0.0.tgz#f19680a486a5eefb581303e023e98faaf25dd018"
+ integrity sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==
+
+quote-stream@~0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/quote-stream/-/quote-stream-0.0.0.tgz#cde29e94c409b16e19dc7098b89b6658f9721d3b"
+ integrity sha1-zeKelMQJsW4Z3HCYuJtmWPlyHTs=
+ dependencies:
+ minimist "0.0.8"
+ through2 "~0.4.1"
+
+raf@^3.4.1:
+ version "3.4.1"
+ resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39"
+ integrity sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==
+ dependencies:
+ performance-now "^2.1.0"
+
+railroad-diagrams@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz#eb7e6267548ddedfb899c1b90e57374559cddb7e"
+ integrity sha1-635iZ1SN3t+4mcG5Dlc3RVnN234=
+
+randexp@0.4.6:
+ version "0.4.6"
+ resolved "https://registry.yarnpkg.com/randexp/-/randexp-0.4.6.tgz#e986ad5e5e31dae13ddd6f7b3019aa7c87f60ca3"
+ integrity sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==
+ dependencies:
+ discontinuous-range "1.0.0"
+ ret "~0.1.10"
+
+randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
+ integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==
+ dependencies:
+ safe-buffer "^5.1.0"
+
+randomfill@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458"
+ integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==
+ dependencies:
+ randombytes "^2.0.5"
+ safe-buffer "^5.1.0"
+
+rat-vec@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/rat-vec/-/rat-vec-1.1.1.tgz#0dde2b66b7b34bb1bcd2a23805eac806d87fd17f"
+ integrity sha1-Dd4rZrezS7G80qI4BerIBth/0X8=
+ dependencies:
+ big-rat "^1.0.3"
+
+rc@^1.2.7:
+ version "1.2.8"
+ resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
+ integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==
+ dependencies:
+ deep-extend "^0.6.0"
+ ini "~1.3.0"
+ minimist "^1.2.0"
+ strip-json-comments "~2.0.1"
+
+react-draggable@^3.0.3:
+ version "3.3.2"
+ resolved "https://registry.yarnpkg.com/react-draggable/-/react-draggable-3.3.2.tgz#966ef1d90f2387af3c2d8bd3516f601ea42ca359"
+ integrity sha512-oaz8a6enjbPtx5qb0oDWxtDNuybOylvto1QLydsXgKmwT7e3GXC2eMVDwEMIUYJIFqVG72XpOv673UuuAq6LhA==
+ dependencies:
+ classnames "^2.2.5"
+ prop-types "^15.6.0"
+
+react-is@^16.12.0, react-is@^16.7.0, react-is@^16.8.1, react-is@^16.8.4, react-is@^16.8.6, react-is@^16.9.0:
+ version "16.13.1"
+ resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
+ integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
+
+react-is@^17.0.1:
+ version "17.0.1"
+ resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.1.tgz#5b3531bd76a645a4c9fb6e693ed36419e3301339"
+ integrity sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA==
+
+react-pivottable@^0.9.0:
+ version "0.9.0"
+ resolved "https://registry.yarnpkg.com/react-pivottable/-/react-pivottable-0.9.0.tgz#f50ea2334dbbdd1c078f5a402f7c33b7c6dff907"
+ integrity sha512-fs1pGV5z4BvOXL4iLu79kKCLgR5XINW2ZredJHoPqXEMbJaIv50Eoec1XowWf3i3Dvdb8EYgvNqlF2ggC4GJOw==
+ dependencies:
+ immutability-helper "^2.3.1"
+ prop-types "^15.5.10"
+ react-draggable "^3.0.3"
+ react-sortablejs "^1.3.4"
+ sortablejs "^1.6.1"
+
+react-sortable-hoc@^1.10.1:
+ version "1.11.0"
+ resolved "https://registry.yarnpkg.com/react-sortable-hoc/-/react-sortable-hoc-1.11.0.tgz#fe4022362bbafc4b836f5104b9676608a40a278f"
+ integrity sha512-v1CDCvdfoR3zLGNp6qsBa4J1BWMEVH25+UKxF/RvQRh+mrB+emqtVHMgZ+WreUiKJoEaiwYoScaueIKhMVBHUg==
+ dependencies:
+ "@babel/runtime" "^7.2.0"
+ invariant "^2.2.4"
+ prop-types "^15.5.7"
+
+react-sortablejs@^1.3.4:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/react-sortablejs/-/react-sortablejs-1.5.1.tgz#ba05a554548cf9733cc2d5411ece9b97f911b63e"
+ integrity sha512-bKIc1UVhjZt55Nb6WZFxZ8Jwyngg8CTt+w+iG1pA5k9LQsg1J0X6nLppHatSSDZDECtRZKp2z47tmmhPRJNj4g==
+ dependencies:
+ prop-types ">=15.0.0"
+
+react-test-renderer@^16.0.0-0:
+ version "16.13.1"
+ resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.13.1.tgz#de25ea358d9012606de51e012d9742e7f0deabc1"
+ integrity sha512-Sn2VRyOK2YJJldOqoh8Tn/lWQ+ZiKhyZTPtaO0Q6yNj+QDbmRkVFap6pZPy3YQk8DScRDfyqm/KxKYP9gCMRiQ==
+ dependencies:
+ object-assign "^4.1.1"
+ prop-types "^15.6.2"
+ react-is "^16.8.6"
+ scheduler "^0.19.1"
+
+read-pkg-up@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-4.0.0.tgz#1b221c6088ba7799601c808f91161c66e58f8978"
+ integrity sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==
+ dependencies:
+ find-up "^3.0.0"
+ read-pkg "^3.0.0"
+
+read-pkg@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389"
+ integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=
+ dependencies:
+ load-json-file "^4.0.0"
+ normalize-package-data "^2.3.2"
+ path-type "^3.0.0"
+
+"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6:
+ version "2.3.7"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
+ integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
+ dependencies:
+ core-util-is "~1.0.0"
+ inherits "~2.0.3"
+ isarray "~1.0.0"
+ process-nextick-args "~2.0.0"
+ safe-buffer "~5.1.1"
+ string_decoder "~1.1.1"
+ util-deprecate "~1.0.1"
+
+"readable-stream@>=1.0.33-1 <1.1.0-0", readable-stream@~1.0.17, readable-stream@~1.0.27-1:
+ version "1.0.34"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c"
+ integrity sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=
+ dependencies:
+ core-util-is "~1.0.0"
+ inherits "~2.0.1"
+ isarray "0.0.1"
+ string_decoder "~0.10.x"
+
+readable-stream@^3.1.1:
+ version "3.6.0"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198"
+ integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==
+ dependencies:
+ inherits "^2.0.3"
+ string_decoder "^1.1.1"
+ util-deprecate "^1.0.1"
+
+readable-stream@~1.1.9:
+ version "1.1.14"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9"
+ integrity sha1-fPTFTvZI44EwhMY23SB54WbAgdk=
+ dependencies:
+ core-util-is "~1.0.0"
+ inherits "~2.0.1"
+ isarray "0.0.1"
+ string_decoder "~0.10.x"
+
+readdirp@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525"
+ integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==
+ dependencies:
+ graceful-fs "^4.1.11"
+ micromatch "^3.1.10"
+ readable-stream "^2.0.2"
+
+realpath-native@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.1.0.tgz#2003294fea23fb0672f2476ebe22fcf498a2d65c"
+ integrity sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA==
+ dependencies:
+ util.promisify "^1.0.0"
+
+recast@^0.16.1:
+ version "0.16.2"
+ resolved "https://registry.yarnpkg.com/recast/-/recast-0.16.2.tgz#3796ebad5fe49ed85473b479cd6df554ad725dc2"
+ integrity sha512-O/7qXi51DPjRVdbrpNzoBQH5dnAPQNbfoOFyRiUwreTMJfIHYOEBzwuH+c0+/BTSJ3CQyKs6ILSWXhESH6Op3A==
+ dependencies:
+ ast-types "0.11.7"
+ esprima "~4.0.0"
+ private "~0.1.5"
+ source-map "~0.6.1"
+
+recast@^0.18.1:
+ version "0.18.10"
+ resolved "https://registry.yarnpkg.com/recast/-/recast-0.18.10.tgz#605ebbe621511eb89b6356a7e224bff66ed91478"
+ integrity sha512-XNvYvkfdAN9QewbrxeTOjgINkdY/odTgTS56ZNEWL9Ml0weT4T3sFtvnTuF+Gxyu46ANcRm1ntrF6F5LAJPAaQ==
+ dependencies:
+ ast-types "0.13.3"
+ esprima "~4.0.0"
+ private "^0.1.8"
+ source-map "~0.6.1"
+
+redeyed@~0.4.0:
+ version "0.4.4"
+ resolved "https://registry.yarnpkg.com/redeyed/-/redeyed-0.4.4.tgz#37e990a6f2b21b2a11c2e6a48fd4135698cba97f"
+ integrity sha1-N+mQpvKyGyoRwuakj9QTVpjLqX8=
+ dependencies:
+ esprima "~1.0.4"
+
+reduce-simplicial-complex@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/reduce-simplicial-complex/-/reduce-simplicial-complex-1.0.0.tgz#74d696a2f835f7a6dcd92065fd8c5181f2edf8bc"
+ integrity sha1-dNaWovg196bc2SBl/YxRgfLt+Lw=
+ dependencies:
+ cell-orientation "^1.0.1"
+ compare-cell "^1.0.0"
+ compare-oriented-cell "^1.0.1"
+
+reflect.ownkeys@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/reflect.ownkeys/-/reflect.ownkeys-0.2.0.tgz#749aceec7f3fdf8b63f927a04809e90c5c0b3460"
+ integrity sha1-dJrO7H8/34tj+SegSAnpDFwLNGA=
+
+regenerate-unicode-properties@^8.2.0:
+ version "8.2.0"
+ resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec"
+ integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==
+ dependencies:
+ regenerate "^1.4.0"
+
+regenerate@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11"
+ integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==
+
+regenerator-runtime@^0.13.4:
+ version "0.13.5"
+ resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz#d878a1d094b4306d10b9096484b33ebd55e26697"
+ integrity sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==
+
+regenerator-transform@^0.14.2:
+ version "0.14.4"
+ resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.4.tgz#5266857896518d1616a78a0479337a30ea974cc7"
+ integrity sha512-EaJaKPBI9GvKpvUz2mz4fhx7WPgvwRLY9v3hlNHWmAuJHI13T4nwKnNvm5RWJzEdnI5g5UwtOww+S8IdoUC2bw==
+ dependencies:
+ "@babel/runtime" "^7.8.4"
+ private "^0.1.8"
+
+regex-not@^1.0.0, regex-not@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c"
+ integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==
+ dependencies:
+ extend-shallow "^3.0.2"
+ safe-regex "^1.1.0"
+
+regex-regex@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/regex-regex/-/regex-regex-1.0.0.tgz#9048a1eaeb870f4d480dabc76fc42cdcc0bc3a72"
+ integrity sha1-kEih6uuHD01IDavHb8Qs3MC8OnI=
+
+regexp.prototype.flags@^1.2.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz#7aba89b3c13a64509dabcf3ca8d9fbb9bdf5cb75"
+ integrity sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==
+ dependencies:
+ define-properties "^1.1.3"
+ es-abstract "^1.17.0-next.1"
+
+regexpp@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2"
+ integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==
+
+regexpu-core@^4.5.4, regexpu-core@^4.7.0:
+ version "4.7.0"
+ resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.0.tgz#fcbf458c50431b0bb7b45d6967b8192d91f3d938"
+ integrity sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ==
+ dependencies:
+ regenerate "^1.4.0"
+ regenerate-unicode-properties "^8.2.0"
+ regjsgen "^0.5.1"
+ regjsparser "^0.6.4"
+ unicode-match-property-ecmascript "^1.0.4"
+ unicode-match-property-value-ecmascript "^1.2.0"
+
+regjsgen@^0.5.1:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.1.tgz#48f0bf1a5ea205196929c0d9798b42d1ed98443c"
+ integrity sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg==
+
+regjsparser@^0.6.4:
+ version "0.6.4"
+ resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.4.tgz#a769f8684308401a66e9b529d2436ff4d0666272"
+ integrity sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==
+ dependencies:
+ jsesc "~0.5.0"
+
+regl-error2d@^2.0.8:
+ version "2.0.8"
+ resolved "https://registry.yarnpkg.com/regl-error2d/-/regl-error2d-2.0.8.tgz#0f26371ee99c78d42e9c5a197387e32034bcf640"
+ integrity sha512-5nszdicXbimRUnYB42i+O7KPcla7PzI62nZLCP6qVRKlQCf3rSrWbikMNd1S84LE8+deWHWcb8rZ/v7rZ9qmmw==
+ dependencies:
+ array-bounds "^1.0.1"
+ bubleify "^1.2.0"
+ color-normalize "^1.5.0"
+ flatten-vertex-data "^1.0.2"
+ object-assign "^4.1.1"
+ pick-by-alias "^1.2.0"
+ to-float32 "^1.0.1"
+ update-diff "^1.1.0"
+
+regl-line2d@^3.0.15:
+ version "3.0.15"
+ resolved "https://registry.yarnpkg.com/regl-line2d/-/regl-line2d-3.0.15.tgz#5baf2a0ed5024cec2ec038c6ada601c98ac579e3"
+ integrity sha512-RuQbg9iZ6MyuInG8izF6zjQ/2g4qL6sg1egiuFalWzaGSvuve/IWBsIcqKTlwpiEsRt9b4cHu9NYs2fLt1gYJw==
+ dependencies:
+ array-bounds "^1.0.1"
+ array-normalize "^1.1.4"
+ bubleify "^1.2.0"
+ color-normalize "^1.5.0"
+ earcut "^2.1.5"
+ es6-weak-map "^2.0.3"
+ flatten-vertex-data "^1.0.2"
+ glslify "^7.0.0"
+ object-assign "^4.1.1"
+ parse-rect "^1.2.0"
+ pick-by-alias "^1.2.0"
+ to-float32 "^1.0.1"
+
+regl-scatter2d@^3.1.2, regl-scatter2d@^3.1.7:
+ version "3.1.8"
+ resolved "https://registry.yarnpkg.com/regl-scatter2d/-/regl-scatter2d-3.1.8.tgz#5fdf77f9cee7e71497d038dc1b654dc4340b6bfb"
+ integrity sha512-Z9MYAUx9t8e3MsiHBbJAEstbIqauXxzcL9DmuKXQuRWfCMF2DBytYJtE0FpbQU6639wEMAJ54SEIlISWF8sQ2g==
+ dependencies:
+ array-range "^1.0.1"
+ array-rearrange "^2.2.2"
+ clamp "^1.0.1"
+ color-id "^1.1.0"
+ color-normalize "1.5.0"
+ color-rgba "^2.1.1"
+ flatten-vertex-data "^1.0.2"
+ glslify "^7.0.0"
+ image-palette "^2.1.0"
+ is-iexplorer "^1.0.0"
+ object-assign "^4.1.1"
+ parse-rect "^1.2.0"
+ pick-by-alias "^1.2.0"
+ point-cluster "^3.1.8"
+ to-float32 "^1.0.1"
+ update-diff "^1.1.0"
+
+regl-splom@^1.0.8:
+ version "1.0.8"
+ resolved "https://registry.yarnpkg.com/regl-splom/-/regl-splom-1.0.8.tgz#05f165a6f0b8afc6b6b97fafa775282d44387db3"
+ integrity sha512-4GQTgcArCbGLsXhgalWVBxeW7OXllnu+Gvil/4SbQQmtiqLCl+xgF79pISKY9mLXTlobxiX7cVKdjGjp25559A==
+ dependencies:
+ array-bounds "^1.0.1"
+ array-range "^1.0.1"
+ bubleify "^1.2.0"
+ color-alpha "^1.0.4"
+ defined "^1.0.0"
+ flatten-vertex-data "^1.0.2"
+ left-pad "^1.3.0"
+ parse-rect "^1.2.0"
+ pick-by-alias "^1.2.0"
+ point-cluster "^3.1.8"
+ raf "^3.4.1"
+ regl-scatter2d "^3.1.2"
+
+regl@^1.3.11:
+ version "1.4.2"
+ resolved "https://registry.yarnpkg.com/regl/-/regl-1.4.2.tgz#6593c38868b569ea68410364048360367a21e813"
+ integrity sha512-wc/kE6kGmGfQk3G9f1Pai4TZ0K1pWxkD1Jeaj6CxJwEiB1jwHgEpqD84G2t7F0DmNXfQh7IUnoG1opxoONJ7Xg==
+
+remove-trailing-separator@^1.0.1:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef"
+ integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8=
+
+repeat-element@^1.1.2:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce"
+ integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==
+
+repeat-string@^1.3.0, repeat-string@^1.5.2, repeat-string@^1.6.1:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
+ integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc=
+
+request-promise-core@1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.3.tgz#e9a3c081b51380dfea677336061fea879a829ee9"
+ integrity sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ==
+ dependencies:
+ lodash "^4.17.15"
+
+request-promise-native@^1.0.5:
+ version "1.0.8"
+ resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.8.tgz#a455b960b826e44e2bf8999af64dff2bfe58cb36"
+ integrity sha512-dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ==
+ dependencies:
+ request-promise-core "1.1.3"
+ stealthy-require "^1.1.1"
+ tough-cookie "^2.3.3"
+
+request@^2.83.0, request@^2.87.0:
+ version "2.88.2"
+ resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3"
+ integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==
+ dependencies:
+ aws-sign2 "~0.7.0"
+ aws4 "^1.8.0"
+ caseless "~0.12.0"
+ combined-stream "~1.0.6"
+ extend "~3.0.2"
+ forever-agent "~0.6.1"
+ form-data "~2.3.2"
+ har-validator "~5.1.3"
+ http-signature "~1.2.0"
+ is-typedarray "~1.0.0"
+ isstream "~0.1.2"
+ json-stringify-safe "~5.0.1"
+ mime-types "~2.1.19"
+ oauth-sign "~0.9.0"
+ performance-now "^2.1.0"
+ qs "~6.5.2"
+ safe-buffer "^5.1.2"
+ tough-cookie "~2.5.0"
+ tunnel-agent "^0.6.0"
+ uuid "^3.3.2"
+
+require-directory@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
+ integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I=
+
+require-main-filename@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b"
+ integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==
+
+reselect@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.0.0.tgz#f2529830e5d3d0e021408b246a206ef4ea4437f7"
+ integrity sha512-qUgANli03jjAyGlnbYVAV5vvnOmJnODyABz51RdBN7M4WaVu8mecZWgyQNkG8Yqe3KRGRt0l4K4B3XVEULC4CA==
+
+resolve-cwd@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a"
+ integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=
+ dependencies:
+ resolve-from "^3.0.0"
+
+resolve-dir@^1.0.0, resolve-dir@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43"
+ integrity sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=
+ dependencies:
+ expand-tilde "^2.0.0"
+ global-modules "^1.0.0"
+
+resolve-from@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748"
+ integrity sha1-six699nWiBvItuZTM17rywoYh0g=
+
+resolve-from@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
+ integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
+
+resolve-from@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69"
+ integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==
+
+resolve-protobuf-schema@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz#9ca9a9e69cf192bbdaf1006ec1973948aa4a3758"
+ integrity sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==
+ dependencies:
+ protocol-buffers-schema "^3.3.1"
+
+resolve-url@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
+ integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=
+
+resolve@1.1.7:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b"
+ integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=
+
+resolve@^0.6.1:
+ version "0.6.3"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-0.6.3.tgz#dd957982e7e736debdf53b58a4dd91754575dd46"
+ integrity sha1-3ZV5gufnNt699TtYpN2RdUV13UY=
+
+resolve@^1.0.0, resolve@^1.1.5, resolve@^1.10.0, resolve@^1.13.1, resolve@^1.3.2, resolve@~1.15.1:
+ version "1.15.1"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8"
+ integrity sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w==
+ dependencies:
+ path-parse "^1.0.6"
+
+restore-cursor@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf"
+ integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368=
+ dependencies:
+ onetime "^2.0.0"
+ signal-exit "^3.0.2"
+
+resumer@~0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/resumer/-/resumer-0.0.0.tgz#f1e8f461e4064ba39e82af3cdc2a8c893d076759"
+ integrity sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k=
+ dependencies:
+ through "~2.3.4"
+
+ret@~0.1.10:
+ version "0.1.15"
+ resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
+ integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==
+
+reusify@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
+ integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
+
+right-align@^0.1.1:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef"
+ integrity sha1-YTObci/mo1FWiSENJOFMlhSGE+8=
+ dependencies:
+ align-text "^0.1.1"
+
+right-now@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/right-now/-/right-now-1.0.0.tgz#6e89609deebd7dcdaf8daecc9aea39cf585a0918"
+ integrity sha1-bolgne69fc2vja7Mmuo5z1haCRg=
+
+rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.3:
+ version "2.7.1"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec"
+ integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==
+ dependencies:
+ glob "^7.1.3"
+
+rimraf@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
+ integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
+ dependencies:
+ glob "^7.1.3"
+
+rimraf@~2.6.2:
+ version "2.6.3"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab"
+ integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==
+ dependencies:
+ glob "^7.1.3"
+
+ripemd160@^2.0.0, ripemd160@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c"
+ integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==
+ dependencies:
+ hash-base "^3.0.0"
+ inherits "^2.0.1"
+
+robust-compress@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/robust-compress/-/robust-compress-1.0.0.tgz#4cf62c4b318d8308516012bb8c11752f39329b1b"
+ integrity sha1-TPYsSzGNgwhRYBK7jBF1Lzkymxs=
+
+robust-determinant@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/robust-determinant/-/robust-determinant-1.1.0.tgz#8ecae79b79caab3e74f6debe2237e5391a27e9c7"
+ integrity sha1-jsrnm3nKqz509t6+IjflORon6cc=
+ dependencies:
+ robust-compress "^1.0.0"
+ robust-scale "^1.0.0"
+ robust-sum "^1.0.0"
+ two-product "^1.0.0"
+
+robust-dot-product@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/robust-dot-product/-/robust-dot-product-1.0.0.tgz#c9ba0178bd2c304bfd725f58e889f1d946004553"
+ integrity sha1-yboBeL0sMEv9cl9Y6Inx2UYARVM=
+ dependencies:
+ robust-sum "^1.0.0"
+ two-product "^1.0.0"
+
+robust-in-sphere@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/robust-in-sphere/-/robust-in-sphere-1.1.3.tgz#1c5883d16a4e923929476ef34819857bf2a9cf75"
+ integrity sha1-HFiD0WpOkjkpR27zSBmFe/Kpz3U=
+ dependencies:
+ robust-scale "^1.0.0"
+ robust-subtract "^1.0.0"
+ robust-sum "^1.0.0"
+ two-product "^1.0.0"
+
+robust-linear-solve@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/robust-linear-solve/-/robust-linear-solve-1.0.0.tgz#0cd6ac5040691a6f2aa3cd6311d728905ca3a1f1"
+ integrity sha1-DNasUEBpGm8qo81jEdcokFyjofE=
+ dependencies:
+ robust-determinant "^1.1.0"
+
+robust-orientation@^1.0.1, robust-orientation@^1.0.2, robust-orientation@^1.1.2, robust-orientation@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/robust-orientation/-/robust-orientation-1.1.3.tgz#daff5b00d3be4e60722f0e9c0156ef967f1c2049"
+ integrity sha1-2v9bANO+TmByLw6cAVbvln8cIEk=
+ dependencies:
+ robust-scale "^1.0.2"
+ robust-subtract "^1.0.0"
+ robust-sum "^1.0.0"
+ two-product "^1.0.2"
+
+robust-product@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/robust-product/-/robust-product-1.0.0.tgz#685250007cdbba7cf1de75bff6d2927011098abe"
+ integrity sha1-aFJQAHzbunzx3nW/9tKScBEJir4=
+ dependencies:
+ robust-scale "^1.0.0"
+ robust-sum "^1.0.0"
+
+robust-scale@^1.0.0, robust-scale@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/robust-scale/-/robust-scale-1.0.2.tgz#775132ed09542d028e58b2cc79c06290bcf78c32"
+ integrity sha1-d1Ey7QlULQKOWLLMecBikLz3jDI=
+ dependencies:
+ two-product "^1.0.2"
+ two-sum "^1.0.0"
+
+robust-segment-intersect@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/robust-segment-intersect/-/robust-segment-intersect-1.0.1.tgz#3252b6a0fc1ba14ade6915ccbe09cbce9aab1c1c"
+ integrity sha1-MlK2oPwboUreaRXMvgnLzpqrHBw=
+ dependencies:
+ robust-orientation "^1.1.3"
+
+robust-subtract@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/robust-subtract/-/robust-subtract-1.0.0.tgz#e0b164e1ed8ba4e3a5dda45a12038348dbed3e9a"
+ integrity sha1-4LFk4e2LpOOl3aRaEgODSNvtPpo=
+
+robust-sum@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/robust-sum/-/robust-sum-1.0.0.tgz#16646e525292b4d25d82757a286955e0bbfa53d9"
+ integrity sha1-FmRuUlKStNJdgnV6KGlV4Lv6U9k=
+
+rst-selector-parser@^2.2.3:
+ version "2.2.3"
+ resolved "https://registry.yarnpkg.com/rst-selector-parser/-/rst-selector-parser-2.2.3.tgz#81b230ea2fcc6066c89e3472de794285d9b03d91"
+ integrity sha1-gbIw6i/MYGbInjRy3nlChdmwPZE=
+ dependencies:
+ lodash.flattendeep "^4.4.0"
+ nearley "^2.7.10"
+
+rsvp@^4.8.4:
+ version "4.8.5"
+ resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734"
+ integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==
+
+run-parallel@^1.1.9:
+ version "1.1.10"
+ resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.10.tgz#60a51b2ae836636c81377df16cb107351bcd13ef"
+ integrity sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw==
+
+run-queue@^1.0.0, run-queue@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47"
+ integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=
+ dependencies:
+ aproba "^1.1.1"
+
+rw@^1.3.3:
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/rw/-/rw-1.3.3.tgz#3f862dfa91ab766b14885ef4d01124bfda074fb4"
+ integrity sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q=
+
+safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
+ integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
+
+safe-regex@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e"
+ integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4=
+ dependencies:
+ ret "~0.1.10"
+
+"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
+ integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
+
+sane-topojson@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/sane-topojson/-/sane-topojson-4.0.0.tgz#624cdb26fc6d9392c806897bfd1a393f29bb5308"
+ integrity sha512-bJILrpBboQfabG3BNnHI2hZl52pbt80BE09u4WhnrmzuF2JbMKZdl62G5glXskJ46p+gxE2IzOwGj/awR4g8AA==
+
+sane@^4.0.3:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded"
+ integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==
+ dependencies:
+ "@cnakazawa/watch" "^1.0.3"
+ anymatch "^2.0.0"
+ capture-exit "^2.0.0"
+ exec-sh "^0.3.2"
+ execa "^1.0.0"
+ fb-watchman "^2.0.0"
+ micromatch "^3.1.4"
+ minimist "^1.1.1"
+ walker "~1.0.5"
+
+sax@^1.2.4:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
+ integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
+
+scheduler@^0.19.1:
+ version "0.19.1"
+ resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.19.1.tgz#4f3e2ed2c1a7d65681f4c854fa8c5a1ccb40f196"
+ integrity sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==
+ dependencies:
+ loose-envify "^1.1.0"
+ object-assign "^4.1.1"
+
+schema-utils@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770"
+ integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==
+ dependencies:
+ ajv "^6.1.0"
+ ajv-errors "^1.0.0"
+ ajv-keywords "^3.1.0"
+
+schema-utils@^2.6.5:
+ version "2.6.6"
+ resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.6.6.tgz#299fe6bd4a3365dc23d99fd446caff8f1d6c330c"
+ integrity sha512-wHutF/WPSbIi9x6ctjGGk2Hvl0VOz5l3EKEuKbjPlB30mKZUzb9A5k9yEXRX3pwyqVLPvpfZZEllaFq/M718hA==
+ dependencies:
+ ajv "^6.12.0"
+ ajv-keywords "^3.4.1"
+
+"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.6.0, semver@^5.7.0, semver@^5.7.1:
+ version "5.7.1"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
+ integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
+
+semver@7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e"
+ integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==
+
+semver@^6.0.0, semver@^6.2.0, semver@^6.3.0:
+ version "6.3.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
+ integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
+
+semver@^7.2.1:
+ version "7.3.4"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97"
+ integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==
+ dependencies:
+ lru-cache "^6.0.0"
+
+serialize-javascript@^2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-2.1.2.tgz#ecec53b0e0317bdc95ef76ab7074b7384785fa61"
+ integrity sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ==
+
+set-blocking@^2.0.0, set-blocking@~2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
+ integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
+
+set-value@^2.0.0, set-value@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b"
+ integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==
+ dependencies:
+ extend-shallow "^2.0.1"
+ is-extendable "^0.1.1"
+ is-plain-object "^2.0.3"
+ split-string "^3.0.1"
+
+setimmediate@^1.0.4:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
+ integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=
+
+sha.js@^2.4.0, sha.js@^2.4.8:
+ version "2.4.11"
+ resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7"
+ integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==
+ dependencies:
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
+shallow-copy@0.0.1, shallow-copy@~0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/shallow-copy/-/shallow-copy-0.0.1.tgz#415f42702d73d810330292cc5ee86eae1a11a170"
+ integrity sha1-QV9CcC1z2BAzApLMXuhurhoRoXA=
+
+sharkdown@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/sharkdown/-/sharkdown-0.1.1.tgz#64484bd0f08f347f8319e9ff947a670f6b48b1b2"
+ integrity sha512-exwooSpmo5s45lrexgz6Q0rFQM574wYIX3iDZ7RLLqOb7IAoQZu9nxlZODU972g19sR69OIpKP2cpHTzU+PHIg==
+ dependencies:
+ cardinal "~0.4.2"
+ minimist "0.0.5"
+ split "~0.2.10"
+
+shebang-command@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
+ integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=
+ dependencies:
+ shebang-regex "^1.0.0"
+
+shebang-command@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
+ integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
+ dependencies:
+ shebang-regex "^3.0.0"
+
+shebang-regex@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
+ integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=
+
+shebang-regex@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
+ integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
+
+shell-quote@^1.6.1:
+ version "1.7.2"
+ resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2"
+ integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==
+
+shellwords@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b"
+ integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==
+
+signal-exit@^3.0.0, signal-exit@^3.0.2:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c"
+ integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==
+
+signum@^0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/signum/-/signum-0.0.0.tgz#ab551b1003351070a704783f1a09c5e7691f9cf6"
+ integrity sha1-q1UbEAM1EHCnBHg/GgnF52kfnPY=
+
+signum@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/signum/-/signum-1.0.0.tgz#74a7d2bf2a20b40eba16a92b152124f1d559fa77"
+ integrity sha1-dKfSvyogtA66FqkrFSEk8dVZ+nc=
+
+simplicial-complex-boundary@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/simplicial-complex-boundary/-/simplicial-complex-boundary-1.0.1.tgz#72c9ff1e24deaa374c9bb2fa0cbf0c081ebef815"
+ integrity sha1-csn/HiTeqjdMm7L6DL8MCB6++BU=
+ dependencies:
+ boundary-cells "^2.0.0"
+ reduce-simplicial-complex "^1.0.0"
+
+simplicial-complex-contour@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/simplicial-complex-contour/-/simplicial-complex-contour-1.0.2.tgz#890aacac284365340110545cf2629a26e04bf9d1"
+ integrity sha1-iQqsrChDZTQBEFRc8mKaJuBL+dE=
+ dependencies:
+ marching-simplex-table "^1.0.0"
+ ndarray "^1.0.15"
+ ndarray-sort "^1.0.0"
+ typedarray-pool "^1.1.0"
+
+simplicial-complex@^0.3.3:
+ version "0.3.3"
+ resolved "https://registry.yarnpkg.com/simplicial-complex/-/simplicial-complex-0.3.3.tgz#4c30cad57f9e45729dd8f306c8753579f46be99e"
+ integrity sha1-TDDK1X+eRXKd2PMGyHU1efRr6Z4=
+ dependencies:
+ bit-twiddle "~0.0.1"
+ union-find "~0.0.3"
+
+simplicial-complex@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/simplicial-complex/-/simplicial-complex-1.0.0.tgz#6c33a4ed69fcd4d91b7bcadd3b30b63683eae241"
+ integrity sha1-bDOk7Wn81Nkbe8rdOzC2NoPq4kE=
+ dependencies:
+ bit-twiddle "^1.0.0"
+ union-find "^1.0.0"
+
+simplify-planar-graph@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/simplify-planar-graph/-/simplify-planar-graph-2.0.1.tgz#bc85893725f32e8fa8ae25681398446d2cbcf766"
+ integrity sha1-vIWJNyXzLo+oriVoE5hEbSy892Y=
+ dependencies:
+ robust-orientation "^1.0.1"
+ simplicial-complex "^0.3.3"
+
+sisteransi@^1.0.4:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed"
+ integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==
+
+slab-decomposition@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/slab-decomposition/-/slab-decomposition-1.0.2.tgz#1ded56754d408b10739f145103dfc61807f65134"
+ integrity sha1-He1WdU1AixBznxRRA9/GGAf2UTQ=
+ dependencies:
+ binary-search-bounds "^1.0.0"
+ functional-red-black-tree "^1.0.0"
+ robust-orientation "^1.1.3"
+
+slash@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44"
+ integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==
+
+slice-ansi@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636"
+ integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==
+ dependencies:
+ ansi-styles "^3.2.0"
+ astral-regex "^1.0.0"
+ is-fullwidth-code-point "^2.0.0"
+
+snapdragon-node@^2.0.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b"
+ integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==
+ dependencies:
+ define-property "^1.0.0"
+ isobject "^3.0.0"
+ snapdragon-util "^3.0.1"
+
+snapdragon-util@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2"
+ integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==
+ dependencies:
+ kind-of "^3.2.0"
+
+snapdragon@^0.8.1:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d"
+ integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==
+ dependencies:
+ base "^0.11.1"
+ debug "^2.2.0"
+ define-property "^0.2.5"
+ extend-shallow "^2.0.1"
+ map-cache "^0.2.2"
+ source-map "^0.5.6"
+ source-map-resolve "^0.5.0"
+ use "^3.1.0"
+
+sortablejs@^1.6.1:
+ version "1.10.2"
+ resolved "https://registry.yarnpkg.com/sortablejs/-/sortablejs-1.10.2.tgz#6e40364d913f98b85a14f6678f92b5c1221f5290"
+ integrity sha512-YkPGufevysvfwn5rfdlGyrGjt7/CRHwvRPogD/lC+TnvcN29jDpCifKP+rBqf+LRldfXSTh+0CGLcSg0VIxq3A==
+
+source-list-map@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34"
+ integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==
+
+source-map-resolve@^0.5.0:
+ version "0.5.3"
+ resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a"
+ integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==
+ dependencies:
+ atob "^2.1.2"
+ decode-uri-component "^0.2.0"
+ resolve-url "^0.2.1"
+ source-map-url "^0.4.0"
+ urix "^0.1.0"
+
+source-map-support@^0.5.16, source-map-support@^0.5.6:
+ version "0.5.19"
+ resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61"
+ integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==
+ dependencies:
+ buffer-from "^1.0.0"
+ source-map "^0.6.0"
+
+source-map-support@~0.5.12:
+ version "0.5.16"
+ resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042"
+ integrity sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==
+ dependencies:
+ buffer-from "^1.0.0"
+ source-map "^0.6.0"
+
+source-map-url@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3"
+ integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=
+
+"source-map@>= 0.1.2", source-map@~0.1.33:
+ version "0.1.43"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.43.tgz#c24bc146ca517c1471f5dacbe2571b2b7f9e3346"
+ integrity sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=
+ dependencies:
+ amdefine ">=0.0.4"
+
+source-map@^0.5.0, source-map@^0.5.6, source-map@~0.5.1:
+ version "0.5.7"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
+ integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
+
+source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
+ integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
+
+sourcemap-codec@^1.4.4:
+ version "1.4.8"
+ resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4"
+ integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==
+
+spdx-correct@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4"
+ integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==
+ dependencies:
+ spdx-expression-parse "^3.0.0"
+ spdx-license-ids "^3.0.0"
+
+spdx-exceptions@^2.1.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977"
+ integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==
+
+spdx-expression-parse@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0"
+ integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==
+ dependencies:
+ spdx-exceptions "^2.1.0"
+ spdx-license-ids "^3.0.0"
+
+spdx-license-ids@^3.0.0:
+ version "3.0.5"
+ resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654"
+ integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==
+
+split-polygon@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/split-polygon/-/split-polygon-1.0.0.tgz#0eacc8a136a76b12a3d95256ea7da45db0c2d247"
+ integrity sha1-DqzIoTanaxKj2VJW6n2kXbDC0kc=
+ dependencies:
+ robust-dot-product "^1.0.0"
+ robust-sum "^1.0.0"
+
+split-string@^3.0.1, split-string@^3.0.2:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2"
+ integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==
+ dependencies:
+ extend-shallow "^3.0.0"
+
+split@~0.2.10:
+ version "0.2.10"
+ resolved "https://registry.yarnpkg.com/split/-/split-0.2.10.tgz#67097c601d697ce1368f418f06cd201cf0521a57"
+ integrity sha1-Zwl8YB1pfOE2j0GPBs0gHPBSGlc=
+ dependencies:
+ through "2"
+
+sprintf-js@^1.0.3:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673"
+ integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==
+
+sprintf-js@~1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
+ integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
+
+sshpk@^1.7.0:
+ version "1.16.1"
+ resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877"
+ integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==
+ dependencies:
+ asn1 "~0.2.3"
+ assert-plus "^1.0.0"
+ bcrypt-pbkdf "^1.0.0"
+ dashdash "^1.12.0"
+ ecc-jsbn "~0.1.1"
+ getpass "^0.1.1"
+ jsbn "~0.1.0"
+ safer-buffer "^2.0.2"
+ tweetnacl "~0.14.0"
+
+ssri@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8"
+ integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==
+ dependencies:
+ figgy-pudding "^3.5.1"
+
+stack-trace@0.0.9:
+ version "0.0.9"
+ resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.9.tgz#a8f6eaeca90674c333e7c43953f275b451510695"
+ integrity sha1-qPbq7KkGdMMz58Q5U/J1tFFRBpU=
+
+stack-utils@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.2.tgz#33eba3897788558bebfc2db059dc158ec36cebb8"
+ integrity sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==
+
+static-eval@^2.0.0:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/static-eval/-/static-eval-2.0.5.tgz#f0782e66999c4b3651cda99d9ce59c507d188f71"
+ integrity sha512-nNbV6LbGtMBgv7e9LFkt5JV8RVlRsyJrphfAt9tOtBBW/SfnzZDf2KnS72an8e434A+9e/BmJuTxeGPvrAK7KA==
+ dependencies:
+ escodegen "^1.11.1"
+
+static-eval@~0.2.0:
+ version "0.2.4"
+ resolved "https://registry.yarnpkg.com/static-eval/-/static-eval-0.2.4.tgz#b7d34d838937b969f9641ca07d48f8ede263ea7b"
+ integrity sha1-t9NNg4k3uWn5ZBygfUj47eJj6ns=
+ dependencies:
+ escodegen "~0.0.24"
+
+static-extend@^0.1.1:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6"
+ integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=
+ dependencies:
+ define-property "^0.2.5"
+ object-copy "^0.1.0"
+
+static-module@^1.0.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/static-module/-/static-module-1.5.0.tgz#27da9883c41a8cd09236f842f0c1ebc6edf63d86"
+ integrity sha1-J9qYg8QajNCSNvhC8MHrxu32PYY=
+ dependencies:
+ concat-stream "~1.6.0"
+ duplexer2 "~0.0.2"
+ escodegen "~1.3.2"
+ falafel "^2.1.0"
+ has "^1.0.0"
+ object-inspect "~0.4.0"
+ quote-stream "~0.0.0"
+ readable-stream "~1.0.27-1"
+ shallow-copy "~0.0.1"
+ static-eval "~0.2.0"
+ through2 "~0.4.1"
+
+stealthy-require@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b"
+ integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=
+
+stream-browserify@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b"
+ integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==
+ dependencies:
+ inherits "~2.0.1"
+ readable-stream "^2.0.2"
+
+stream-each@^1.1.0:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae"
+ integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==
+ dependencies:
+ end-of-stream "^1.1.0"
+ stream-shift "^1.0.0"
+
+stream-http@^2.7.2:
+ version "2.8.3"
+ resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc"
+ integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==
+ dependencies:
+ builtin-status-codes "^3.0.0"
+ inherits "^2.0.1"
+ readable-stream "^2.3.6"
+ to-arraybuffer "^1.0.0"
+ xtend "^4.0.0"
+
+stream-shift@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d"
+ integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==
+
+string-length@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/string-length/-/string-length-2.0.0.tgz#d40dbb686a3ace960c1cffca562bf2c45f8363ed"
+ integrity sha1-1A27aGo6zpYMHP/KVivyxF+DY+0=
+ dependencies:
+ astral-regex "^1.0.0"
+ strip-ansi "^4.0.0"
+
+string-split-by@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/string-split-by/-/string-split-by-1.0.0.tgz#53895fb3397ebc60adab1f1e3a131f5372586812"
+ integrity sha512-KaJKY+hfpzNyet/emP81PJA9hTVSfxNLS9SFTWxdCnnW1/zOOwiV248+EfoX7IQFcBaOp4G5YE6xTJMF+pLg6A==
+ dependencies:
+ parenthesis "^3.1.5"
+
+string-to-arraybuffer@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/string-to-arraybuffer/-/string-to-arraybuffer-1.0.2.tgz#161147fbadea02e28b0935002cec4c40f1ca7f0a"
+ integrity sha512-DaGZidzi93dwjQen5I2osxR9ERS/R7B1PFyufNMnzhj+fmlDQAc1DSDIJVJhgI8Oq221efIMbABUBdPHDRt43Q==
+ dependencies:
+ atob-lite "^2.0.0"
+ is-base64 "^0.1.0"
+
+string-width@^1.0.1, "string-width@^1.0.2 || 2":
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
+ integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=
+ dependencies:
+ code-point-at "^1.0.0"
+ is-fullwidth-code-point "^1.0.0"
+ strip-ansi "^3.0.0"
+
+string-width@^3.0.0, string-width@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961"
+ integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==
+ dependencies:
+ emoji-regex "^7.0.1"
+ is-fullwidth-code-point "^2.0.0"
+ strip-ansi "^5.1.0"
+
+string-width@^4.1.0, string-width@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5"
+ integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==
+ dependencies:
+ emoji-regex "^8.0.0"
+ is-fullwidth-code-point "^3.0.0"
+ strip-ansi "^6.0.0"
+
+string.prototype.padend@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.1.0.tgz#dc08f57a8010dc5c153550318f67e13adbb72ac3"
+ integrity sha512-3aIv8Ffdp8EZj8iLwREGpQaUZiPyrWrpzMBHvkiSW/bK/EGve9np07Vwy7IJ5waydpGXzQZu/F8Oze2/IWkBaA==
+ dependencies:
+ define-properties "^1.1.3"
+ es-abstract "^1.17.0-next.1"
+
+string.prototype.trim@^1.2.1, string.prototype.trim@~1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.1.tgz#141233dff32c82bfad80684d7e5f0869ee0fb782"
+ integrity sha512-MjGFEeqixw47dAMFMtgUro/I0+wNqZB5GKXGt1fFr24u3TzDXCPu7J9Buppzoe3r/LqkSDLDDJzE15RGWDGAVw==
+ dependencies:
+ define-properties "^1.1.3"
+ es-abstract "^1.17.0-next.1"
+ function-bind "^1.1.1"
+
+string.prototype.trimend@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913"
+ integrity sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==
+ dependencies:
+ define-properties "^1.1.3"
+ es-abstract "^1.17.5"
+
+string.prototype.trimleft@^2.1.1:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz#4408aa2e5d6ddd0c9a80739b087fbc067c03b3cc"
+ integrity sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==
+ dependencies:
+ define-properties "^1.1.3"
+ es-abstract "^1.17.5"
+ string.prototype.trimstart "^1.0.0"
+
+string.prototype.trimright@^2.1.1:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz#c76f1cef30f21bbad8afeb8db1511496cfb0f2a3"
+ integrity sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==
+ dependencies:
+ define-properties "^1.1.3"
+ es-abstract "^1.17.5"
+ string.prototype.trimend "^1.0.0"
+
+string.prototype.trimstart@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz#14af6d9f34b053f7cfc89b72f8f2ee14b9039a54"
+ integrity sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==
+ dependencies:
+ define-properties "^1.1.3"
+ es-abstract "^1.17.5"
+
+string_decoder@^1.0.0, string_decoder@^1.1.1, string_decoder@~1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
+ integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
+ dependencies:
+ safe-buffer "~5.1.0"
+
+string_decoder@~0.10.x:
+ version "0.10.31"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
+ integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=
+
+strip-ansi@^3.0.0, strip-ansi@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
+ integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=
+ dependencies:
+ ansi-regex "^2.0.0"
+
+strip-ansi@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
+ integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8=
+ dependencies:
+ ansi-regex "^3.0.0"
+
+strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae"
+ integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==
+ dependencies:
+ ansi-regex "^4.1.0"
+
+strip-ansi@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532"
+ integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==
+ dependencies:
+ ansi-regex "^5.0.0"
+
+strip-bom@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
+ integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=
+
+strip-eof@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
+ integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=
+
+strip-json-comments@^3.1.0, strip-json-comments@^3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
+ integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
+
+strip-json-comments@~2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
+ integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo=
+
+strongly-connected-components@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/strongly-connected-components/-/strongly-connected-components-1.0.1.tgz#0920e2b4df67c8eaee96c6b6234fe29e873dba99"
+ integrity sha1-CSDitN9nyOrulsa2I0/inoc9upk=
+
+style-loader@^1.1.4:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-1.1.4.tgz#1ad81283cefe51096756fd62697258edad933230"
+ integrity sha512-SbBHRD8fwK3pX+4UDF4ETxUF0+rCvk29LWTTI7Rt0cgsDjAj3SWM76ByTe6u2+4IlJ/WwluB7wuslWETCoPQdg==
+ dependencies:
+ loader-utils "^2.0.0"
+ schema-utils "^2.6.5"
+
+supercluster@^6.0.1:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/supercluster/-/supercluster-6.0.2.tgz#aa2eaae185ef97872f388c683ec29f6991721ee3"
+ integrity sha512-aa0v2HURjBTOpbcknilcfxGDuArM8khklKSmZ/T8ZXL0BuRwb5aRw95lz+2bmWpFvCXDX/+FzqHxmg0TIaJErw==
+ dependencies:
+ kdbush "^3.0.0"
+
+superscript-text@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/superscript-text/-/superscript-text-1.0.0.tgz#e7cb2752567360df50beb0610ce8df3d71d8dfd8"
+ integrity sha1-58snUlZzYN9QvrBhDOjfPXHY39g=
+
+supports-color@6.1.0, supports-color@^6.1.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3"
+ integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==
+ dependencies:
+ has-flag "^3.0.0"
+
+supports-color@^5.3.0, supports-color@^5.4.0:
+ version "5.5.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
+ integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
+ dependencies:
+ has-flag "^3.0.0"
+
+supports-color@^7.1.0:
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
+ integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
+ dependencies:
+ has-flag "^4.0.0"
+
+surface-nets@^1.0.0, surface-nets@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/surface-nets/-/surface-nets-1.0.2.tgz#e433c8cbba94a7274c6f4c99552b461bf1fc7a4b"
+ integrity sha1-5DPIy7qUpydMb0yZVStGG/H8eks=
+ dependencies:
+ ndarray-extract-contour "^1.0.0"
+ triangulate-hypercube "^1.0.0"
+ zero-crossings "^1.0.0"
+
+svg-arc-to-cubic-bezier@^3.0.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/svg-arc-to-cubic-bezier/-/svg-arc-to-cubic-bezier-3.2.0.tgz#390c450035ae1c4a0104d90650304c3bc814abe6"
+ integrity sha512-djbJ/vZKZO+gPoSDThGNpKDO+o+bAeA4XQKovvkNCqnIS2t+S4qnLAGQhyyrulhCFRl1WWzAp0wUDV8PpTVU3g==
+
+svg-path-bounds@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/svg-path-bounds/-/svg-path-bounds-1.0.1.tgz#bf458b783726bf53431b4633f2792f60748d9f74"
+ integrity sha1-v0WLeDcmv1NDG0Yz8nkvYHSNn3Q=
+ dependencies:
+ abs-svg-path "^0.1.1"
+ is-svg-path "^1.0.1"
+ normalize-svg-path "^1.0.0"
+ parse-svg-path "^0.1.2"
+
+svg-path-sdf@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/svg-path-sdf/-/svg-path-sdf-1.1.3.tgz#92957a31784c0eaf68945472c8dc6bf9e6d126fc"
+ integrity sha512-vJJjVq/R5lSr2KLfVXVAStktfcfa1pNFjFOgyJnzZFXlO/fDZ5DmM8FpnSKKzLPfEYTVeXuVBTHF296TpxuJVg==
+ dependencies:
+ bitmap-sdf "^1.0.0"
+ draw-svg-path "^1.0.0"
+ is-svg-path "^1.0.1"
+ parse-svg-path "^0.1.2"
+ svg-path-bounds "^1.0.1"
+
+symbol-tree@^3.2.2:
+ version "3.2.4"
+ resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2"
+ integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==
+
+table@^5.2.3:
+ version "5.4.6"
+ resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e"
+ integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==
+ dependencies:
+ ajv "^6.10.2"
+ lodash "^4.17.14"
+ slice-ansi "^2.1.0"
+ string-width "^3.0.0"
+
+tapable@^1.0.0, tapable@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2"
+ integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==
+
+tape@^4.0.0:
+ version "4.13.2"
+ resolved "https://registry.yarnpkg.com/tape/-/tape-4.13.2.tgz#eb419b9d9bc004025b1a81a5b63093e07f425629"
+ integrity sha512-waWwC/OqYVE9TS6r1IynlP2sEdk4Lfo6jazlgkuNkPTHIbuG2BTABIaKdlQWwPeB6Oo4ksZ1j33Yt0NTOAlYMQ==
+ dependencies:
+ deep-equal "~1.1.1"
+ defined "~1.0.0"
+ dotignore "~0.1.2"
+ for-each "~0.3.3"
+ function-bind "~1.1.1"
+ glob "~7.1.6"
+ has "~1.0.3"
+ inherits "~2.0.4"
+ is-regex "~1.0.5"
+ minimist "~1.2.0"
+ object-inspect "~1.7.0"
+ resolve "~1.15.1"
+ resumer "~0.0.0"
+ string.prototype.trim "~1.2.1"
+ through "~2.3.8"
+
+tar@^4.4.2:
+ version "4.4.13"
+ resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525"
+ integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==
+ dependencies:
+ chownr "^1.1.1"
+ fs-minipass "^1.2.5"
+ minipass "^2.8.6"
+ minizlib "^1.2.1"
+ mkdirp "^0.5.0"
+ safe-buffer "^5.1.2"
+ yallist "^3.0.3"
+
+temp@^0.8.1:
+ version "0.8.4"
+ resolved "https://registry.yarnpkg.com/temp/-/temp-0.8.4.tgz#8c97a33a4770072e0a05f919396c7665a7dd59f2"
+ integrity sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg==
+ dependencies:
+ rimraf "~2.6.2"
+
+terser-webpack-plugin@^1.4.3:
+ version "1.4.3"
+ resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz#5ecaf2dbdc5fb99745fd06791f46fc9ddb1c9a7c"
+ integrity sha512-QMxecFz/gHQwteWwSo5nTc6UaICqN1bMedC5sMtUc7y3Ha3Q8y6ZO0iCR8pq4RJC8Hjf0FEPEHZqcMB/+DFCrA==
+ dependencies:
+ cacache "^12.0.2"
+ find-cache-dir "^2.1.0"
+ is-wsl "^1.1.0"
+ schema-utils "^1.0.0"
+ serialize-javascript "^2.1.2"
+ source-map "^0.6.1"
+ terser "^4.1.2"
+ webpack-sources "^1.4.0"
+ worker-farm "^1.7.0"
+
+terser@^4.1.2:
+ version "4.6.11"
+ resolved "https://registry.yarnpkg.com/terser/-/terser-4.6.11.tgz#12ff99fdd62a26de2a82f508515407eb6ccd8a9f"
+ integrity sha512-76Ynm7OXUG5xhOpblhytE7X58oeNSmC8xnNhjWVo8CksHit0U0kO4hfNbPrrYwowLWFgM2n9L176VNx2QaHmtA==
+ dependencies:
+ commander "^2.20.0"
+ source-map "~0.6.1"
+ source-map-support "~0.5.12"
+
+test-exclude@^5.2.3:
+ version "5.2.3"
+ resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-5.2.3.tgz#c3d3e1e311eb7ee405e092dac10aefd09091eac0"
+ integrity sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==
+ dependencies:
+ glob "^7.1.3"
+ minimatch "^3.0.4"
+ read-pkg-up "^4.0.0"
+ require-main-filename "^2.0.0"
+
+test-exclude@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e"
+ integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==
+ dependencies:
+ "@istanbuljs/schema" "^0.1.2"
+ glob "^7.1.4"
+ minimatch "^3.0.4"
+
+text-cache@^4.2.2:
+ version "4.2.2"
+ resolved "https://registry.yarnpkg.com/text-cache/-/text-cache-4.2.2.tgz#d0d30ba89b7312ea1c1a31cd9a4db56c1cef7fe7"
+ integrity sha512-zky+UDYiX0a/aPw/YTBD+EzKMlCTu1chFuCMZeAkgoRiceySdROu1V2kJXhCbtEdBhiOviYnAdGiSYl58HW0ZQ==
+ dependencies:
+ vectorize-text "^3.2.1"
+
+text-table@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
+ integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=
+
+throat@^4.0.0, throat@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a"
+ integrity sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=
+
+through2@^0.6.3:
+ version "0.6.5"
+ resolved "https://registry.yarnpkg.com/through2/-/through2-0.6.5.tgz#41ab9c67b29d57209071410e1d7a7a968cd3ad48"
+ integrity sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=
+ dependencies:
+ readable-stream ">=1.0.33-1 <1.1.0-0"
+ xtend ">=4.0.0 <4.1.0-0"
+
+through2@^2.0.0, through2@^2.0.1:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd"
+ integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==
+ dependencies:
+ readable-stream "~2.3.6"
+ xtend "~4.0.1"
+
+through2@~0.4.1:
+ version "0.4.2"
+ resolved "https://registry.yarnpkg.com/through2/-/through2-0.4.2.tgz#dbf5866031151ec8352bb6c4db64a2292a840b9b"
+ integrity sha1-2/WGYDEVHsg1K7bE22SiKSqEC5s=
+ dependencies:
+ readable-stream "~1.0.17"
+ xtend "~2.1.1"
+
+through@2, through@~2.3.4, through@~2.3.8:
+ version "2.3.8"
+ resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
+ integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
+
+timers-browserify@^2.0.4:
+ version "2.0.11"
+ resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.11.tgz#800b1f3eee272e5bc53ee465a04d0e804c31211f"
+ integrity sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==
+ dependencies:
+ setimmediate "^1.0.4"
+
+tinycolor2@^1.4.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.4.1.tgz#f4fad333447bc0b07d4dc8e9209d8f39a8ac77e8"
+ integrity sha1-9PrTM0R7wLB9TcjpIJ2POaisd+g=
+
+tinyqueue@^2.0.0:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/tinyqueue/-/tinyqueue-2.0.3.tgz#64d8492ebf39e7801d7bd34062e29b45b2035f08"
+ integrity sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA==
+
+tmpl@1.0.x:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1"
+ integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=
+
+to-array-buffer@^3.0.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/to-array-buffer/-/to-array-buffer-3.2.0.tgz#cb684dd691a7368c3b249c2348d75227f7d4dbb4"
+ integrity sha512-zN33mwi0gpL+7xW1ITLfJ48CEj6ZQW0ZAP0MU+2W3kEY0PAIncyuxmD4OqkUVhPAbTP7amq9j/iwvZKYS+lzSQ==
+ dependencies:
+ flatten-vertex-data "^1.0.2"
+ is-blob "^2.0.1"
+ string-to-arraybuffer "^1.0.0"
+
+to-arraybuffer@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43"
+ integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=
+
+to-fast-properties@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
+ integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=
+
+to-float32@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/to-float32/-/to-float32-1.0.1.tgz#22d5921f38183164b9e7e9876158c0c16cb9753a"
+ integrity sha512-nOy2WSwae3xhZbc+05xiCuU3ZPPmH0L4Rg4Q1qiOGFSuNSCTB9nVJaGgGl3ZScxAclX/L8hJuDHJGDAzbfuKCQ==
+
+to-object-path@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af"
+ integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=
+ dependencies:
+ kind-of "^3.0.2"
+
+to-px@^1.0.1:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/to-px/-/to-px-1.1.0.tgz#b6b269ed5db0cc9aefc15272a4c8bcb2ca1e99ca"
+ integrity sha512-bfg3GLYrGoEzrGoE05TAL/Uw+H/qrf2ptr9V3W7U0lkjjyYnIfgxmVLUfhQ1hZpIQwin81uxhDjvUkDYsC0xWw==
+ dependencies:
+ parse-unit "^1.0.1"
+
+to-regex-range@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38"
+ integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=
+ dependencies:
+ is-number "^3.0.0"
+ repeat-string "^1.6.1"
+
+to-regex-range@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
+ integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
+ dependencies:
+ is-number "^7.0.0"
+
+to-regex@^3.0.1, to-regex@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce"
+ integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==
+ dependencies:
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ regex-not "^1.0.2"
+ safe-regex "^1.1.0"
+
+to-uint8@^1.4.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/to-uint8/-/to-uint8-1.4.1.tgz#9f45694905b827f247d37bc8ec83b2818d81fac9"
+ integrity sha512-o+ochsMlTZyucbww8It401FC2Rx+OP2RpDeYbA6h+y9HgedDl1UjdsJ9CmzKEG7AFP9es5PmJ4eDWeeeXihESg==
+ dependencies:
+ arr-flatten "^1.1.0"
+ clamp "^1.0.1"
+ is-base64 "^0.1.0"
+ is-float-array "^1.0.0"
+ to-array-buffer "^3.0.0"
+
+topojson-client@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/topojson-client/-/topojson-client-2.1.0.tgz#ff9f7bf38991185e0b4284c2b06ae834f0eac6c8"
+ integrity sha1-/59784mRGF4LQoTCsGroNPDqxsg=
+ dependencies:
+ commander "2"
+
+tough-cookie@^2.3.3, tough-cookie@^2.3.4, tough-cookie@~2.5.0:
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2"
+ integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==
+ dependencies:
+ psl "^1.1.28"
+ punycode "^2.1.1"
+
+tr46@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09"
+ integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=
+ dependencies:
+ punycode "^2.1.0"
+
+triangulate-hypercube@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/triangulate-hypercube/-/triangulate-hypercube-1.0.1.tgz#d8071db2ebfcfd51f308d0bcf2a5c48a5b36d137"
+ integrity sha1-2Acdsuv8/VHzCNC88qXEils20Tc=
+ dependencies:
+ gamma "^0.1.0"
+ permutation-parity "^1.0.0"
+ permutation-rank "^1.0.0"
+
+triangulate-polyline@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/triangulate-polyline/-/triangulate-polyline-1.0.3.tgz#bf8ba877a85054103feb9fa5a61b4e8d7017814d"
+ integrity sha1-v4uod6hQVBA/65+lphtOjXAXgU0=
+ dependencies:
+ cdt2d "^1.0.0"
+
+ts-migrate-plugins@^0.1.10:
+ version "0.1.10"
+ resolved "https://registry.yarnpkg.com/ts-migrate-plugins/-/ts-migrate-plugins-0.1.10.tgz#504263f663b01f366aa9551f9c05594bcbdc58f4"
+ integrity sha512-Tk7dIpSR/fJDNVN2ZemqHAz2jV/6TvD0NgOk5BGuFXkHZQsXz+mRr2LMmxxRHPGtck8Cj9r3hzz6tLhUgyyVBQ==
+ dependencies:
+ eslint "^7.8.1"
+ jscodeshift "^0.7.0"
+ ts-migrate-server "^0.1.10"
+ typescript "4.0.2"
+
+ts-migrate-server@^0.1.10:
+ version "0.1.10"
+ resolved "https://registry.yarnpkg.com/ts-migrate-server/-/ts-migrate-server-0.1.10.tgz#d4b34e251a970a054655948d08c2b1320c74f452"
+ integrity sha512-vwVVgg1fI1aeYmV0/qtgETGnYMl57O2FopSynLHYU8aafa1bha6xDgoBsYa8w8AYVEtyMHt2F8WsHqmnyX/dJQ==
+ dependencies:
+ "@ts-morph/bootstrap" "^0.6.0"
+ typescript "4.0.2"
+ updatable-log "^0.2.0"
+
+ts-migrate@^0.1.10:
+ version "0.1.10"
+ resolved "https://registry.yarnpkg.com/ts-migrate/-/ts-migrate-0.1.10.tgz#4267702dea47d4859bfaf410f1088c327212c051"
+ integrity sha512-yARvC786gmv+HOw18GIt9PKemVfEINc5hl6Ybrkv/t80w2nxycv1MhQ/NmGNanfuO1xayqiBgoi9TNshzQQm6g==
+ dependencies:
+ create-jest-runner "^0.5.3"
+ json5 "^2.1.1"
+ json5-writer "^0.1.8"
+ ts-migrate-plugins "^0.1.10"
+ ts-migrate-server "^0.1.10"
+ typescript "4.0.2"
+ updatable-log "^0.2.0"
+ yargs "^15.0.2"
+
+tslib@^1.10.0, tslib@^1.9.0:
+ version "1.11.1"
+ resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.1.tgz#eb15d128827fbee2841549e171f45ed338ac7e35"
+ integrity sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==
+
+tty-browserify@0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6"
+ integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=
+
+tunnel-agent@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
+ integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=
+ dependencies:
+ safe-buffer "^5.0.1"
+
+turntable-camera-controller@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/turntable-camera-controller/-/turntable-camera-controller-3.0.1.tgz#8dbd3fe00550191c65164cb888971049578afd99"
+ integrity sha1-jb0/4AVQGRxlFky4iJcQSVeK/Zk=
+ dependencies:
+ filtered-vector "^1.2.1"
+ gl-mat4 "^1.0.2"
+ gl-vec3 "^1.0.2"
+
+tweetnacl@^0.14.3, tweetnacl@~0.14.0:
+ version "0.14.5"
+ resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
+ integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=
+
+two-product@^1.0.0, two-product@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/two-product/-/two-product-1.0.2.tgz#67d95d4b257a921e2cb4bd7af9511f9088522eaa"
+ integrity sha1-Z9ldSyV6kh4stL16+VEfkIhSLqo=
+
+two-sum@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/two-sum/-/two-sum-1.0.0.tgz#31d3f32239e4f731eca9df9155e2b297f008ab64"
+ integrity sha1-MdPzIjnk9zHsqd+RVeKyl/AIq2Q=
+
+type-check@^0.4.0, type-check@~0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1"
+ integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==
+ dependencies:
+ prelude-ls "^1.2.1"
+
+type-check@~0.3.2:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
+ integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=
+ dependencies:
+ prelude-ls "~1.1.2"
+
+type-fest@^0.8.1:
+ version "0.8.1"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d"
+ integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==
+
+type-name@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/type-name/-/type-name-2.0.2.tgz#efe7d4123d8ac52afff7f40c7e4dec5266008fb4"
+ integrity sha1-7+fUEj2KxSr/9/QMfk3sUmYAj7Q=
+
+type@^1.0.1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0"
+ integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==
+
+type@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/type/-/type-2.0.0.tgz#5f16ff6ef2eb44f260494dae271033b29c09a9c3"
+ integrity sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow==
+
+typedarray-pool@^1.0.0, typedarray-pool@^1.0.2, typedarray-pool@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/typedarray-pool/-/typedarray-pool-1.2.0.tgz#e7e90720144ba02b9ed660438af6f3aacfe33ac3"
+ integrity sha512-YTSQbzX43yvtpfRtIDAYygoYtgT+Rpjuxy9iOpczrjpXLgGoyG7aS5USJXV2d3nn8uHTeb9rXDvzS27zUg5KYQ==
+ dependencies:
+ bit-twiddle "^1.0.0"
+ dup "^1.0.0"
+
+typedarray@^0.0.6:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
+ integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
+
+typescript@4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.0.2.tgz#7ea7c88777c723c681e33bf7988be5d008d05ac2"
+ integrity sha512-e4ERvRV2wb+rRZ/IQeb3jm2VxBsirQLpQhdxplZ2MEzGvDkkMmPglecnNDfSUBivMjP93vRbngYYDQqQ/78bcQ==
+
+typescript@^4.1.2:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.1.2.tgz#6369ef22516fe5e10304aae5a5c4862db55380e9"
+ integrity sha512-thGloWsGH3SOxv1SoY7QojKi0tc+8FnOmiarEGMbd/lar7QOEd3hvlx3Fp5y6FlDUGl9L+pd4n2e+oToGMmhRQ==
+
+typescript@~4.0.2:
+ version "4.0.5"
+ resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.0.5.tgz#ae9dddfd1069f1cb5beb3ef3b2170dd7c1332389"
+ integrity sha512-ywmr/VrTVCmNTJ6iV2LwIrfG1P+lv6luD8sUJs+2eI9NLGigaN+nUQc13iHqisq7bra9lnmUSYqbJvegraBOPQ==
+
+uglify-js@^2.6.0:
+ version "2.8.29"
+ resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd"
+ integrity sha1-KcVzMUgFe7Th913zW3qcty5qWd0=
+ dependencies:
+ source-map "~0.5.1"
+ yargs "~3.10.0"
+ optionalDependencies:
+ uglify-to-browserify "~1.0.0"
+
+uglify-to-browserify@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7"
+ integrity sha1-bgkk1r2mta/jSeOabWMoUKD4grc=
+
+unc-path-regex@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa"
+ integrity sha1-5z3T17DXxe2G+6xrCufYxqadUPo=
+
+unicode-canonical-property-names-ecmascript@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818"
+ integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==
+
+unicode-match-property-ecmascript@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c"
+ integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==
+ dependencies:
+ unicode-canonical-property-names-ecmascript "^1.0.4"
+ unicode-property-aliases-ecmascript "^1.0.4"
+
+unicode-match-property-value-ecmascript@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531"
+ integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==
+
+unicode-property-aliases-ecmascript@^1.0.4:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4"
+ integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==
+
+union-find@^1.0.0, union-find@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/union-find/-/union-find-1.0.2.tgz#292bac415e6ad3a89535d237010db4a536284e58"
+ integrity sha1-KSusQV5q06iVNdI3AQ20pTYoTlg=
+
+union-find@~0.0.3:
+ version "0.0.4"
+ resolved "https://registry.yarnpkg.com/union-find/-/union-find-0.0.4.tgz#b854b3301619bdad144b0014c78f96eac0d2f0f6"
+ integrity sha1-uFSzMBYZva0USwAUx4+W6sDS8PY=
+
+union-value@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847"
+ integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==
+ dependencies:
+ arr-union "^3.1.0"
+ get-value "^2.0.6"
+ is-extendable "^0.1.1"
+ set-value "^2.0.1"
+
+uniq@^1.0.0, uniq@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff"
+ integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=
+
+unique-filename@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230"
+ integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==
+ dependencies:
+ unique-slug "^2.0.0"
+
+unique-slug@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c"
+ integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==
+ dependencies:
+ imurmurhash "^0.1.4"
+
+universalify@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d"
+ integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==
+
+universalify@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717"
+ integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==
+
+unquote@^1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544"
+ integrity sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=
+
+unset-value@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559"
+ integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=
+ dependencies:
+ has-value "^0.3.1"
+ isobject "^3.0.0"
+
+upath@^1.1.1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894"
+ integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==
+
+updatable-log@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/updatable-log/-/updatable-log-0.2.0.tgz#8adfe35dd744bd87e8bf217425e4e8bb81b6f3c6"
+ integrity sha512-gR48/mTR6YFB+B1sNoap3nx8HFbEvDl0ej9KhlQTFZdmP8yL5fzFiCUfeHCUf1QvNnXowY1pM9iiGkPKrd0XyQ==
+ dependencies:
+ chalk "^2.4.2"
+ figures "^3.0.0"
+ log-update "^3.3.0"
+
+update-diff@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/update-diff/-/update-diff-1.1.0.tgz#f510182d81ee819fb82c3a6b22b62bbdeda7808f"
+ integrity sha1-9RAYLYHugZ+4LDprIrYrve2ngI8=
+
+uri-js@^4.2.2:
+ version "4.2.2"
+ resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0"
+ integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==
+ dependencies:
+ punycode "^2.1.0"
+
+urix@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72"
+ integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=
+
+url@^0.11.0:
+ version "0.11.0"
+ resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1"
+ integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=
+ dependencies:
+ punycode "1.3.2"
+ querystring "0.2.0"
+
+use-debounce@^3.4.1:
+ version "3.4.1"
+ resolved "https://registry.yarnpkg.com/use-debounce/-/use-debounce-3.4.1.tgz#361a20e583c1bd4a44f8b29a26793a52a0b84d2c"
+ integrity sha512-KHZPsL+cZvOt/ZAsHTcoAK65ImXU0iG9FDeofuj9uJTdUULF6Gjws8HpK+JlIjZpZ7LTqPHZtEknc+Im4cB3AA==
+
+use-media@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/use-media/-/use-media-1.4.0.tgz#e777bf1f382a7aacabbd1f9ce3da2b62e58b2a98"
+ integrity sha512-XsgyUAf3nhzZmEfhc5MqLHwyaPjs78bgytpVJ/xDl0TF4Bptf3vEpBNBBT/EIKOmsOc8UbuECq3mrP3mt1QANA==
+
+use@^3.1.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"
+ integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==
+
+util-deprecate@^1.0.1, util-deprecate@~1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+ integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
+
+util.promisify@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.1.tgz#6baf7774b80eeb0f7520d8b81d07982a59abbaee"
+ integrity sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==
+ dependencies:
+ define-properties "^1.1.3"
+ es-abstract "^1.17.2"
+ has-symbols "^1.0.1"
+ object.getownpropertydescriptors "^2.1.0"
+
+util@0.10.3:
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9"
+ integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk=
+ dependencies:
+ inherits "2.0.1"
+
+util@^0.11.0:
+ version "0.11.1"
+ resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61"
+ integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==
+ dependencies:
+ inherits "2.0.3"
+
+utils-copy-error@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/utils-copy-error/-/utils-copy-error-1.0.1.tgz#791de393c0f09890afd59f3cbea635f079a94fa5"
+ integrity sha1-eR3jk8DwmJCv1Z88vqY18HmpT6U=
+ dependencies:
+ object-keys "^1.0.9"
+ utils-copy "^1.1.0"
+
+utils-copy@^1.0.0, utils-copy@^1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/utils-copy/-/utils-copy-1.1.1.tgz#6e2b97982aa8cd73e1182a3e6f8bec3c0f4058a7"
+ integrity sha1-biuXmCqozXPhGCo+b4vsPA9AWKc=
+ dependencies:
+ const-pinf-float64 "^1.0.0"
+ object-keys "^1.0.9"
+ type-name "^2.0.0"
+ utils-copy-error "^1.0.0"
+ utils-indexof "^1.0.0"
+ utils-regex-from-string "^1.0.0"
+ validate.io-array "^1.0.3"
+ validate.io-buffer "^1.0.1"
+ validate.io-nonnegative-integer "^1.0.0"
+
+utils-indexof@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/utils-indexof/-/utils-indexof-1.0.0.tgz#20feabf09ef1018b523643e8380e7bc83ec61b5c"
+ integrity sha1-IP6r8J7xAYtSNkPoOA57yD7GG1w=
+ dependencies:
+ validate.io-array-like "^1.0.1"
+ validate.io-integer-primitive "^1.0.0"
+
+utils-regex-from-string@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/utils-regex-from-string/-/utils-regex-from-string-1.0.0.tgz#fe1a2909f8de0ff0d5182c80fbc654d6a687d189"
+ integrity sha1-/hopCfjeD/DVGCyA+8ZU1qaH0Yk=
+ dependencies:
+ regex-regex "^1.0.0"
+ validate.io-string-primitive "^1.0.0"
+
+uuid@^3.3.2:
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"
+ integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==
+
+v8-compile-cache@2.0.3, v8-compile-cache@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz#00f7494d2ae2b688cfe2899df6ed2c54bef91dbe"
+ integrity sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w==
+
+validate-npm-package-license@^3.0.1:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"
+ integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==
+ dependencies:
+ spdx-correct "^3.0.0"
+ spdx-expression-parse "^3.0.0"
+
+validate.io-array-like@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/validate.io-array-like/-/validate.io-array-like-1.0.2.tgz#7af9f7eb7b51715beb2215668ec5cce54faddb5a"
+ integrity sha1-evn363tRcVvrIhVmjsXM5U+t21o=
+ dependencies:
+ const-max-uint32 "^1.0.2"
+ validate.io-integer-primitive "^1.0.0"
+
+validate.io-array@^1.0.3, validate.io-array@^1.0.6:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/validate.io-array/-/validate.io-array-1.0.6.tgz#5b5a2cafd8f8b85abb2f886ba153f2d93a27774d"
+ integrity sha1-W1osr9j4uFq7L4hroVPy2Tond00=
+
+validate.io-buffer@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/validate.io-buffer/-/validate.io-buffer-1.0.2.tgz#852d6734021914d5d13afc32531761e3720ed44e"
+ integrity sha1-hS1nNAIZFNXROvwyUxdh43IO1E4=
+
+validate.io-integer-primitive@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/validate.io-integer-primitive/-/validate.io-integer-primitive-1.0.0.tgz#a9aa010355fe8681c0fea6c1a74ad2419cadddc6"
+ integrity sha1-qaoBA1X+hoHA/qbBp0rSQZyt3cY=
+ dependencies:
+ validate.io-number-primitive "^1.0.0"
+
+validate.io-integer@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/validate.io-integer/-/validate.io-integer-1.0.5.tgz#168496480b95be2247ec443f2233de4f89878068"
+ integrity sha1-FoSWSAuVviJH7EQ/IjPeT4mHgGg=
+ dependencies:
+ validate.io-number "^1.0.3"
+
+validate.io-matrix-like@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/validate.io-matrix-like/-/validate.io-matrix-like-1.0.2.tgz#5ec32a75d0889dac736dea68bdd6145b155edfc3"
+ integrity sha1-XsMqddCInaxzbepovdYUWxVe38M=
+
+validate.io-ndarray-like@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/validate.io-ndarray-like/-/validate.io-ndarray-like-1.0.0.tgz#d8a3b0ed165bbf1d2fc0d0073270cfa552295919"
+ integrity sha1-2KOw7RZbvx0vwNAHMnDPpVIpWRk=
+
+validate.io-nonnegative-integer@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/validate.io-nonnegative-integer/-/validate.io-nonnegative-integer-1.0.0.tgz#8069243a08c5f98e95413c929dfd7b18f3f6f29f"
+ integrity sha1-gGkkOgjF+Y6VQTySnf17GPP28p8=
+ dependencies:
+ validate.io-integer "^1.0.5"
+
+validate.io-number-primitive@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/validate.io-number-primitive/-/validate.io-number-primitive-1.0.0.tgz#d2e01f202989369dcf1155449564203afe584e55"
+ integrity sha1-0uAfICmJNp3PEVVElWQgOv5YTlU=
+
+validate.io-number@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/validate.io-number/-/validate.io-number-1.0.3.tgz#f63ffeda248bf28a67a8d48e0e3b461a1665baf8"
+ integrity sha1-9j/+2iSL8opnqNSODjtGGhZluvg=
+
+validate.io-positive-integer@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/validate.io-positive-integer/-/validate.io-positive-integer-1.0.0.tgz#7ed2d03b4c27558cc66a00aab0f0e921814a6582"
+ integrity sha1-ftLQO0wnVYzGagCqsPDpIYFKZYI=
+ dependencies:
+ validate.io-integer "^1.0.5"
+
+validate.io-string-primitive@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/validate.io-string-primitive/-/validate.io-string-primitive-1.0.1.tgz#b8135b9fb1372bde02fdd53ad1d0ccd6de798fee"
+ integrity sha1-uBNbn7E3K94C/dU60dDM1t55j+4=
+
+vectorize-text@^3.2.1:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/vectorize-text/-/vectorize-text-3.2.1.tgz#85921abd9685af775fd20a01041a2837fe51bdb5"
+ integrity sha512-rGojF+D9BB96iPZPUitfq5kaiS6eCJmfEel0NXOK/MzZSuXGiwhoop80PtaDas9/Hg/oaox1tI9g3h93qpuspg==
+ dependencies:
+ cdt2d "^1.0.0"
+ clean-pslg "^1.1.0"
+ ndarray "^1.0.11"
+ planar-graph-to-polyline "^1.0.0"
+ simplify-planar-graph "^2.0.1"
+ surface-nets "^1.0.0"
+ triangulate-polyline "^1.0.0"
+
+verror@1.10.0:
+ version "1.10.0"
+ resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
+ integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=
+ dependencies:
+ assert-plus "^1.0.0"
+ core-util-is "1.0.2"
+ extsprintf "^1.2.0"
+
+vm-browserify@^1.0.1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0"
+ integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==
+
+vt-pbf@^3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/vt-pbf/-/vt-pbf-3.1.1.tgz#b0f627e39a10ce91d943b898ed2363d21899fb82"
+ integrity sha512-pHjWdrIoxurpmTcbfBWXaPwSmtPAHS105253P1qyEfSTV2HJddqjM+kIHquaT/L6lVJIk9ltTGc0IxR/G47hYA==
+ dependencies:
+ "@mapbox/point-geometry" "0.1.0"
+ "@mapbox/vector-tile" "^1.3.1"
+ pbf "^3.0.5"
+
+w3c-hr-time@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd"
+ integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==
+ dependencies:
+ browser-process-hrtime "^1.0.0"
+
+walker@^1.0.7, walker@~1.0.5:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb"
+ integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=
+ dependencies:
+ makeerror "1.0.x"
+
+watchpack@^1.6.0:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.1.tgz#280da0a8718592174010c078c7585a74cd8cd0e2"
+ integrity sha512-+IF9hfUFOrYOOaKyfaI7h7dquUIOgyEMoQMLA7OP5FxegKA2+XdXThAZ9TU2kucfhDH7rfMHs1oPYziVGWRnZA==
+ dependencies:
+ chokidar "^2.1.8"
+ graceful-fs "^4.1.2"
+ neo-async "^2.5.0"
+
+weak-map@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/weak-map/-/weak-map-1.0.5.tgz#79691584d98607f5070bd3b70a40e6bb22e401eb"
+ integrity sha1-eWkVhNmGB/UHC9O3CkDmuyLkAes=
+
+weakmap-shim@^1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/weakmap-shim/-/weakmap-shim-1.1.1.tgz#d65afd784109b2166e00ff571c33150ec2a40b49"
+ integrity sha1-1lr9eEEJshZuAP9XHDMVDsKkC0k=
+
+webgl-context@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/webgl-context/-/webgl-context-2.2.0.tgz#8f37d7257cf6df1cd0a49e6a7b1b721b94cc86a0"
+ integrity sha1-jzfXJXz23xzQpJ5qextyG5TMhqA=
+ dependencies:
+ get-canvas-context "^1.0.1"
+
+webidl-conversions@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad"
+ integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==
+
+webpack-cli@^3.3.11:
+ version "3.3.11"
+ resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.11.tgz#3bf21889bf597b5d82c38f215135a411edfdc631"
+ integrity sha512-dXlfuml7xvAFwYUPsrtQAA9e4DOe58gnzSxhgrO/ZM/gyXTBowrsYeubyN4mqGhYdpXMFNyQ6emjJS9M7OBd4g==
+ dependencies:
+ chalk "2.4.2"
+ cross-spawn "6.0.5"
+ enhanced-resolve "4.1.0"
+ findup-sync "3.0.0"
+ global-modules "2.0.0"
+ import-local "2.0.0"
+ interpret "1.2.0"
+ loader-utils "1.2.3"
+ supports-color "6.1.0"
+ v8-compile-cache "2.0.3"
+ yargs "13.2.4"
+
+webpack-sources@^1.4.0, webpack-sources@^1.4.1:
+ version "1.4.3"
+ resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933"
+ integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==
+ dependencies:
+ source-list-map "^2.0.0"
+ source-map "~0.6.1"
+
+webpack@^4.42.1:
+ version "4.42.1"
+ resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.42.1.tgz#ae707baf091f5ca3ef9c38b884287cfe8f1983ef"
+ integrity sha512-SGfYMigqEfdGchGhFFJ9KyRpQKnipvEvjc1TwrXEPCM6H5Wywu10ka8o3KGrMzSMxMQKt8aCHUFh5DaQ9UmyRg==
+ dependencies:
+ "@webassemblyjs/ast" "1.9.0"
+ "@webassemblyjs/helper-module-context" "1.9.0"
+ "@webassemblyjs/wasm-edit" "1.9.0"
+ "@webassemblyjs/wasm-parser" "1.9.0"
+ acorn "^6.2.1"
+ ajv "^6.10.2"
+ ajv-keywords "^3.4.1"
+ chrome-trace-event "^1.0.2"
+ enhanced-resolve "^4.1.0"
+ eslint-scope "^4.0.3"
+ json-parse-better-errors "^1.0.2"
+ loader-runner "^2.4.0"
+ loader-utils "^1.2.3"
+ memory-fs "^0.4.1"
+ micromatch "^3.1.10"
+ mkdirp "^0.5.3"
+ neo-async "^2.6.1"
+ node-libs-browser "^2.2.1"
+ schema-utils "^1.0.0"
+ tapable "^1.1.3"
+ terser-webpack-plugin "^1.4.3"
+ watchpack "^1.6.0"
+ webpack-sources "^1.4.1"
+
+wgs84@0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/wgs84/-/wgs84-0.0.0.tgz#34fdc555917b6e57cf2a282ed043710c049cdc76"
+ integrity sha1-NP3FVZF7blfPKigu0ENxDASc3HY=
+
+whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0"
+ integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==
+ dependencies:
+ iconv-lite "0.4.24"
+
+whatwg-mimetype@^2.1.0, whatwg-mimetype@^2.2.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf"
+ integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==
+
+whatwg-url@^6.4.1:
+ version "6.5.0"
+ resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.5.0.tgz#f2df02bff176fd65070df74ad5ccbb5a199965a8"
+ integrity sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==
+ dependencies:
+ lodash.sortby "^4.7.0"
+ tr46 "^1.0.1"
+ webidl-conversions "^4.0.2"
+
+whatwg-url@^7.0.0:
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06"
+ integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==
+ dependencies:
+ lodash.sortby "^4.7.0"
+ tr46 "^1.0.1"
+ webidl-conversions "^4.0.2"
+
+which-module@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
+ integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=
+
+which@^1.2.14, which@^1.2.9, which@^1.3.0, which@^1.3.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
+ integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
+ dependencies:
+ isexe "^2.0.0"
+
+which@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
+ integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
+ dependencies:
+ isexe "^2.0.0"
+
+wide-align@^1.1.0:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457"
+ integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==
+ dependencies:
+ string-width "^1.0.2 || 2"
+
+window-size@0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d"
+ integrity sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=
+
+word-wrap@^1.2.3, word-wrap@~1.2.3:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
+ integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==
+
+wordwrap@0.0.2:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f"
+ integrity sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=
+
+worker-farm@^1.7.0:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8"
+ integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==
+ dependencies:
+ errno "~0.1.7"
+
+world-calendars@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/world-calendars/-/world-calendars-1.0.3.tgz#b25c5032ba24128ffc41d09faf4a5ec1b9c14335"
+ integrity sha1-slxQMrokEo/8QdCfr0pewbnBQzU=
+ dependencies:
+ object-assign "^4.1.0"
+
+wrap-ansi@^5.0.0, wrap-ansi@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09"
+ integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==
+ dependencies:
+ ansi-styles "^3.2.0"
+ string-width "^3.0.0"
+ strip-ansi "^5.0.0"
+
+wrap-ansi@^6.2.0:
+ version "6.2.0"
+ resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53"
+ integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==
+ dependencies:
+ ansi-styles "^4.0.0"
+ string-width "^4.1.0"
+ strip-ansi "^6.0.0"
+
+wrappy@1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+ integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
+
+write-file-atomic@2.4.1, write-file-atomic@^2.3.0:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.1.tgz#d0b05463c188ae804396fd5ab2a370062af87529"
+ integrity sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg==
+ dependencies:
+ graceful-fs "^4.1.11"
+ imurmurhash "^0.1.4"
+ signal-exit "^3.0.2"
+
+ws@^5.2.0:
+ version "5.2.2"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f"
+ integrity sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==
+ dependencies:
+ async-limiter "~1.0.0"
+
+xml-name-validator@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a"
+ integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==
+
+"xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.0, xtend@~4.0.1:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
+ integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
+
+xtend@^2.1.2:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.2.0.tgz#eef6b1f198c1c8deafad8b1765a04dad4a01c5a9"
+ integrity sha1-7vax8ZjByN6vrYsXZaBNrUoBxak=
+
+xtend@~2.1.1:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.1.2.tgz#6efecc2a4dad8e6962c4901b337ce7ba87b5d28b"
+ integrity sha1-bv7MKk2tjmlixJAbM3znuoe10os=
+ dependencies:
+ object-keys "~0.4.0"
+
+y18n@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b"
+ integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==
+
+yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
+ integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
+
+yallist@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
+ integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
+
+yargs-parser@^13.1.0, yargs-parser@^13.1.2:
+ version "13.1.2"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38"
+ integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==
+ dependencies:
+ camelcase "^5.0.0"
+ decamelize "^1.2.0"
+
+yargs-parser@^18.1.2:
+ version "18.1.3"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0"
+ integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==
+ dependencies:
+ camelcase "^5.0.0"
+ decamelize "^1.2.0"
+
+yargs@13.2.4:
+ version "13.2.4"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.2.4.tgz#0b562b794016eb9651b98bd37acf364aa5d6dc83"
+ integrity sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg==
+ dependencies:
+ cliui "^5.0.0"
+ find-up "^3.0.0"
+ get-caller-file "^2.0.1"
+ os-locale "^3.1.0"
+ require-directory "^2.1.1"
+ require-main-filename "^2.0.0"
+ set-blocking "^2.0.0"
+ string-width "^3.0.0"
+ which-module "^2.0.0"
+ y18n "^4.0.0"
+ yargs-parser "^13.1.0"
+
+yargs@^13.3.0:
+ version "13.3.2"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd"
+ integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==
+ dependencies:
+ cliui "^5.0.0"
+ find-up "^3.0.0"
+ get-caller-file "^2.0.1"
+ require-directory "^2.1.1"
+ require-main-filename "^2.0.0"
+ set-blocking "^2.0.0"
+ string-width "^3.0.0"
+ which-module "^2.0.0"
+ y18n "^4.0.0"
+ yargs-parser "^13.1.2"
+
+yargs@^15.0.2:
+ version "15.4.1"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8"
+ integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==
+ dependencies:
+ cliui "^6.0.0"
+ decamelize "^1.2.0"
+ find-up "^4.1.0"
+ get-caller-file "^2.0.1"
+ require-directory "^2.1.1"
+ require-main-filename "^2.0.0"
+ set-blocking "^2.0.0"
+ string-width "^4.2.0"
+ which-module "^2.0.0"
+ y18n "^4.0.0"
+ yargs-parser "^18.1.2"
+
+yargs@~3.10.0:
+ version "3.10.0"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1"
+ integrity sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=
+ dependencies:
+ camelcase "^1.0.2"
+ cliui "^2.1.0"
+ decamelize "^1.0.0"
+ window-size "0.1.0"
+
+zero-crossings@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/zero-crossings/-/zero-crossings-1.0.1.tgz#c562bd3113643f3443a245d12406b88b69b9a9ff"
+ integrity sha1-xWK9MRNkPzRDokXRJAa4i2m5qf8=
+ dependencies:
+ cwise-compiler "^1.0.0"
diff --git a/webpack.config.js b/webpack.config.js
new file mode 100644
index 000000000..5aa2a49af
--- /dev/null
+++ b/webpack.config.js
@@ -0,0 +1,293 @@
+/* eslint-disable */
+
+const webpack = require("webpack");
+const HtmlWebpackPlugin = require("html-webpack-plugin");
+const WebpackBuildNotifierPlugin = require("webpack-build-notifier");
+const ManifestPlugin = require("webpack-manifest-plugin");
+const MiniCssExtractPlugin = require("mini-css-extract-plugin");
+const CopyWebpackPlugin = require("copy-webpack-plugin");
+const LessPluginAutoPrefix = require("less-plugin-autoprefix");
+const BundleAnalyzerPlugin = require("webpack-bundle-analyzer")
+ .BundleAnalyzerPlugin;
+const ReactRefreshWebpackPlugin = require("@pmmmwh/react-refresh-webpack-plugin");
+
+const path = require("path");
+
+function optionalRequire(module, defaultReturn = undefined) {
+ try {
+ require.resolve(module);
+ } catch (e) {
+ if (e && e.code === "MODULE_NOT_FOUND") {
+ // Module was not found, return default value if any
+ return defaultReturn;
+ }
+ throw e;
+ }
+ return require(module);
+}
+
+// Load optionally configuration object (see scripts/README)
+const CONFIG = optionalRequire("./scripts/config", {});
+
+const isProduction = process.env.NODE_ENV === "production";
+const isDevelopment = !isProduction;
+const isHotReloadingEnabled =
+ isDevelopment && process.env.HOT_RELOAD === "true";
+
+const redashBackend = process.env.REDASH_BACKEND || "http://localhost:5001";
+const baseHref = CONFIG.baseHref || "/";
+const staticPath = CONFIG.staticPath || "/static/";
+const htmlTitle = CONFIG.title || "Redash";
+
+const basePath = path.join(__dirname, "client");
+const appPath = path.join(__dirname, "client", "app");
+
+const extensionsRelativePath =
+ process.env.EXTENSIONS_DIRECTORY || path.join("client", "app", "extensions");
+const extensionPath = path.join(__dirname, extensionsRelativePath);
+
+// Function to apply configuration overrides (see scripts/README)
+function maybeApplyOverrides(config) {
+ const overridesLocation =
+ process.env.REDASH_WEBPACK_OVERRIDES || "./scripts/webpack/overrides";
+ const applyOverrides = optionalRequire(overridesLocation);
+ if (!applyOverrides) {
+ return config;
+ }
+ console.info("Custom overrides found. Applying them...");
+ const newConfig = applyOverrides(config);
+ console.info("Custom overrides applied successfully.");
+ return newConfig;
+}
+
+const config = {
+ mode: isProduction ? "production" : "development",
+ entry: {
+ app: [
+ "./client/app/index.js",
+ "./client/app/assets/less/main.less",
+ "./client/app/assets/less/ant.less"
+ ],
+ server: ["./client/app/assets/less/server.less"]
+ },
+ output: {
+ path: path.join(basePath, "./dist"),
+ filename: isProduction ? "[name].[chunkhash].js" : "[name].js",
+ publicPath: staticPath
+ },
+ resolve: {
+ symlinks: false,
+ extensions: [".js", ".jsx", ".ts", ".tsx"],
+ alias: {
+ "@": appPath,
+ extensions: extensionPath
+ }
+ },
+ plugins: [
+ new WebpackBuildNotifierPlugin({ title: "Redash" }),
+ // bundle only default `moment` locale (`en`)
+ new webpack.ContextReplacementPlugin(/moment[\/\\]locale$/, /en/),
+ new HtmlWebpackPlugin({
+ template: "./client/app/index.html",
+ filename: "index.html",
+ excludeChunks: ["server"],
+ release: process.env.BUILD_VERSION || "dev",
+ staticPath,
+ baseHref,
+ title: htmlTitle
+ }),
+ new HtmlWebpackPlugin({
+ template: "./client/app/multi_org.html",
+ filename: "multi_org.html",
+ excludeChunks: ["server"]
+ }),
+ isProduction &&
+ new MiniCssExtractPlugin({
+ filename: "[name].[chunkhash].css"
+ }),
+ new ManifestPlugin({
+ fileName: "asset-manifest.json",
+ publicPath: ""
+ }),
+ new CopyWebpackPlugin([
+ { from: "client/app/assets/robots.txt" },
+ { from: "client/app/unsupported.html" },
+ { from: "client/app/unsupportedRedirect.js" },
+ { from: "client/app/assets/css/*.css", to: "styles/", flatten: true },
+ { from: "client/app/assets/fonts", to: "fonts/" }
+ ]),
+ isHotReloadingEnabled && new ReactRefreshWebpackPlugin({ overlay: false })
+ ].filter(Boolean),
+ optimization: {
+ splitChunks: {
+ chunks: chunk => {
+ return chunk.name != "server";
+ }
+ }
+ },
+ module: {
+ rules: [
+ {
+ test: /\.(t|j)sx?$/,
+ exclude: /node_modules/,
+ use: [
+ {
+ loader: require.resolve("babel-loader"),
+ options: {
+ plugins: [
+ isHotReloadingEnabled && require.resolve("react-refresh/babel")
+ ].filter(Boolean)
+ }
+ },
+ require.resolve("eslint-loader")
+ ]
+ },
+ {
+ test: /\.html$/,
+ exclude: [/node_modules/, /index\.html/, /multi_org\.html/],
+ use: [
+ {
+ loader: "raw-loader"
+ }
+ ]
+ },
+ {
+ test: /\.css$/,
+ use: [
+ {
+ loader: isProduction ? MiniCssExtractPlugin.loader : "style-loader"
+ },
+ {
+ loader: "css-loader",
+ options: {
+ minimize: process.env.NODE_ENV === "production"
+ }
+ }
+ ]
+ },
+ {
+ test: /\.less$/,
+ use: [
+ {
+ loader: isProduction ? MiniCssExtractPlugin.loader : "style-loader"
+ },
+ {
+ loader: "css-loader",
+ options: {
+ minimize: isProduction
+ }
+ },
+ {
+ loader: "less-loader",
+ options: {
+ plugins: [
+ new LessPluginAutoPrefix({ browsers: ["last 3 versions"] })
+ ],
+ javascriptEnabled: true
+ }
+ }
+ ]
+ },
+ {
+ test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
+ use: [
+ {
+ loader: "file-loader",
+ options: {
+ context: path.resolve(appPath, "./assets/images/"),
+ outputPath: "images/",
+ name: "[path][name].[ext]"
+ }
+ }
+ ]
+ },
+ {
+ test: /\.geo\.json$/,
+ type: "javascript/auto",
+ use: [
+ {
+ loader: "file-loader",
+ options: {
+ outputPath: "data/",
+ name: "[hash:7].[name].[ext]"
+ }
+ }
+ ]
+ },
+ {
+ test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
+ use: [
+ {
+ loader: "url-loader",
+ options: {
+ limit: 10000,
+ name: "fonts/[name].[hash:7].[ext]"
+ }
+ }
+ ]
+ }
+ ]
+ },
+ devtool: isProduction ? "source-map" : "cheap-eval-module-source-map",
+ stats: {
+ children: false,
+ modules: false,
+ chunkModules: false
+ },
+ watchOptions: {
+ ignored: /\.sw.$/
+ },
+ devServer: {
+ inline: true,
+ index: "/static/index.html",
+ historyApiFallback: {
+ index: "/static/index.html",
+ rewrites: [{ from: /./, to: "/static/index.html" }]
+ },
+ contentBase: false,
+ publicPath: staticPath,
+ proxy: [
+ {
+ context: [
+ "/login",
+ "/logout",
+ "/invite",
+ "/setup",
+ "/status.json",
+ "/api",
+ "/oauth"
+ ],
+ target: redashBackend + "/",
+ changeOrigin: false,
+ secure: false
+ },
+ {
+ context: path => {
+ // CSS/JS for server-rendered pages should be served from backend
+ return /^\/static\/[a-z]+\.[0-9a-fA-F]+\.(css|js)$/.test(path);
+ },
+ target: redashBackend + "/",
+ changeOrigin: true,
+ secure: false
+ }
+ ],
+ stats: {
+ modules: false,
+ chunkModules: false
+ },
+ hot: isHotReloadingEnabled
+ },
+ performance: {
+ hints: false
+ }
+};
+
+if (process.env.DEV_SERVER_HOST) {
+ config.devServer.host = process.env.DEV_SERVER_HOST;
+}
+
+if (process.env.BUNDLE_ANALYZER) {
+ config.plugins.push(new BundleAnalyzerPlugin());
+}
+
+module.exports = maybeApplyOverrides(config);